在命令行工具调用 powershell 5.0 中包含字符串连接命令的结果
Including result of string joining command in command line tool call powershell 5.0
我想使用 pdftk
命令行工具将字符串连接命令的结果作为调用的一部分。这是我尝试过的:
$items_to_merge = '"' + $($(get-childitem *.pdf).name -join '" "') + '"'
echo $items_to_merge
pdftk $items_to_merge cat output test.pdf
各个 pdf 文件名本身包含空格,因此我用双引号将每个文件名括起来。
然而事实证明,当我 运行 这个命令时,我得到 pdftk
错误如下:
Error: Unable to find file
我有点惊讶,因为手动枚举文件并用双引号引起来一直有效。为什么我以编程方式执行时会失败?
遇到这种情况invoke-expression
是你的朋友:
$items_to_merge = '"' + $($(get-childitem *.pdf).name -join '" "') + '"'
echo $items_to_merge
invoke-expression "pdftk $items_to_merge cat output test.pdf"
让 PowerShell 对文件名进行引用。通过在变量名前使用 @
而不是 $
,PowerShell 将数组扩展为单独的参数(又名 array splatting),必要时将被引用。
$items_to_merge = (get-childitem *.pdf).name
pdftk @items_to_merge cat output test.pdf
正如评论者 js2010 所指出的,喷溅甚至没有必要。这也有效:
$items_to_merge = (get-childitem *.pdf).name
pdftk $items_to_merge cat output test.pdf
显然,PowerShell 在传递给 本机命令.
时隐式显示一个数组参数
就我个人而言,我仍然更喜欢显式展开,因为它始终适用于本机命令和 PowerShell 命令。
在 Windows 沙盒中,使用带有或不带有额外双引号的字符串数组,可以更简单地工作。我将一个网页打印成 pdf 来制作样本 pdf。
$items_to_merge = (get-childitem *.pdf).name
$items_to_merge
pdftk $items_to_merge cat output test.pdf
或使用通配符:
pdftk *.pdf cat output test.pdf
我想使用 pdftk
命令行工具将字符串连接命令的结果作为调用的一部分。这是我尝试过的:
$items_to_merge = '"' + $($(get-childitem *.pdf).name -join '" "') + '"'
echo $items_to_merge
pdftk $items_to_merge cat output test.pdf
各个 pdf 文件名本身包含空格,因此我用双引号将每个文件名括起来。
然而事实证明,当我 运行 这个命令时,我得到 pdftk
错误如下:
Error: Unable to find file
我有点惊讶,因为手动枚举文件并用双引号引起来一直有效。为什么我以编程方式执行时会失败?
遇到这种情况invoke-expression
是你的朋友:
$items_to_merge = '"' + $($(get-childitem *.pdf).name -join '" "') + '"'
echo $items_to_merge
invoke-expression "pdftk $items_to_merge cat output test.pdf"
让 PowerShell 对文件名进行引用。通过在变量名前使用 @
而不是 $
,PowerShell 将数组扩展为单独的参数(又名 array splatting),必要时将被引用。
$items_to_merge = (get-childitem *.pdf).name
pdftk @items_to_merge cat output test.pdf
正如评论者 js2010 所指出的,喷溅甚至没有必要。这也有效:
$items_to_merge = (get-childitem *.pdf).name
pdftk $items_to_merge cat output test.pdf
显然,PowerShell 在传递给 本机命令.
时隐式显示一个数组参数就我个人而言,我仍然更喜欢显式展开,因为它始终适用于本机命令和 PowerShell 命令。
在 Windows 沙盒中,使用带有或不带有额外双引号的字符串数组,可以更简单地工作。我将一个网页打印成 pdf 来制作样本 pdf。
$items_to_merge = (get-childitem *.pdf).name
$items_to_merge
pdftk $items_to_merge cat output test.pdf
或使用通配符:
pdftk *.pdf cat output test.pdf