批处理文件中无法运行PowerShell命令?

4
我是一名能翻译文本的助手。
我正在尝试创建一个简单的脚本,将我的gcc变量设置为.bat文件。
这个变量被设置成这样:
$env:Path += ";C:\Users\Brett\Compilers\MinGW\bin"

当我在PowerShell中键入/粘贴时,它可以正常运行。

但是,当我将其粘贴到脚本myscript.bat中,并通过PowerShell运行它时,我会收到以下错误:

C:\Users\Brett\Compilers>"$env:Path += ";C:\Users\Brett\Compilers\MinGW\bin""
The filename, directory name, or volume label syntax is incorrect.
PS C:\Users\Scruffy\Compilers>
3个回答

5

PowerShell是Windows命令行(cmd.exe)的一个独立执行环境。

如果您想从批处理文件中运行PowerShell命令,您需要保存PowerShell脚本(.ps1),并将其作为命令行参数传递给powershell.exe。

例如:

powershell.exe -noexit c:\scripts\test.ps1

点击此处可在微软TechNet上获取更多信息


好的,但错误并不特别涉及PowerShell。当我在cmd中运行脚本时,会出现相同的错误。此外,PowerShell似乎可以运行一些批处理文件,在我之前一直都是这样。我只是喜欢使用它,因为它更容易阅读。如果您想看到,请在.bat文件中添加相同的“echo hello”,然后通过PowerShell运行它。可以正常工作。基本上,我只需要在PowerShell脚本或批处理中添加一个路径变量条目。但是PowerShell更容易阅读。 - Snuff Movie
没事了,我通过在批处理文件中保存set PATH=%PATH%;"C:\Users\Brett\Compilers\MinGW\bin"并通过powershell运行它来使其工作。我猜这是语法错误。 - Snuff Movie
4
PowerShell无法理解.bat文件。在PowerShell内运行.bat文件时,它会启动CMD并让它来运行.bat文件。因此,您必须使用与常规命令提示符中相同的语法。如果您想将PowerShell语法保存到文件中并按需运行它,则需要将其保存为 .ps1文件。 - Daniel Richnak

1
一般来说,将批处理内容放在 .BAT 文件中,将 PowerShell 内容放在 .ps1 文件中。
我可以在这里复制您的结果 - 但这是可以预料的。Cmd.exe 看到一个字符串,然后是一个路径,然后就会变得非常困惑,因为语法不是命令提示符可以处理的语法。所以它会给出那个错误消息。
如果您想要将内容添加到路径中,为什么不将语句放在 .ps1 脚本文件中呢?

0

正如其他人所提到的,您需要将代码保存在 .ps1 文件中而不是 .bat 文件中。

这行代码(来自设置Windows PowerShell路径变量)可以解决问题:

$env:Path = $env:Path + ";C:\Users\Brett\Compilers\MinGW\bin"

甚至更短:

$env:Path += ";C:\Users\Brett\Compilers\MinGW\bin" 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接