使用批处理从文件中读取带有空格的行

时间:2012-10-22 14:19:18

标签: windows batch-file cmd

我正在尝试使用批处理从文本文件中读取每一行。

文件中的行有一些空格,所以这是输入的一个例子:

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

我正在使用以下源代码

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

输出结果如下:

This
This
...

我已经在Stack Overflow中阅读了以下条目,但是没有解决我的问题。 Batch : read lines from a file having spaces in its path

3 个答案:

答案 0 :(得分:8)

试试这个。

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

答案 1 :(得分:4)

Bali C和Henry Gao围绕着这个问题。

您的代码正在终止第一个空格处的值,因为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命令的角落和缝隙的完整摘要。

答案 2 :(得分:2)

您需要为每行上的批次读取位置设置分隔符

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

该行末尾的默认分隔符是一个分号。或者,也可以使用您在文件中看不到的字符,例如~¬或其他内容。