[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批量重命名的批处理为何实际效果不对?

自己写了个批量重命名的批处理 代码如下
  1. @echo off
  2. ::接收用户输入
  3. set /p name=请输入修改后的名称:
  4. set /p id=请输入起始编号:
  5. ::处理阶段
  6. setlocal enabledelayedexpansion
  7. for %%i in (*.jpg) do (
  8.         ren "%%i" %name%!id!.jpg"
  9.         set /a id+=1
  10. )
  11. echo 处理完毕!
  12. pause
复制代码
例如输入abc和2, 修改后实际效果可能不是从abc2.jpg开始 而是从abc3.jpg开始 请问这是为什么呢?
此外, 用for /r也是同样的问题, 但如果用for /f %%i ('dir /b *.jpg')就一切正常 请问这是为什么?
麻烦各位了

(*.jpg)是动态获取文件交给for命令逐个处理
('dir /b *.jpg')是一次性获取文件交给for命令逐个处理
前者实际上也从abc2.jpg开始的,只不过后来又被重复处理了。

TOP

本帖最后由 frankzjx0319 于 2013-6-7 12:39 编辑

非常感谢Python兄的解答~了解了~

TOP

回复 2# Python
请教下:
           没什么计算机基础,所以,我是这么理解动态捕获的.
           假如第一次命名为abc2.jpg,n=3,然后abc3.jpg,n=4........,那应该是循环直至n溢出才对吧
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 4# xxpinqz
  1. @echo off
  2. ::接收用户输入
  3. set /p name=请输入修改后的名称:
  4. set /p id=请输入起始编号:
  5. ::处理阶段
  6. setlocal enabledelayedexpansion
  7. for %%i in (*.jpg) do (
  8.     ren "%%i" %name%!id!.jpg"
  9.     echo !id!
  10.     pause
  11.     set /a id+=1
  12. )
  13. echo 处理完毕!
  14. pause
复制代码
单步执行,每ren一次就观察一下jgp

TOP

回复 6# 学习处理


把5楼第9行改成:
  1. echo ren "%%i" %name%!id!.jpg"
复制代码
然后自己亲自测试一下就知道了

TOP

回复 5# Python
呃,简单的测试我还是懂的。
但是经常有这样的写法,而且也没出过什么错,就以上面例子来说吧,测试也是通过的,很正常。
总不会和系统有关吧,win7
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 8# xxpinqz


    能否详细说说你的测试过程和测试结果?

TOP

回复 10# 学习处理
  1. @echo off
  2. ren bathome.txt 批处理之家.txt
复制代码

TOP

返回列表