【问题标题】:Environment variable working in run but not cmd环境变量在运行但不是 cmd
【发布时间】:2013-11-14 13:22:16
【问题描述】:

我正在尝试设置一个 phonegap android 应用程序(这是偶然的,只是一些介绍),并且有一个名为 android.bat 的批处理文件,我需要能够在全球范围内运行。如果我将“android”放在 cmd 中,它应该运行批处理文件。我已将其设置在“路径”环境变量中,重新启动 cmd 并重新启动计算机无济于事 - 在 cmd 中输入“android”会导致“android 未被识别为内部或外部命令”等。

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

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

所以我很难过。有什么想法吗?

【问题讨论】:

  • 很抱歉,但是,需要放在路径中的是android批处理文件所在的文件夹。这是你做的吗?
  • 是的。详细地说,这是 PATH 中的确切文本:C:\Users\david_000\AndroidSDK\adt-bundle-windows-x86_64-20131030\sdk\tools。这就是批处理文件所在的位置。

标签: windows-8 environment-variables


【解决方案1】:

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

要从提示符运行android.bat,您需要确保android.bat 位于您的PATH 中的目录之一中。

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

话虽如此,CMD 检查的第一个目录是 CURRENT 目录,所以如果android.bat 在您的当前目录中,ANDROID 将作为命令运行,即使它不在PATH

【讨论】:

  • 它在 PATH 中的一个目录中——我将该目录添加到我的用户的 PATH 中。
  • 更改PATH 只会影响CMD 的当前实例。在注册表中更改path 只会影响CMD 的未来实例 - 而不是那些已经运行的实例。也许这可以解释你的观察。
  • 因此,为什么我在更改变量时总是重新启动 CMD,过去曾注意到这一点。
【解决方案2】:

只是为了恢复我已经了解一切

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

2 - 直接用全路径调用,运行没有问题

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

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

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

6 - 其他批处理文件也是如此

两种可能性。

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

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

从命令行输入SET PATH 并检查这两个选项是否正确。

编辑

似乎这些选项无法找到问题所在。让我们尝试一些不同的东西

在您的 sdk 中找到文件 sdk\tools\lib\find_java.bat。换行(应该是 26 和 32 左右)

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

然后再次尝试运行android.bat

【讨论】:

  • 基本正确。对于 3,当我从运行对话框中调用它时,我只是将“android”放在对话框中,这很有效,很明显它是从 PATH 中识别出来的。它在那里 - .BAT 是列表中的扩展名之一。另外,我刚刚尝试了 SET PATH,回显它并找到了它。我不确定是否可以在 System32 中使用批处理文件示例来证明这是否是我做错的事情(可能是)。
  • @user2564511,不,对于第 3 点,使用 this。应用程序无需在路径中。我一直在想……
  • 它不一定要在 PATH 中,但正如我所说,直到我将它放入 PATH 才起作用。很明显,它承认 PATH 是有效的。
  • 我认为您编辑的解决方案可能会假设与我得到的版本不同的版本 - 默认情况下具有以下内容:for /f "delims=" %%a in ('"%~ dps0\find_java.exe" -s') 设置 java_exe=%%a; for /f "delims=" %%a in ('"%~dps0\find_java.exe" -s -w') 设置 javaw_exe=%%a
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2021-04-26
  • 1970-01-01
  • 2020-07-04
  • 2021-04-30
相关资源
最近更新 更多