使用带有多个参数的调用 '&' 运算符

Using the call '&' operator with multiple parameters

            $sImageMagickHome = "C:\ImageMagick"
            $sImageMagickConv = "$sImageMagickHome\convert.exe"
            $sImageMagickArgs = @(  '--%', 
                            '-background transparent', 
                            '-fill hsb(0,0,0)', 
                            '-font Arial',
                            '-pointsize 18',
                            '-size 18x26',
                            '-gravity center')


            for ( $i = 0x01; $i -le 0x05; $i++ )
            {
                $y = [char]$i
                & $sImageMagickConv $sImageMagickArgs label:$y $sCharsDir$y.png
                #Write-Host $sImageMagickConv $sImageMagickArgs label:$y $sCharsDir$y.png
            }

使用 Write-Host 我可以获得一个将粘贴复制到命令行的示例,如果我 运行 PowerShell 提示符中的这一行,我发现它 运行 正确:

C:\ImageMagick\convert.exe --% -background transparent -fill hsb(0,0,0) -font Arial -pointsize 18 -size 18x26 -gravity center label:☺ C:\Users\erics_000\Desktop\Output\Chars\☺.png

然而,从脚本内部使用调用运算符“&”根本不起作用,并且会导致出现一些错误消息:

convert.exe: UnableToOpenBlob `--%': No such file or directory @ error/blob.c/OpenBlob/2697.
convert.exe: NoDecodeDelegateForThisImageFormat `' @ error/constitute.c/ReadImage/501.
convert.exe: UnrecognizedOption `-background transparent' @ error/convert.c/ConvertImageCommand/858.

我一直在看的文章是: http://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx

谢谢...

以下脚本适合我:

$sImageMagickHome = "C:\dev\im"
$sImageMagickConv = "$sImageMagickHome\convert.exe"
$sImageMagickArgs = @('-background', 'transparent', 
                '-fill', 'hsb(0,0,0)', 
                '-font', 'Arial',
                '-pointsize', '18',
                '-size', '18x26',
                '-gravity', 'center')


for ( $i = 65; $i -le 67; $i++ )
{
    $y = [char]$i
    & $sImageMagickConv $sImageMagickArgs label:$y c:\dev$y.bmp
}

请注意,您不能只 Write-Host 参数并从命令行尝试 运行 它,Powershell 会对 & 运算符进行特殊处理(在需要的地方添加引号),它会这样做不是当你将相同的参数传递给 Write-Host.

您可能想要安装 PSCX 并试用与其捆绑的 echoargs 实用程序,以便更好地理解参数的传递方式。