PATH 变量和引号(Windows)

PATH 变量和引号(Windows)

我在 Windows 下遇到了 PATH 变量的一个奇怪问题:

我的应用程序位于文件夹 c:\app\bin 中,而此应用程序的 DLL 位于 c:\app\runtime 文件夹中。要运行我的程序,我通常使用以下脚本使用 *.bat 文件修改 PATH 变量:

set PATH="c:\app\bin";"c:\app\runtime";%PATH%

这会将可执行文件和 DLL 带到路径上。但是,在我的 Windows Server 2008 R2 系统之一上,这不起作用。这意味着,如果我在命令窗口中执行上述命令,我可以从 c:\app\bin 启动 exe 文件,但应用程序会立即抱怨它找不到所需的某些 dll 文件(“程序无法启动,因为您的计算机缺少 ....dll...”)。这些 dll 文件应该位于 c:\app\runtime 中。

我进行了一些实验并指出有三种解决方法:

  1. 使用系统属性对话框永久修改 PATH 变量
  2. 省略上述命令中 DLL 文件路径的引号,例如设置PATH="c:\app\bin";c:\app\runtime;%PATH%
  3. 将 DLL 文件复制到 exe 所在的目录

解决方案 2 的奇怪之处在于,如果我在第一条路径中添加引号,或者更改路径的顺序,它都不会改变任何内容。

有人知道为什么我的原始脚本不起作用吗?我需要运行它,因为它是由程序自动创建的,我无法更改生成 bat 文件的应用程序。

答案1

PATH变量通常不包含引号;它使用分号作为分隔符。例如,这是我的系统的PATH定义,其中包括带空格的文件夹:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Windows Performance Toolkit\

看起来 Windows 可以执行带有“引用”路径的程序,但 DLL 搜索例程无法处理它们。

理想情况下你应该使用:

set PATH=c:\app\bin;c:\app\runtime;%PATH%

另一个解决方法可能是从 启动该程序c:\app\runtime,例如:

cd /d C:\app\runtime
..\bin\app.exe

这甚至可能不需要修改PATH变量。

答案2

当您粘贴包含两个或更多路径(以冒号分隔)的路径值,而不是一次将它们粘贴到对话框中时,就会发生这种情况。我遇到了同样的问题。

您的解决方案:

  1. 删除用冒号分隔的路径值并将其粘贴到文本编辑器中,然后分别粘贴每个路径值。或者
  2. 单击按钮编辑文本...并删除字符串外面的引号。然后环境变量对话框会将每个值移动到新行。

单击“确定”然后重新启动终端编辑器以加载新值。

希望有帮助!

相关内容