如何使用 PowerShell 将 DOS 风格的命令行拆分为其参数

Phi*_*vis 2 windows powershell

我有一个 Powershell 脚本(作为其选项之一)从文件中读取用户定义的预执行命令并需要执行它。用户定义的预执行命令应该是普通的 DOS 风格的命令。我可以用空格分割命令,然后将其提供给 PowerShell“&”以执行它:

$preExecutionCommand = "dir D:\Test"
$preExecutionArgs = $preExecutionCommand -split '\s+'
$preExecutionCmd = $preExecutionArgs[0]
$preExecutionNumArgs = $preExecutionArgs.Length - 1
if ($preExecutionNumArgs -gt 0) {
  $preExecutionArgs = $preExecutionArgs[1..$preExecutionNumArgs]
  & $preExecutionCmd $preExecutionArgs
} else {
  & $preExecutionCmd
}
Run Code Online (Sandbox Code Playgroud)

但是,如果用户定义的命令字符串包含需要放入参数中的空格,或者命令的路径包含空格,那么我需要更智能地解析用户定义的字符串。

肉眼可见,下面的字符串前面有一个命令,后面跟着两个参数:

"C:\Program Files\Tool\program1" 25 "the quick brown fox"
Run Code Online (Sandbox Code Playgroud)

有没有人已经有了一个函数,可以解析这样的字符串并返回 DOS 风格命令和每个参数的数组或列表?

Meh*_*eza 5

有一个非常简单的解决方案。您可以滥用 Powershell 参数解析机制:

> $paramString = '1 blah "bluh" "ding dong" """foo"""'
> $paramArray = iex "echo $paramString"
> $paramArray 
1
blah
bluh
ding dong
"foo"
Run Code Online (Sandbox Code Playgroud)