Windows 8 环境变量在run中工作,但在cmd中不工作

Windows 8 环境变量在run中工作,但在cmd中不工作,windows-8,environment-variables,Windows 8,Environment Variables,我正在尝试建立一个phonegap android应用程序(这是附带的,只是一些介绍),还有一个名为android.bat的批处理文件,我需要能够在全球范围内运行。如果我把“android”放在cmd中,它应该运行批处理文件。我在“path”环境变量中设置了它,重新启动了cmd并重新启动了计算机,但没有用-将“android”放在cmd中会导致“android不被识别为内部或外部命令”等 非常奇怪的是,在设置环境变量之前,从Run运行“android”不起作用,而现在它起作用了。因此,Windo

我正在尝试建立一个phonegap android应用程序(这是附带的,只是一些介绍),还有一个名为android.bat的批处理文件,我需要能够在全球范围内运行。如果我把“android”放在cmd中,它应该运行批处理文件。我在“path”环境变量中设置了它,重新启动了cmd并重新启动了计算机,但没有用-将“android”放在cmd中会导致“android不被识别为内部或外部命令”等

非常奇怪的是,在设置环境变量之前,从Run运行“android”不起作用,而现在它起作用了。因此,Windows显然将其识别为有效的全局变量。如果我将完整路径放入cmd,它就可以正常工作

另外,当我在不同的位置创建另一个批处理文件并尝试相同的操作时,会得到相同的结果

所以我被难住了。有什么想法吗?

你在cmd中“放置”android是什么意思?您设置了什么环境变量-设置为什么

要从提示符运行
android.bat
,您需要确保
android.bat
位于
路径中的一个目录中

要查看您的
路径
,只需在提示下输入
路径
。您将看到一个以分号分隔的目录列表。将
ANDOID.BAT
放入这些目录中的任何一个,或者添加一个新目录(c:\belfry很流行)并将其包含在路径中


话虽如此,被
CMD
检查的第一个目录是当前目录,因此如果
ANDROID.bat
在您的当前目录中,即使它不在
路径上的目录中,那么
ANDROID
将作为一个命令运行,这样我就明白了一切

1-有一个批处理文件(android.bat/cmd)

2-使用完整路径直接调用它,它运行时不会出现问题

3-从运行对话框调用它,它运行时没有问题(实际上,它的工作方式与第2点相同)

4-批处理文件所在的目录包含在路径中

5-从另一个目录调用它不起作用

6-其他批处理文件也会发生同样的情况

有两种可能性

Path变量包含无效或未正确引用/转义字符,系统在Path中查找程序时遇到问题

或.CMD或.BAT不包含在PATHEXT变量中。它列出了调用程序时在每个路径目录中检查的扩展名

在命令行中,键入
SET PATH
,检查这两个选项中的任何一个是否正确

编辑

这些选项似乎没有找到问题所在。让我们试试别的

在sdk中查找文件
sdk\tools\lib\Find_java.bat
。更换管路(大约为26和32)


然后再次尝试运行android.bat

很抱歉这么说,但是,需要放在path中的是android批处理文件所在的文件夹。这就是你所做的吗?是的。要详细说明,这是路径C:\Users\david_000\AndroidSDK\adt-bundle-windows-x86_64-20131030\sdk\tools中的确切文本。这就是批处理文件所在的位置。它位于路径中的一个目录中-我已将该目录添加到用户的路径中。更改
PATH
仅影响
CMD
的当前实例。在注册表中更改
路径
只会影响
CMD
的未来实例,而不会影响已经运行的实例。也许这可以解释你的观察结果。因此,当我改变变量时,我总是重新启动CMD,因为我在过去注意到了这一点。基本上是对的。对于3,当我从run dialog调用它时,我只是将“android”放在对话框中,这是有效的,因此它可以从路径中识别它。它在那里-。BAT是列表中的扩展之一。而且,我只是试了一下设定的路径,重复了一下,它就找到了。我不确定是否有一个批处理文件示例可以在System32中使用,以证明这是否是我做错的事情(可能是这样)。@user2564511,否,用于第3点。应用程序不需要位于路径中。我一直在想…它不一定要在路径上,但正如我所说的,直到我把它放在路径上,它才起作用。很明显,它认为路径是有效的。我认为您编辑的解决方案可能假设的版本与我得到的版本不同-我的默认版本如下:对于/f“delims=“%%a in”(“%$dps0\find_java.exe”-s”)do set java_exe=%%a;对于(“%$dps0\find_java.exe“-s-w”)中的/f“delims=“%%a”,请设置javaw_exe=%%a
for /f %%a in ('%~dps0\find_java.exe -s') do set java_exe=%%a
for /f %%a in ('%~dps0\find_java.exe -s -w') do set javaw_exe=%%a
for /f %%a in ('"%~dps0\find_java.exe" -s') do set java_exe=%%a
for /f %%a in ('"%~dps0\find_java.exe" -s -w') do set javaw_exe=%%a