我已经看过了 PowerShell 中快速简单的二进制文件连接
我不感兴趣上面的答案,我想知道以下语法的问题所在:
当我调用像 copy /b
这样的 cmd.exe
命令时:
function join-file {
copy /b $($args[0])+$($args[1]) $($args[2])
}
我遇到了一个错误:Copy-Item : 找不到位置参数
我已经看过了 PowerShell 中快速简单的二进制文件连接
我不感兴趣上面的答案,我想知道以下语法的问题所在:
当我调用像 copy /b
这样的 cmd.exe
命令时:
function join-file {
copy /b $($args[0])+$($args[1]) $($args[2])
}
我遇到了一个错误:Copy-Item : 找不到位置参数
copy
实际上只是 Copy-Item
的别名,并且它没有一个 /b
参数。您可以调用 cmd 来使用其复制命令。function join-file {
cmd /c copy /b $($args[0])+$($args[1]) $($args[2])
}
"..."
括起来,以可预测地将其视为可展开字符串。
为了安全起见,明确使用双引号(“…”)来括住涉及变量引用或子表达式的复合标记。
相比之下,在孤立地引用变量甚至方法调用时,不需要引号或包含在$(...)
中,子表达式运算符也不需要。
应用于您的命令(请参见下面更好的解决方案):
# Note: See better solution below.
function join-file {
# Note the "..." around the first argument, and the absence of quoting
# and $(...) around the second.
cmd /c copy /b "$($args[0])+$($args[1])" $args[2]
}
function join-file {
# Pass the arguments individually, which obviates the need for quoting
# and $(...) altogether:
cmd /c copy /b $args[0] + $args[1] $args[2]
}
$arr='foo', 'bar'; cmd /c echo $($arr[0])+$($arr[1])
,输出结果为:foo +bar
(注意空格)。