2012-10-22 25 views
5

我正在嘗試使用批處理從文本文件讀取每行。使用批處理從文件中讀取包含空格的行

文件內的線具有一些空格,所以這是輸入的一個示例:

This is the first line 
This is the second line 
... 

我使用的下面的源代碼

FOR /f %%a in ("%1") do (
    @echo %%a 
) 
goto:eof 

的輸出是以下爲:

This 
This 
... 

我已閱讀過fo在堆棧溢出入口但沒有解決我的問題。 Batch : read lines from a file having spaces in its path

+0

假設'%1'是您的文件名,那麼您發佈的代碼不能像您描述的那樣工作。要麼你必須使用''usebackq'''選項,否則你的IN()子句不能被引用。 – dbenham

回答

6

試試這個。

FOR /f "tokens=* delims=," %%a in ('type "%1"') do (
    @echo %%a 
) 
+2

現在,代碼將在第一次出現'''時切斷每一行。 – dbenham

2

你需要設置你的分隔符,其中批量讀取高達每行

FOR /f "delims=;" %%a in ("%1") do (
    @echo %%a 
) 

爲行的末尾缺省的分隔符是一個分號。或者使用你不可能在文件中看到的字符,如~¬或其他。

+0

爲什麼將分隔符設置爲一個奇怪的值,爲什麼不簡單地設置它爲空? – jeb

+0

@jeb你如何將它設置爲無? '「delims =」'會將它設置爲空格,因爲默認不是嗎? –

+0

不,像dbenham顯示的那樣,''delims =''將其設置爲空,只有EOL不能設置爲空值,'「EOL =」'會將EOL設置爲引用。但EOL可以通過其他方式清空 – jeb

3

巴厘島C和亨利高裙圍繞這個問題。

您的代碼正在終止第一個空格處的值,因爲FOR/F旨在將字符串解析爲分隔的令牌。默認分隔符是空格和製表符。您可以通過將DELIMS設置爲無效來保留整條線路。

for /f "usebackq delims=" %%a in ("%~1") do echo %%a 

但仍存在潛在的問題:FOR/F循環跳過空行,並且還跳過與EOL字符(;默認情況下)開頭的行。

FOR命令(特別是FOR/F變體)是一個複雜的野獸。我建議您閱讀http://judago.webs.com/batchforloops.htm,以便對FOR命令的角落和縫隙進行很好的總結。

+0

悲傷。該鏈接不再有效。 –

相關問題