2012-06-21 145 views
3

在for循環中執行EXE我有這個叫做find_java.bat一個批處理文件:不能條款

@echo off 
for /f "delims=" %%a in ('C:\Programming\Android\android-sdk\tools\lib\find_java.exe') do (set java_exe=%%a) 

的問題是,當我運行這個批處理文件,我得到:

'C:\Programming\Android\android-sdk\tools\lib\find_java.exe' is not recognized as an internal or external command, operable program or batch file. 

然而,當該批處理文件只包含:

@echo off 
C:\Programming\Android\android-sdk\tools\lib\find_java.exe 

它執行命令就好了。

我是新來編寫批處理文件,但看着網上的例子這應該工作...

編輯: 對不起,重溫這這麼晚。

我找到了解決方案。這與ComSpec有關,原因我仍然不太明白。我COMSPEC是

%SystemRoot%\system32\cmd.exe; 

我進入註冊表,改變

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\ComSpec 

%SystemRoot%\system32\cmd.exe; 

C:\Windows\system32\cmd.exe 

然後註銷並重新和神奇,它的工作。 %SYSTEMROOT%爲C:\ Windows中,其他所有的系統變量使用它,

@echo off 
for /f "delims=" %%a in ('"C:\Programming\Android\android-sdk\tools\lib\find_java.exe"') do (set java_exe=%%a) 

完美工作,所以我真的不理解,但看到Command Line FOR /F Fails到可能使更多的感覺比我做到了。

+0

只是一個猜測:也許雙斜槓? _'C:\\ Programming \\ Android \\ android-sdk \\ tools \\ lib \\ find_java.exe'_ – alfasin

回答

1

正常情況下,這些問題可以通過將命令用雙引號括起來解決。

@echo off 
for /f "delims=" %%a in ('"C:\Programming\Android\android-sdk\tools\lib\find_java.exe"') do (set java_exe=%%a) 

但是我沒有看到任何需要引號的命令。

我不知道爲什麼它不工作,但FOR/F語句試圖在新的CMD shell中執行該命令。

嘗試運行下列批處理,看它是否運行命令OK。這是FOR語句實際上試圖運行的命令:

@echo off 
%comspec% /c C:\Programming\Android\android-sdk\tools\lib\find_java.exe 

如果運行正常,那麼我完全難住了。如果失敗,那麼找出爲什麼還應該幫助診斷FOR/F命令失敗的原因。

+0

我很抱歉在接近一個月後重新訪問此內容。儘管如此,你的帖子給我的旅程結束了。 我試過你的命令,它工作正常,所以我放棄了,但後來閱讀另一個SO問題70谷歌搜索(http://stackoverflow.com/questions/9668011/command-line-for-f-fails),我發現他和我有同樣的問題,除了我找不到任何祕密報價。所以不理解他的解決方案,我改變了註冊表中的ComSpec到它已經顯示的內容,註銷並返回,並以某種方式工作。 – eddiemundorapundo

0

我不知道這是否有幫助,但我只是試過你的示例代碼。它可以在WinXP SP3機器上完美運行。你有沒有試過用管理員權限運行批處理文件?

+0

是的,我試過在cmd上使用「以管理員身份運行」。exe文件,我也嘗試設置所有人的.bat文件的所有權限... – eddiemundorapundo

+0

你可以嘗試的另一件事是將目錄「C:\ Programming \ Android \ android-sdk \ tools \ lib \」添加到PATH環境變量,然後更改調用,使其看起來像:'find_java.exe' –