标题: [文本处理] 新人学BAT批处理代码重命名文件,请求解说含义 [打印本页]
作者: lzyecho 时间: 2014-1-12 12:21 标题: 新人学BAT批处理代码重命名文件,请求解说含义
大家好,最近在本网站学习批处理的知识,真是丰富,特别是给新人的帖子,很是受用。但是还有有好多不明白,请给以解释,谢谢。
下面代码是有关重命名的,看不大懂有
第一:在 ren "%%a" "!num:~-2!.%s%" 中,“num:~-2 ”的意思?是截取字所给的num字符?在前面代码中给了num的值是100,为什么执行的结果是文件名都是按两位数排列的?且是从第1开始的,不是在num之上累加的吗;
第二:在ren "%%a" "!num:~-2!%%~xa" 中,在扩展名中%%~xa 中,%%~x是固定不变的吗,紧跟在其后的a必须与前的变量%%a中的字母a一致吗?即前面的改名也可变成 ren "%%i" "!num:~-2!%%~xi"- @echo off
- rem 如果你的文件不止100个.把num初始值改为1000,!num:~-2!改为!num:~-3!,依此类推...
- setlocal enableDelayedExpansion
- set /p s=请输入文件的扩展名(如txt):
- set num=100
- echo 开始处理,请稍等。。。。。
- echo.
- for %%a in (*) do (
- if not "%%a"=="%~nx0" (
- set /a num+=1
- if "%%~xa"=="" (ren "%%a" "!num:~-2!.%s%"
- )else (ren "%%a" "!num:~-2!%%~xa")
- )
- )
- pause>nul
复制代码
作者: battab 时间: 2014-1-12 13:41
第一:在 ren "%%a" "!num:~-2!.%s%" 中,“num:~-2 ”的意思?是截取字所给的num字符?在前面代码中给了num的值是100,为什么执行的结果是文件名都是按两位数排列的?且是从第1开始的,不是在num之上累加的吗;
第二:在ren "%%a" "!num:~-2!%%~xa" 中,在扩展名中%%~xa 中,%%~x是固定不变的吗,紧跟在其后的a必须与前的变量%%a中的字母a一致吗?即前面的改名也可变成 ren "%%i" "!num:~-2!%%~xi"
回复 1# lzyecho
第一:“num:~-2 ”是截取后两位字符;num设置成100累加后再截取后两位可以获得01,02,03的效果;
第二:for %%a,所以后面的都用“ren "%%a" "!num:~-2!%%~xa",如果换成for %%i,那后面的也要换一致像这样才行:“ren "%%i" "!num:~-2!%%~xi"
作者: lzyecho 时间: 2014-1-12 14:29
本帖最后由 lzyecho 于 2014-1-12 14:31 编辑
回复 2# battab
您好,感谢您的答复!!
第2个明白了。
第1个不是截取num即100的后2 位吗,即00吗?不就是等于0吗? 开始计数不是从100开始累加的吗?这个代码累加的先后搞不太明白。再请明示!谢谢。
作者: zaixinxiangnian 时间: 2014-1-12 21:17
回复 1# lzyecho
if not "%%a"=="%~nx0" 后面为什么是nx0呢
作者: lzyecho 时间: 2014-1-12 22:01
%~nx0 是指批处理本身。意思是对除了批处理以外的文件重命名。
作者: battab 时间: 2014-1-12 22:53
回复 3# lzyecho
for循环每执行一次,num自加1.所以num的值依次为:101,102,103……
作者: lzyecho 时间: 2014-1-12 23:11
回复 6# battab
不对的,你试一下,是从01开始命名的 01 02 03 04.......,而不是从100开始的!!
作者: battab 时间: 2014-1-13 08:21
回复 7# lzyecho
num取值依次为101,102,103……后都截取后两位不就是:01,02,03……
作者: lzyecho 时间: 2014-1-13 18:55
回复 8# battab
噢 ,这样啊!!明白了,明白了,谢谢。
作者: zaixinxiangnian 时间: 2014-1-14 14:57
回复 5# lzyecho
谢谢你的回复 这点明白了。if not "%%a"=="%~nx0" 意思是除批处理本身外 其它按下代码执行。。。"%~nx0"扩展到 文件名+扩展名
整个代码意思是 是文件夹就改名为 01+所输入扩展名了 扩展名不为空的就改名为01+扩展名
但是文件夹就改名为 01+所输入扩展名对 这点有点别扭 不知道哪理理解错了 望指教
作者: DAIC 时间: 2014-1-14 15:03
回复 10# zaixinxiangnian
for %%a in (*) 根本不会处理文件夹
作者: zaixinxiangnian 时间: 2014-1-14 23:07
谢谢DAIC大校,我记住了 那这里的意思是不是 扩展名为空的改为改名为01+所输入扩展名 否则就直接改名为01+文件的扩展名
if "%%~xa"=="" (ren "%%a" "!num:~-2!.%s%"
)else (ren "%%a" "!num:~-2!%%~xa")
作者: DAIC 时间: 2014-1-15 08:45
回复 12# zaixinxiangnian
是的,就是这样。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |