Windows 7 Windows 7批处理脚本';对于';命令错误/错误

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

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 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
…