[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
verybat 论坛 伤脑筋 出的系列教程之一:
第二节(for命令详解)
http://bbs.verybat.org/viewthread.php?tid=220

verybat 以前还是挺不错的,出过不少精华文章。鄙人也曾经在那里学习探讨过,也发表了一些粗浅的文章(本人并没有完全放弃verybat,一直期待管理员重新带领verybat走上正轨)。出于某些原因,那里的文章(本人原创或其他人的)我不想在此转载,给出链接足以。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

以前讨论过,
文件有变动时,最好不要用for /d、for /r,而改为用for /f 解析dir的输出。
因为前种方式有bug,而且难以追踪,有时出现有时不会出现,不同的电脑环境也有不同结果。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 1楼 的帖子

你所转的willsort的帖子内容其实并不是Bug,而是for的一种运行机制。
http://www.bathome.net/viewthrea ... amp;page=1#pid30833
2、for、for /r 其实并不枚举文件,它们的循环对象就是字符串,除了一个例外:循环集含有通配符*、?。
for %%a in (*) do echo %%a
这个时候你没办法将*、?当作普通字符,加^转义也不行。
for /r 的循环方式是对每个目录执行一次,在循环集里的字符串前面加上目录名(构成%%a)。
类似于for /l 的循环方式是对每个数执行一次。


8楼说的Bug是,如果循环过程中有文件名变动或新文件生成,有时会导致某些文件循环两次(暂未发现文件遍历不到的情况),也就是说循环过程被扰乱了。但这个bug只是偶尔出现甚至不会出现,难以追踪。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

linux中,命令中的普通通配符是由shell完成扩展的。
例如 ls *.txt
如果当前目录有1.txt 2.txt两个文件,则*.txt被shell自动扩展为实际文件名,因此ls实际执行的命令是
ls 1.txt 2.txt
类似地,echo *.txt 将显示1.txt 2.txt而不是字面上的*.txt
所以有时经常需要对通配符转义或用引号括起来防止shell的自动扩展。

cmd中for的运行机制与此类似(注意只是类似而不等同)。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表