2015-12-05 30 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'可能包含空格,因此引用對於這兩個參數都是必需的。 –

相關問題