PowerShell执行do循环报MissingLoopStatement错误的原因
报错原因
- 你执行的
for file in images/*; do cwebp -q 50 "$file" -o "${file%.*}.webp"; done是Bash、Zsh等类Unix Shell的专用循环语法,PowerShell不兼容该语法规则。PowerShell会把命令里的do识别为自身原生do-while/do-until循环的关键字,却找不到对应的合法循环主体,因此抛出MissingLoopStatement解析错误。 - 命令首尾额外添加的反引号(`)是PowerShell的转义符,并非代码包裹标记,会进一步破坏命令结构,加剧解析异常。
PowerShell环境下可直接运行的批量转换命令
如果你的cwebp.exe存放在C:\_o\webp\bin路径下,直接在PowerShell执行以下命令即可完成批量转换:
Get-ChildItem .\images\* -Include *.png,*.jpg,*.jpeg | ForEach-Object { C:\_o\webp\bin\cwebp.exe -q 50 $_.FullName -o "$($_.DirectoryName)\$($_.BaseName).webp" }
- 如果你已经把cwebp.exe所在路径加入系统环境变量PATH,可以把命令里的全路径
C:\_o\webp\bin\cwebp.exe简化为cwebp,同时路径参数也可以根据实际存放位置调整。 -Include参数后面可以按需增减需要转换的图片格式后缀。
内容的提问来源于stack exchange,提问作者Daryl Malibiran
相关产品推荐
相关产品推荐

