我尝试用imageick处理图片。在 CLI 上,我使用这个工作正常的命令:
C:\ProgrammeNoSetup\ImageMagick-7.1.0-62-portable-Q16-HDRI-x64\magick.exe D:\orG\3.08_10-02_1.jpg -resize 1200x1200 D:\orG\output\3.08_10-02_1.jpg
但我尝试使用以下代码在 powershell 脚本 (test.ps1) 中做到这一点:
$CMD = 'C:\ProgrammeNoSetup\ImageMagick-7.1.0-62-portable-Q16-HDRI-x64\magick.exe'
$arg2 = 'D:\orG\3.08_10-02_1.jpg'
$arg3 = '-resize 1200x1200'
$arg4 = 'D:\orG\output\3.08_10-02_1.jpg'
& $CMD $arg2 $arg3 $arg4
我收到此错误:magick.exe:在 CLI arg 2 @ fatal/magick-cli.c/ProcessCommandOptions/659 无法识别选项“-resize 1200x1200”。
我也试过:
$CMD = 'C:\ProgrammeNoSetup\ImageMagick-7.1.0-62-portable-Q16-HDRI-x64\magick.exe'
$arg1 = 'convert'
$arg2 = 'D:\orG\3.08_10-02_1.jpg'
$arg3 = '-resize 1200x1200'
$arg4 = 'D:\orG\output\3.08_10-02_1.jpg'
& $CMD $arg1 $arg2 $arg3 $arg4
但是错误类似:convert: unrecognized option `-resize 1200x1200' @error/convert.c/ConvertImageCommand/2686.
如果我删除选项“-resize 1200x1200”。现在有错误消息,命令正在将文件(不调整大小)写入输出文件夹。所以我想,我的选择有问题,但我找不到。我已经投入了几个小时,也尝试过使用@-符号作为参数,但没有成功。
你必须 separate argument name and value,否则 -resize 1200x1200
将作为单个标记传递,但本机可执行文件通常期望参数名称和值是单独的标记(除非语法没有空格,例如 -name:value
)。
$CMD = 'C:\ProgrammeNoSetup\ImageMagick-7.1.0-62-portable-Q16-HDRI-x64\magick.exe'
$arg1 = 'convert'
$arg2 = 'D:\orG\3.08_10-02_1.jpg'
$arg3 = '-resize', '1200x1200'
# |<-- inserted comma here
$arg4 = 'D:\orG\output\3.08_10-02_1.jpg'
& $CMD $arg1 $arg2 $arg3 $arg4
这将 $arg3
变成一个包含两个字符串的数组,PowerShell 将其作为单独的参数标记传递。这也称为 splatting 并且仅在调用本机可执行文件时完成(对于 PowerShell 命令,您必须使用 @
splatting 运算符)。
另一种更简洁的方式:
$CMD = 'C:\ProgrammeNoSetup\ImageMagick-7.1.0-62-portable-Q16-HDRI-x64\magick.exe'
# Create an array of arguments
$imArgs = @(
'convert'
'D:\orG\3.08_10-02_1.jpg'
'-resize', '1200x1200'
'D:\orG\output\3.08_10-02_1.jpg'
)
# Call native command, which splats argument array.
& $CMD $imArgs
# Alternatively you can be explicit about splatting:
& $CMD @imArgs
确保你没有命名变量 $args
这是一个保留的 PowerShell 变量。