我試圖製作一個非常簡單的bat文件。批處理文件 - 等待循環中的文件
在for循環中,我調用另一個應用程序爲我創建一個文件。當生成該文件時,我想再次執行此操作,直到循環結束。在我再次運行循環之前,我需要等待文件的創建。
我需要使用START
和CALL
,因爲在文件創建後,我會殺死進程。它不包含在下面的代碼中,但它是必需的。
@echo off
for /L %%i in (1,1,5) do (
SET filename=fooFile_%%i.txt
START /B CMD /C CALL createFile.bat fooFile_%%i.txt
:waitfile
ECHO waitforfile: %filename%
TIMEOUT /T 10 >nul
IF EXIST %filename% GOTO FoundIt
goto waitfile
:FoundIt
ECHO Found file %filename%
)
ECHO All done!
而我的createFile.bat
。這實際上是另一種應用。但是,下面的代碼就足以嘲笑它:
@echo off
set arg1=%1
TIMEOUT /T 10 >nul
copy NUL %arg1%
ECHO Created file
電流輸出:
waitforfile:
waitforfile fooFile_1.txt
1 file(s) copied.
Created file
Found file fooFile_1.txt
All done!
正如你可以從輸出看到我不能循環使用我的GOTO的工作。我已經看到了這些問題:
Batch file goto not working in for loop
(Windows batch) Goto within if block behaves very strangely
看來,因爲它是一個壞主意,被goto的循環相結合。那麼我該如何解決我的問題?
有在你的代碼的兩個問題:1,你錯過了使用[延遲擴展(HTTP:// ss64。 com/nt/delayedexpansion.html),儘管在編寫*和*時需要這樣做,並在代碼塊中讀取相同的變量; 2.'goto:Label'不能在塊/循環中使用,因爲這會中斷塊/循環上下文; – aschipfl
@aschipfl - 謝謝。我是新來的蝙蝠文件。我會嘗試建議的解決方案。看起來他們都工作。在我接受它作爲答案之前,我只需要確定哪種解決方案最適合我的具體問題。 – smoksnes