2010-01-21 29 views

回答

11

你誤解的選項。

  • 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來獲取它們。

+0

「您誤解了選項」:這並不令我感到驚訝。我發現的文檔並不好。 – jcollum 2010-01-21 21:19:51

+0

但是,如果我告訴它,逗號是行結束,那麼我不只是想要每行上的第一個標記?我也嘗試使用delims選項,仍然沒有得到我想要的。好吧。 – jcollum 2010-01-21 21:23:20

+0

是的,它很糟糕。 FOR /?必須非常仔細地閱讀。這是另一個來源:http://technet.microsoft.com/en-us/library/bb490909.aspx – 2010-01-21 21:24:32

1

試試這個:

set test=1,2,3,4 
for /d %%f IN (%test%) do echo %%f 
+0

這確實工作。 – 2010-01-21 21:10:01

+0

謝謝,這也可以。 – jcollum 2010-01-21 21:19:20

0

@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 
+0

這兩個很好的選擇,但不幸的是,他們需要批准,我們在截止日期;一旦截止日期完成,我計劃在匆忙拋棄蝙蝠文件並前往南特進行此項任務。 – jcollum 2010-01-22 16:19:38