Windows批处理文件中/D的默认顺序

dax*_*axu 3 batch-file

我的公司有一个旧的批处理文件,其中包含以下行:

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)

Den*_*ils 5

虽然,正如您所指出的,排序顺序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按名称排序。有关这方面的更多信息,请参阅/ddir

我还想指出,您使用不带引号的参数调用 ArchiveFeedFolder.bat,如果您的文件夹名称包含空格,这将导致它中断。我会do call ..\ArchiveFeedFolder.bat "%%i"在您的 ArchiveFeedFolder.bat 中使用 和%~1%而不是%1. 例如,当您复制文件夹时,请确保再次引用它,而copy "%~1" "someOtherFolder"不是copy %1 someOtherFolder