爲什麼不使用for /F
循環逐行讀取文件server.txt
並在該循環內執行復制操作?我認爲這完全可以爲你工作。看看下面的例子:
@echo off
rem This iterates through all lines of `server.txt`:
for /F "usebackq delims=" %%S in ("server.txt") do (
rem Call copying sub-routine for each item:
call :SUB_COPY %%S
)
exit /B
:SUB_COPY
rem (do your copying stuff here, using `%1`)
exit /B
複印的東西也可以放在for /F
環路直接(使用%%S
代替%1
)內。
如果複製的東西可能會失敗,你想server.txt
以包含其所有失敗的服務器名稱和serverdone.txt
包含那些爲它成功了,你可以這樣做:
@echo off
rem This iterates through all lines of `server.txt`;
rem `type` ensures the file to be read completely
rem before the any further activities are pursued;
rem `break` does nothing and is used to empty files:
for /F "delims=" %%S in ('
type "server.txt" ^&^
^> "server.txt" break^
^> "serverdone.txt" break
') do (
rem Call copying sub-routine for each item:
call :SUB_COPY %%S
if ErrorLevel 1 (
rem (`ErrorLevel` is `>=1`, so failure)
>> "server.txt" echo %%S
) else (
rem (`ErrorLevel` is `0`, so success)
>> "serverdone.txt" echo %%S
)
)
exit /B
:SUB_COPY
rem (do your copying stuff here, using `%1`;
rem in case of errors, set `ErrorLevel`)
exit /B 0 & rem (success: `ErrorLevel` is `0`)
exit /B 1 & rem (failure: `ErrorLevel` is `1`)
爲什麼不只需使用'for/F'循環遍歷'server.txt'文件併爲每一行執行復制部分? – aschipfl
@aschipfl你的意思是FOR/F %% G IN(server.txt)DO set/p servername =
Spypsyduck