从 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 ";"
这个问题看起来很简单,但是我在网上搜索了几个小时,还是没有找到答案...
我有一个批处理文件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 ";"