【问题标题】:Can't execute exe in for-loop in clause无法在 for-loop in 子句中执行 exe
【发布时间】:2012-06-21 21:30:20
【问题描述】:

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

【问题讨论】:

  • 只是一个猜测:也许是双斜线? 'C:\\Programming\\Android\\android-sdk\\tools\\lib\\find_java.exe'

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


【解决方案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 命令失败的原因。

【讨论】:

  • 很抱歉在将近一个月后重访此内容。你的帖子让我踏上了一段结束得很好的旅程。我尝试了你的命令,它运行良好,所以我放弃了,但是在阅读另一个 SO 问题 (stackoverflow.com/questions/9668011/command-line-for-f-fails) 后进行了 70 次谷歌搜索,我发现他和我有同样的问题,除了我找不到任何秘密引号。所以不理解他的解决方案,我将注册表中的 ComSpec 更改为它已经显示的内容,注销并重新登录,并且它以某种方式工作。
【解决方案2】:

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

【讨论】:

  • 是的,我试过在 cmd.exe 上使用“以管理员身份运行”,也试过为每个人设置 .bat 文件的所有权限...
  • 您可以尝试的另一件事是将目录“C:\Programming\Android\android-sdk\tools\lib\”添加到 PATH 环境变量,然后更改调用,使其看起来像:' find_java.exe'
猜你喜欢
  • 1970-01-01
  • 2013-09-02
  • 2023-03-18
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多