For loop Can';t在for循环in子句中执行exe

For loop Can';t在for循环in子句中执行exe,for-loop,batch-file,windows-7-x64,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 recogniz

我在一个名为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有关,原因我仍然不太明白。我的通信规范是

%SystemRoot%\system32\cmd.exe;
我去登记处换了衣服

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

然后注销并重新登录,它神奇地工作了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)

工作非常完美,所以我真的不明白,但我想可能比我理解的更清楚。

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

通常,通过将命令括在双引号中来解决这些问题

@echo off
for /f "delims=" %%a in ('"C:\Programming\Android\android-sdk\tools\lib\find_java.exe"') do (set java_exe=%%a)
但是我在你的命令中没有看到任何需要引用的内容

我不知道为什么它不工作,但是FOR/F语句正在尝试在新的cmdshell中执行该命令

尝试运行以下批处理,并查看它是否运行命令OK。这是FOR语句实际尝试运行的命令:

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

如果运行正常,那么我完全被难住了。如果失败,那么找出原因也有助于诊断FOR/F命令失败的原因。

猜测一下:可能是双斜杠C:\\Programming\\Android\\Android sdk\\tools\\lib\\find_java.exe’是的,我已经尝试在cmd.exe上使用“以管理员身份运行”,并且还尝试为每个人设置.bat文件上的所有权限……您可以尝试的另一件事是将目录“C:\Programming\Android\Android sdk\tools\lib\”添加到PATH环境变量中,然后更改调用,使其看起来像:“find_java.exe”,我很抱歉在将近一个月后再次访问此页面。你的邮件让我踏上了一段结束得很好的旅程。我尝试了你的命令,效果很好,所以我放弃了,但70次谷歌搜索后,在阅读另一个so问题()时,我发现他和我有同样的问题,只是我找不到任何秘密引用。由于不理解他的解决方案,我将注册表中的ComSpec更改为它已经显示的内容,然后注销并重新登录,不知何故,它成功了。
@echo off
for /f "delims=" %%a in ('"C:\Programming\Android\android-sdk\tools\lib\find_java.exe"') do (set java_exe=%%a)
@echo off
%comspec% /c C:\Programming\Android\android-sdk\tools\lib\find_java.exe