无法在for-loop in子句中执行exe

时间:2012-06-21 21:30:20

标签: for-loop batch-file windows-7-x64

我在名为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可能比我更了解它。

2 个答案:

答案 0 :(得分: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命令失败的原因。

答案 1 :(得分:0)

我不知道这是否有帮助,但我只是尝试了您的示例代码。它在WinXP SP3机器上运行完美。您是否尝试使用管理员权限运行批处理文件?