从 cmd 和 PowerShell 将分号作为参数传递给 .bat 文件

Passing a semicolon as a parameter to a .bat file from both cmd and PowerShell

这个问题看起来很简单,但是我在网上搜索了几个小时,还是没有找到答案...

我有一个批处理文件test.bat

set MY_VARIABLE=%~1
echo %MY_VARIABLE%

关键是我想用分号作为输入参数调用这个程序,即, .\test.bat ";", 来自 cmd 和 Windows PowerShell。虽然这在 cmd 中运行良好,但 PowerShell 似乎没有获得任何输入。有什么办法可以让两者同时工作吗?

这是因为command line syntax。分号是多个定界符之一,它将命令行分成单词:a;b 将被解释为两个单独的参数 a (%1) 和 b (%2).

因此,需要引号。由于 Powershell 对字符串文字使用引号(Powershell 在传递参数时会在幕后重新引用),因此您需要将它们包含在字符串中:

.\test.bat '";"'
# or
.\test.bat "`";`""

或者正如@mklement0 指出的那样,stop-parsing symbol --% 也是一个选项:

.\test.bat --% ";"

请注意,这是特定于 Powershell 语法的。

在CMD中,这就足够了:

test.bat ";"