找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28067|回复: 12

[文本处理] 新人学BAT批处理代码重命名文件,请求解说含义

[复制链接]
发表于 2014-1-12 12:21:13 | 显示全部楼层 |阅读模式
大家好,最近在本网站学习批处理的知识,真是丰富,特别是给新人的帖子,很是受用。但是还有有好多不明白,请给以解释,谢谢。
下面代码是有关重命名的,看不大懂有
第一:在 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
复制代码
发表于 2014-1-12 13:41:52 | 显示全部楼层
第一:在 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"
 楼主| 发表于 2014-1-12 14:29:55 | 显示全部楼层
本帖最后由 lzyecho 于 2014-1-12 14:31 编辑

回复 2# battab


    您好,感谢您的答复!!
第2个明白了。
第1个不是截取num即100的后2 位吗,即00吗?不就是等于0吗? 开始计数不是从100开始累加的吗?这个代码累加的先后搞不太明白。再请明示!谢谢。
发表于 2014-1-12 21:17:27 | 显示全部楼层
回复 1# lzyecho


    if not "%%a"=="%~nx0"    后面为什么是nx0呢
 楼主| 发表于 2014-1-12 22:01:09 | 显示全部楼层
%~nx0  是指批处理本身。意思是对除了批处理以外的文件重命名。
发表于 2014-1-12 22:53:37 | 显示全部楼层
回复 3# lzyecho
for循环每执行一次,num自加1.所以num的值依次为:101,102,103……
 楼主| 发表于 2014-1-12 23:11:57 | 显示全部楼层
回复 6# battab


    不对的,你试一下,是从01开始命名的 01 02 03 04.......,而不是从100开始的!!
发表于 2014-1-13 08:21:32 | 显示全部楼层
回复 7# lzyecho
num取值依次为101,102,103……后都截取后两位不就是:01,02,03……
 楼主| 发表于 2014-1-13 18:55:48 | 显示全部楼层
回复 8# battab

噢 ,这样啊!!明白了,明白了,谢谢。
发表于 2014-1-14 14:57:46 | 显示全部楼层
回复 5# lzyecho


    谢谢你的回复 这点明白了。if not "%%a"=="%~nx0"  意思是除批处理本身外 其它按下代码执行。。。"%~nx0"扩展到 文件名+扩展名  
整个代码意思是  是文件夹就改名为 01+所输入扩展名了  扩展名不为空的就改名为01+扩展名
但是文件夹就改名为 01+所输入扩展名对 这点有点别扭 不知道哪理理解错了 望指教
发表于 2014-1-14 15:03:01 | 显示全部楼层
回复 10# zaixinxiangnian


for %%a in (*) 根本不会处理文件夹
发表于 2014-1-14 23:07:58 | 显示全部楼层
谢谢DAIC大校,我记住了 那这里的意思是不是 扩展名为空的改为改名为01+所输入扩展名 否则就直接改名为01+文件的扩展名
if "%%~xa"=="" (ren "%%a" "!num:~-2!.%s%"
)else (ren "%%a" "!num:~-2!%%~xa")
发表于 2014-1-15 08:45:04 | 显示全部楼层
回复 12# zaixinxiangnian


    是的,就是这样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 23:43 , Processed in 0.034134 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表