這是到目前爲止我的代碼:如何獲得for循環以逗號分隔的字符串工作?
for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do (
echo .
echo %%f
)
我期待,爲了製作:
.
1
.
2
.
等等
而是我得到:
.
1
就是這樣。我錯過了什麼?
這是到目前爲止我的代碼:如何獲得for循環以逗號分隔的字符串工作?
for /f "tokens=1 eol=," %%f IN ("1,2,3,4") do (
echo .
echo %%f
)
我期待,爲了製作:
.
1
.
2
.
等等
而是我得到:
.
1
就是這樣。我錯過了什麼?
你誤解的選項。
tokens=1
表示您只需要每行上的第一個標記。你想要所有的標記就行了。eol=,
表示您想要將逗號解釋爲行尾註釋的開頭。您希望使用delims=,
來代替逗號是分隔符(而不是空白的默認值)。FOR/F主要用於對文件中的行進行操作。你沒有那樣做。你工作在一個單一字符串,所以魯本斯的答案是接近你想要什麼:
@ECHO OFF
SET test=1,2,3,4
FOR /D %%F IN (%test%) DO (
ECHO .
ECHO %%F
)
但是從理論上講,你應該可以這樣說:
FOR /F "usebackq delims=, tokens=1-4" %%f IN ('1^,2^,3^,4') DO (
ECHO .
ECHO %%f
ECHO .
ECHO %%g
ECHO .
ECHO %%h
ECHO .
ECHO %%i
)
該作品同樣,但可能不會按照您想要的方式進行縮放。請注意,您必須使用^字符轉義字符串中的逗號,並且必須指定所需的標記,然後使用後續變量%g,%h和%i來獲取它們。
試試這個:
set test=1,2,3,4
for /d %%f IN (%test%) do echo %%f
這確實工作。 – 2010-01-21 21:10:01
謝謝,這也可以。 – jcollum 2010-01-21 21:19:20
@OP,並且當您正在學習如何使用DOS批處理腳本時,您可能還想學習vbscript(或powershell)。這些是替代方案,它們使批處理腳本更容易,尤其是涉及更復雜的任務時。
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strInput = objArgs(0)
s = Split(strInput,",")
For Each i In s
WScript.Echo i
Next
保存如上mysplit.vbs和命令行
C:\test>cscript //nologo mysplit.vbs 1,2,3,4
1
2
3
4
這兩個很好的選擇,但不幸的是,他們需要批准,我們在截止日期;一旦截止日期完成,我計劃在匆忙拋棄蝙蝠文件並前往南特進行此項任務。 – jcollum 2010-01-22 16:19:38
「您誤解了選項」:這並不令我感到驚訝。我發現的文檔並不好。 – jcollum 2010-01-21 21:19:51
但是,如果我告訴它,逗號是行結束,那麼我不只是想要每行上的第一個標記?我也嘗試使用delims選項,仍然沒有得到我想要的。好吧。 – jcollum 2010-01-21 21:23:20
是的,它很糟糕。 FOR /?必須非常仔細地閱讀。這是另一個來源:http://technet.microsoft.com/en-us/library/bb490909.aspx – 2010-01-21 21:24:32