【发布时间】:2017-12-01 23:47:04
【问题描述】:
如果我直接在命令提示符下运行以下行,我会看到预期的输出。
echo %PATH%
> C:\Program...
但是,如果我在.ps1 文件中的.cmd 文件中运行相同的命令,则PATH 为空。
# program.ps1
python --version
Write-Output $env:PATH
& .\command.cmd
# command.cmd
python --version
echo %PATH%
.\program.ps1
> Python 3.5.2
> C:\Program...
> 'python' is not recognized as an internal or external command
> ECHO is on.
为什么从 powershell 脚本运行命令会清除我的 PATH 变量?
编辑
上面的例子经过简化,试图找出问题的根源。问题是从批处理文件执行时找不到PATH 上的任何内容。因此,例如,我无法使用python。我更新了示例以更好地详细说明我所看到的内容。
【问题讨论】:
-
无法在 Windows 10 上使用 PowerShell 5.1 重现。回显整个路径。尝试
.ps1文件中的echo $env:PATH以查看那里的路径是否已经为空。 (另请注意,.cmd的输出应包含字符串echo- 如果%PATH%确实为空,则命令文件应生成ECHO is on.如果没有,则不会调用它。你确定你不需要.\command.cmd,指定文件路径?) -
您使用的是什么操作系统和 PowerShell 版本?在 W10 上使用 PS5.1 对我来说也可以正常工作。
-
第二个。我也无法重现它。我认为问题是 command.cmd 根本没有执行。
-
从 powershell 运行批处理文件似乎没有意义,它可以做一些 powershell 也很容易做的事情。也可以使用 Jeroen 示例的替代方法:
[Environment]::GetEnvironmentVariable("Path") -
尝试在
.ps1中故意将路径更改为简短的路径,看看是否是长度或转义字符的某种问题。 (我对此表示怀疑,但是嘿。)另外,尝试从 PoSH 显式调用cmd.exe /c来运行.cmd,而不是依赖任何隐含的机制。
标签: powershell batch-file cmd