Board logo

标题: [文本处理] 新人学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"
  1. @echo off
  2. rem 如果你的文件不止100个.把num初始值改为1000,!num:~-2!改为!num:~-3!,依此类推...
  3. setlocal enableDelayedExpansion
  4. set /p s=请输入文件的扩展名(如txt):
  5. set num=100
  6. echo 开始处理,请稍等。。。。。
  7. echo.
  8. for  %%a in (*) do (
  9.      if not "%%a"=="%~nx0" (
  10.      set /a num+=1
  11.     if "%%~xa"=="" (ren "%%a" "!num:~-2!.%s%"
  12.       )else (ren "%%a" "!num:~-2!%%~xa")
  13.    )
  14. )
  15. 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