Powershell 脚本中的参数

问题描述 投票:0回答:1

我尝试用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”。现在有错误消息,命令正在将文件(不调整大小)写入输出文件夹。所以我想,我的选择有问题,但我找不到。我已经投入了几个小时,也尝试过使用@-符号作为参数,但没有成功。

powershell imagemagick imagemagick-convert
1个回答
0
投票

你必须 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 变量。

© www.soinside.com 2019 - 2024. All rights reserved.