我知道这已被问过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%
来读取文件名。
如果我在路径周围放置'
,它就会启动我的默认文本编辑器。
我最终跳过整个批处理文件生成的计算机编程,所以这对我来说真的很奇怪,对不起,如果这是一个基本问题。
答案 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]