3

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

4

2 回答 2

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 命令失败的原因。

于 2012-06-21T22:45:52.097 回答
0

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

于 2012-06-21T21:44:49.473 回答