从批处理文件中的文本文件中读取行

时间:2010-07-06 06:55:20

标签: windows batch-file cmd

我知道这已被问过100次,但我尝试的每一段代码似乎都没有用。我正在尝试编译一个文件,然后检查错误文件并逐行读取并将其转储到命令行:

这是我到目前为止所做的:

Set var1= %1
Set var2= %var1:.mb=.ERR%

echo %var1%
echo %var2%

"C:\Program Files\MapInfo\MapBasic\mapbasic.exe" -D %var1%

FOR /f "delims=" %%a in (%var2%) do echo %%a

所以我把这个文件的路径作为命令行arg工作正常,然后关闭.mb并用.ERR替换它并运行程序来编译.mb文件,一切正常,直到我点击了for循环。

当使用echo on:

运行时,循环的结果如下所示
FOR /F "delims=" %a in ("C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR") do echo %a 

但是当它运行时它只是打印出来 "C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR"不是文件内容。

如果我给它一个硬名称并且没有空格的路径,例如'MapInfoInteropTemplate1.ERR',我可以让它工作但我希望它使用%var2%来读取文件名。

如果我在路径周围放置',它就会启动我的默认文本编辑器。

我最终跳过整个批处理文件生成的计算机编程,所以这对我来说真的很奇怪,对不起,如果这是一个基本问题。

1 个答案:

答案 0 :(得分:3)

使用usebackq选项for

FOR /F "usebackq delims=" %%a in ("C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR") do echo %%a  

否则,它会将您在双重序列之间放置的任何内容解释为要标记的字符串,而不是要读取的文件。这也在帮助中说明:

    or, if usebackq option present:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]