我的公司有一个旧的批处理文件,其中包含以下行:
for /D %%i in (*) do call ..\ArchiveFeedFolder.bat %%i
Run Code Online (Sandbox Code Playgroud)
从我们的日志来看,Windows 默认情况下总是按字母顺序对目录进行排序。
例如,假设我的目录中有以下文件夹:
20150101
20150102
20150103
上面的批处理命令将始终处理 20150101,然后是 20150102,然后是 20150103。它保证以这种方式工作吗?我试图找到一些文档,但似乎没有文档提及排序顺序
for /D
Run Code Online (Sandbox Code Playgroud)
虽然,正如您所指出的,排序顺序for /d没有记录,并且正如 Mofi 在评论中指出的那样,并不总是按名称排序,但在 NTFS 文件系统(Windows 大多数情况下都是这样)中确实如此。但是,如果您想绝对确定它始终按名称排序,您应该能够使用它而不是旧版本:
for /f "tokens=*" %%i in ('dir /b /a:d /o:n "*"') do call ..\ArchiveFeedFolder.bat %%i
Run Code Online (Sandbox Code Playgroud)
强制/o:n按名称排序。有关这方面的更多信息,请参阅/d和dir
我还想指出,您使用不带引号的参数调用 ArchiveFeedFolder.bat,如果您的文件夹名称包含空格,这将导致它中断。我会do call ..\ArchiveFeedFolder.bat "%%i"在您的 ArchiveFeedFolder.bat 中使用 和%~1%而不是%1. 例如,当您复制文件夹时,请确保再次引用它,而copy "%~1" "someOtherFolder"不是copy %1 someOtherFolder