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

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

[复制链接]
发表于 2013-6-7 12:12:54 | 显示全部楼层 |阅读模式
自己写了个批量重命名的批处理 代码如下
  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')就一切正常 请问这是为什么?
麻烦各位了
发表于 2013-6-7 12:17:55 | 显示全部楼层
(*.jpg)是动态获取文件交给for命令逐个处理
('dir /b *.jpg')是一次性获取文件交给for命令逐个处理
前者实际上也从abc2.jpg开始的,只不过后来又被重复处理了。
 楼主| 发表于 2013-6-7 12:24:03 | 显示全部楼层
本帖最后由 frankzjx0319 于 2013-6-7 12:39 编辑

非常感谢Python兄的解答~了解了~
发表于 2013-6-7 17:08:04 | 显示全部楼层
回复 2# Python
请教下:
           没什么计算机基础,所以,我是这么理解动态捕获的.
           假如第一次命名为abc2.jpg,n=3,然后abc3.jpg,n=4........,那应该是循环直至n溢出才对吧
发表于 2013-6-8 08:47:29 | 显示全部楼层
回复 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
发表于 2013-6-8 12:17:05 | 显示全部楼层
回复 6# 学习处理


把5楼第9行改成:
  1. echo ren "%%i" %name%!id!.jpg"
复制代码
然后自己亲自测试一下就知道了
发表于 2013-6-8 12:27:40 | 显示全部楼层
回复 5# Python
呃,简单的测试我还是懂的。
但是经常有这样的写法,而且也没出过什么错,就以上面例子来说吧,测试也是通过的,很正常。
总不会和系统有关吧,win7
发表于 2013-6-8 15:40:56 | 显示全部楼层
回复 8# xxpinqz


    能否详细说说你的测试过程和测试结果?
发表于 2013-6-8 16:35:39 | 显示全部楼层
回复 10# 学习处理
  1. @echo off
  2. ren bathome.txt 批处理之家.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 07:53 , Processed in 0.019696 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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