所以,我已經得到了一個名爲prev_batch.cfg的基本文本文件,我想要一個批處理腳本來讀取。 prev_batch.cfg是單行文本,但令牌用逗號分隔。它看起來像這樣:循環的批處理文件無法從外部文件中分配值
apples,oranges,bananas,grapes,strawberries
我希望每個這些標記進入一個特定的變量,我已經在for循環中設置。問題只是在循環中設置的第一個變量。沒有其他的。我希望將所有變量設置爲在.cfg文件中的分隔列表中找到的標記。
這裏是我的批處理腳本樣子,直到結束FOR循環:
@ECHO ON
setlocal EnableDelayedExpansion
SET JOB=%1
SET USER=%2
SET ASSETROOT=%3
:: Read all the arguments for this batch script from external text file
FOR /F "delims=," %%a IN (%ASSETROOT%\users\%USER%\%JOB%\prev_batch.cfg) do (
SET JOB=%%a
SET USER=%%b
SET TEMPLATE=%%c
SET ASSETROOT=%%d
SET SHAREADDR=%%e
SET SHARENAME=%%f
SET SHAREDRIVE=%%g
SET SHAREUSER=%%h
SET SHAREPASS=%%i
)
我運行的批處理文件,並通過三個命令行參數進去。當它運行到日誌文件時,我正在輸出批處理的回顯。這是我所看到的:
C:\Windows\system32>setlocal EnableDelayedExpansion
C:\Windows\system32>SET JOB=99D0FAA9-22B8-4FE7-9321-21F5587E8177
C:\Windows\system32>SET USER=10
C:\Windows\system32>SET ASSETROOT=C:\app
C:\Windows\system32>FOR /F "delims=," %a IN (C:\app\users\10\99D0FAA9-22B8-4FE7-9321-21F5587E8177\prev_batch.cfg) do (
SET JOB=%a
SET USER=%b
SET TEMPLATE=%c
SET ASSETROOT=%d
SET SHAREADDR=%e
SET SHARENAME=%f
SET SHAREDRIVE=%g
SET SHAREUSER=%h
SET SHAREPASS=%i
)
C:\Windows\system32>(
SET JOB=99D0FAA9-22B8-4FE7-9321-21F5587E8177
SET USER=%b
SET TEMPLATE=%c
SET ASSETROOT=%d
SET SHAREADDR=%e
SET SHARENAME=%f
SET SHAREDRIVE=%g
SET SHAREUSER=%h
SET SHAREPASS=%i
)
這很好,謝謝。快速的問題:如果變量的值在.cfg文件的單獨行中,而不是用逗號分隔,for循環會是什麼樣子? – ariestav
如果變量位於不同的行上,則不需要「令牌」。在這種情況下,您可以連續讀取變量。 – Endoro
不是這樣!再想一想 - 如果項目分開,第一個將應用於%% a並且不會分配其他項目。然後將讀取文件,最後一行是應用於作業的元素。我已經編輯了Endoro的解決方案來回應這個補充問題... – Magoo