Board logo

标题: [文件操作] 批量重命名的批处理为何实际效果不对? [打印本页]

作者: frankzjx0319    时间: 2013-6-7 12:12     标题: 批量重命名的批处理为何实际效果不对?

自己写了个批量重命名的批处理 代码如下
  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')就一切正常 请问这是为什么?
麻烦各位了
作者: Python    时间: 2013-6-7 12:17

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

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

非常感谢Python兄的解答~了解了~
作者: xxpinqz    时间: 2013-6-7 17:08

回复 2# Python
请教下:
           没什么计算机基础,所以,我是这么理解动态捕获的.
           假如第一次命名为abc2.jpg,n=3,然后abc3.jpg,n=4........,那应该是循环直至n溢出才对吧
作者: Python    时间: 2013-6-8 08:47

回复 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
作者: Python    时间: 2013-6-8 12:17

回复 6# 学习处理


把5楼第9行改成:
  1. echo ren "%%i" %name%!id!.jpg"
复制代码
然后自己亲自测试一下就知道了
作者: xxpinqz    时间: 2013-6-8 12:27

回复 5# Python
呃,简单的测试我还是懂的。
但是经常有这样的写法,而且也没出过什么错,就以上面例子来说吧,测试也是通过的,很正常。
总不会和系统有关吧,win7
作者: Python    时间: 2013-6-8 15:40

回复 8# xxpinqz


    能否详细说说你的测试过程和测试结果?
作者: Python    时间: 2013-6-8 16:35

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





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2