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

[文件操作] 循环批量给txt文件重命名的BAT代码错误弄不懂,大佬帮看看

[复制链接]
发表于 2022-4-18 12:15:46 | 显示全部楼层 |阅读模式
for %%i in (*.txt) do ren “%%i” 文档"%%i"这段代码是批量给txt文件重命名但是为什么第一个文件加了两个前缀
发表于 2022-4-18 12:21:49 | 显示全部楼层
  1. for /f "delims=" %%i in ('dir /b /a-d *.txt') do ren "%%i" 文档"%%i"
复制代码
发表于 2022-4-18 12:24:37 | 显示全部楼层
回复 1# fdxmzy
重命名文件时,最好不要直接使用for。可使用for+dir形式,就不会有问题。
 楼主| 发表于 2022-4-18 12:25:23 | 显示全部楼层
回复 2# qixiaobin0715
我知道这段代码才是正确的,我只是想弄懂为啥上面的代码重命名第一个文件被执行了两次,而如果只是显示文件名的话他就只执行一次,背后原理是什么呢,我没搞懂。谢谢大佬解惑一下
 楼主| 发表于 2022-4-18 12:30:02 | 显示全部楼层
回复 3# qixiaobin0715
D:\123>11.bat

D:\123>for %i in (*.txt) do echo %i

D:\123>echo 文档22.txt
文档22.txt

D:\123>echo 文档文档11.txt
文档文档11.txt

D:\123>
您看看嘛改成echo它就执行了一次就完了 怎么重命名就执行了2次呢?
发表于 2022-4-18 12:31:40 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2022-4-18 12:34 编辑

可能是批处理预处理机制的问题,总之这样处理有bug。
前者是边列举文件边进行处理,有可能改名后会再次读入;后者是将文件读入内存后一并处理,就不会有重复现象。
发表于 2022-4-18 12:38:31 | 显示全部楼层
回复 5# fdxmzy
没必要搞的那么深,知道如何正确使用即可。
 楼主| 发表于 2022-4-18 12:43:13 | 显示全部楼层
回复 6# qixiaobin0715


    谢谢应该是这样,这段代码是我在网上抄来重命名的百度排名前面的都是这段代码,代码很老了应该在win8之前可以运行,反正我的win11上就会重复命名两次。
发表于 2022-4-18 12:55:19 | 显示全部楼层
你可以找个win xp系统的电脑试试,应当也不行。
发表于 2022-4-18 21:47:58 | 显示全部楼层
回复 4# fdxmzy


参考for命令教程第8页:
http://bbs.bathome.net/thread-31727-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 04:34 , Processed in 0.018135 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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