Windows 7 Windows 7批处理脚本';对于';命令错误/错误
Windows 7批处理文件“for”命令似乎存在错误。此命令可以遍历源目录并一次返回一个文件名。但是我发现如果我的命令修改了源目录中的文件,例如Windows 7 Windows 7批处理脚本';对于';命令错误/错误,windows-7,batch-file,bug-tracking,Windows 7,Batch File,Bug Tracking,Windows 7批处理文件“for”命令似乎存在错误。此命令可以遍历源目录并一次返回一个文件名。但是我发现如果我的命令修改了源目录中的文件,例如 for /R %1 %%s in (*.*) do call :do1file %%s @goto :EOF :do1file @echo es > tmp_x2932.tmp move /y tmp_x2932.tmp %1 @goto :EOF “for”命令可以使用相同的文件名多次调用do命令。(请注意,为了说明该问题,“echo
for /R %1 %%s in (*.*) do call :do1file %%s
@goto :EOF
:do1file
@echo es > tmp_x2932.tmp
move /y tmp_x2932.tmp %1
@goto :EOF
“for”命令可以使用相同的文件名多次调用do命令。(请注意,为了说明该问题,“echo es>tmp_x2932.tmp”只是对编辑原始源文件的其他合法命令(如“sed”)的简单替换。)
例如,包含9个文件的目录
D:\build-release\dump>dir /on
Volume in drive D has no label.
Volume Serial Number is 1972-268D
Directory of D:\build-release\dump
12/03/2011 05:13 PM <DIR> .
12/03/2011 05:13 PM <DIR> ..
12/03/2011 05:40 PM 5 f1
12/03/2011 05:40 PM 5 f2
12/03/2011 05:40 PM 5 f3
12/03/2011 05:40 PM 5 f4
12/03/2011 05:40 PM 5 f5
12/03/2011 05:40 PM 5 f6
12/03/2011 05:40 PM 5 f7
12/03/2011 05:40 PM 5 f8
12/03/2011 05:40 PM 5 f9
9 File(s) 45 bytes
2 Dir(s) 31,200,313,344 bytes free
文件D:\build release\dump\f4被错误调用了两次
在Windows XP中未观察到此行为。有没有办法在Windows7中修复它而不更改旧脚本?我知道我总是可以使用临时目录来存储所有中间文件,而不是就地修改它们,但我在Windows XP中的旧脚本就是这样做的。到目前为止,我只能建议将
FOR/R
循环替换为使用DIR/S
输出的FOR/F
:
FOR /F "delims=" %%s IN ('DIR %1 /S /B') DO CALL :do1file %%s
…
非常感谢。我也从这个链接中发现了这一点
FOR /F "delims=" %%s IN ('DIR %1 /S /B') DO CALL :do1file %%s
…