中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-28 09:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【已解决】截取文件名 重命名文件 查看 1,137 回复 3
楼 主 【已解决】截取文件名 重命名文件 发表于 2010-04-15 12:06 ·  中国 山东 济南 联通
初级用户
积分 27
发帖 18
注册 2010-03-18 15:26
16年会员
UID 162471
性别 男
状态 离线
初学bat处理,问题浅显不要见笑。
在A文件夹下有许多以电影名命名的文件夹,
电影文件夹下有 多个视频文件,视频文件的
视频文件有一个规律,都是XXX1.TS;XXX2.TS。后缀前面有一位数字

目标:A文件夹下有个B文件夹,B文件夹下文件重命名为
B1.TS.
我写的代码,老是截取文件名不对。

@echo off
set folder=D:\DOS-Test\资料
for /d %%a in (*) do (
for /f "delims=" %%b in ('dir /b "%folder%\%%a"') do (
set char=%b:~-5% :: 截取B文件夹下的文件的倒数后五位的字符串
ren "%folder%\%%a\%%b" "%%a%chari%" ::重命名文件
set char= ::把变量置空
)
)

大侠指导下,思量了好长时间,在论坛里没找到答案。纠结了。
for里面的 变量可以 %%a 这样使用;但是自己设置的变量,需用%a%

[ Last edited by xueshan007050 on 2010-4-19 at 17:21 ]
2 发表于 2010-04-15 12:41 ·  中国 湖北 武汉 教育网
新手上路
积分 17
发帖 19
注册 2010-03-22 20:52
16年会员
UID 162805
性别 男
来自 湖北
状态 离线
好像你没有设置变量延迟
3 发表于 2010-04-15 13:26 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
set char=%b:~-5%这里的b哪来的?如果要把%%b做变量截取,需要先赋值
set char=这个没必要
在for /f内开变量延迟

[ Last edited by Hanyeguxing on 2010-4-15 at 13:27 ]
4 谢谢楼上几位的指导。现在可以结贴了 发表于 2010-04-19 16:29 ·  中国 山东 济南 联通
初级用户
积分 27
发帖 18
注册 2010-03-18 15:26
16年会员
UID 162471
性别 男
状态 离线
Originally posted by xueshan007050 at 2010-4-15 12:06:
初学bat处理,问题浅显不要见笑。
在A文件夹下有许多以电影名命名的文件夹,
电影文件夹下有 多个视频文件,视频文件的
视频文件有一个规律, ...



现在可以结贴了:
@echo off&setlocal EnableDelayedExpansion
set folder=D:\DOS-Test\资料
for /d %%a in (*) do (
echo %%a
for /f %%b in ('dir /a-d /b "%folder%\%%a\*.txt"') do (set name=%%~nb
ren %folder%\%%a\%%~nb.txt %%a!name:~-1,1!.txt
echo !name:~-1,1!
)
)
pause
论坛跳转: