2015-12-05 33 views
0

考虑下面的代码片段:如果脚本是从路径称为无空格Windows批处理:与内部的完全合格的路径包含空格调用一个exe运行

for /f "tokens=1,2 delims==" %%A in ('%~dp0otrtool\otrtool.exe "%~1" 2^>^&1') do echo %%A 

回声正常工作。为了使之成为工作的路径与空格我加各地的.exe报价:

for /f "tokens=1,2 delims==" %%A in ('"%~dp0otrtool\otrtool.exe" "%~1" 2^>^&1') do echo %%A 

现在我的回声输出错误信息Der Befehl "d:\Scripts\OTRTools\otrtool\otrtool.exe" "test" ist entweder falsch geschrieben oder konnte nicht gefunden werden.,意思是“错误的命令或文件名”。如果我没有使用for

"%~dp0otrtool\otrtool.exe" "%~1" 2^>^&1 

它工作正常。任何想法如何解决线?

+0

你有反斜杠吗? for/f“tokens = 1,2 delims ==”%% A in('\“%〜dp0otrtool \ otrtool.exe \”“%〜1”2 ^> ^&1')do echo %% A – Aurelien

+0

@Aurelien nope,反斜杠没有帮助 –

+0

你用usebackq选项尝试吗? for/f“usebackq tokens = 1,2 delims ==”%% A in('“%〜dp0otrtool \ otrtool.exe”“%〜1”2 ^> ^&1')do echo %% A – Aurelien

回答

0
for /f "tokens=1,2 delims==" %%A in ('CALL "%~dp0otrtool\otrtool.exe" "%~1" 2^>^&1') do echo %%A 

插入call似乎可以解决问题。

+0

批处理脚本就是这样一个疯狂的事情 - 你永远不知道它为什么会起作用,为什么不:)谢谢你的答案! –

0

我试图通过编写一个名为hello.bat内d批次重现您的问题:\ myfolder然后另一IND C:\ Program Files文件\文件夹:

for /f "tokens=1,2 delims==" %%A in ('"%~dp0notepad++.exe.lnk" %~1 2^>^&1') do echo %%A 

我在这两个目录推出hello.bat和我可以通过在“%〜1”周围放置“”来重现您的错误,但是一旦我将它们移除,它对我来说很有用。

+1

恐怕这样做没有解决问题,因为参数'%〜1'包含空格分隔,然后... – aschipfl

+0

没错,'%0'和'%1'可能包含空格,因此引用对于这两个参数都是必需的。 –

相关问题