4
Windows 7批處理文件'for'命令似乎存在一個錯誤。該命令可以遍歷源目錄並一次返回一個文件名。但是我發現如果我的命令修改那個源目錄中的文件,例如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命令超過1次。 (請注意,出於說明問題的目的,'echo es> tmp_x2932.tmp'僅僅是一些其他合法命令的簡單替換,例如編輯原始源文件的'sed'。)
For例如,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
會產生這樣的結果(testdir.bat是使用批處理文件名)的目錄:
d:\test>testdir D:\build-release\dump
d:\test>for /R D:\build-release\dump %s in (*.*) do call :do1file %s
d:\test>call :do1file D:\build-release\dump\f4
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f4
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f5
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f5
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f6
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f6
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f7
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f7
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f8
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f8
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f9
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f9
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f1
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f1
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f2
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f2
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f3
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f3
1 file(s) moved.
d:\test>call :do1file D:\build-release\dump\f4
d:\test>move /y tmp_x2932.tmp D:\build-release\dump\f4
1 file(s) moved.
文件d:\建釋放\轉儲\ F4被稱爲兩次錯誤。
在Windows XP中未遵守此行爲。有沒有辦法在Windows 7中修復它而不更改舊腳本?我知道我總是可以使用一個臨時目錄來存儲所有的中間文件,而不是修改它們,但我在Windows XP中的舊腳本就是這樣做的。
謝謝。我剛剛從這個鏈接中找到了這個:http://blogs.msdn.com/b/oldnewthing/archive/2007/05/11/2532913.aspx – JavaMan