如何在 .bat 文件内的 for 循环中运行 Irfanview 批处理脚本?

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

我正在尝试编写一个 .bat 文件,它将

  1. 提取当前目录中的所有.cbz存档文件
  2. 使用 Irfanview 批处理脚本将结果目录中的所有 jpg 转换为最大宽度/高度为 750/560 的 png
  3. 从目录中删除jpg(仅保留png)

这是我到目前为止所拥有的(回声和暂停用于测试):

setlocal enabledelayedexpansion

REM Step 1: Extract .cbz files into directories
for %%i in (*.cbz) do (
    tar -xf "%%i"
)

pause

REM Step 2: IrfanView
for /d %%d in (*) do (
    set "CurrentDir=%%~dpd%%d"
    echo ""%ProgramFiles%\IrfanView\i_view64.exe" "!CurrentDir!\*.jpg" /resize=(750,560) /aspectratio /resample /convert="!CurrentDir!\*.png"
    pause
    "%ProgramFiles%\IrfanView\i_view64.exe" "!CurrentDir!\*.jpg" /resize=(750,560) /aspectratio /resample /convert="!CurrentDir!\*.png"
    del "!CurrentDir!\*.jpg"
    pause
)
pause
endlocal

如果我删除调用 IrfanView 的行,则其余部分工作正常(.cbz 文件被提取到充满 jpg 的文件夹中,显示“echo”行,然后删除 jpg)。但如果该行在那里,它会导致整个“for”循环不起作用,甚至“echo”也不起作用。

我知道“CurrentDir”变量已正确分配,因为回显有效。以下是删除 IrfanView 行时的回显示例(使用

D:\testIrfanview
中的批处理脚本):
""C:\Program Files\IrfanView\i_view64.exe" "D:\testIrfanview\cbzFile\*.jpg" /resize=(750,560) /aspectratio /resample /convert="D:\testIrfanview\cbzFile\*.png"

IrfanView 语法似乎是正确的,因为我可以将以下 .bat 文件与 jpg 一起放入提取的目录之一,如果我运行它,jpg 就会按照预期转换为小 png:

set CurrentDir=%~dp0
    if not exist "%CurrentDir%png" mkdir "%CurrentDir%png"
    "%ProgramFiles%\IrfanView\i_view64.exe" "%CurrentDir%*.jpg" /resize=(750,560) /aspectratio /resample /convert="%CurrentDir%png\*.png"

但是为什么它在 for 循环中不起作用?

如果有人想知道这是做什么的,这是为了使幻灯片 (DiaFilm) .cbz 文件可以在 Miyoo Mini V4 的 OnionOS 上查看,因为文件阅读器只能查看 png。

batch-file cmd png archive irfanview
1个回答
0
投票
您的

/resize=(750,560)

 行中的 
"%ProgramFiles%\IrfanView\i_view64.exe"
需要是
/resize=(750,560^)

)
终止括号内的代码块,生成
/aspectratio was unexpected at this time.
错误消息。插入符号转义了
)
,告诉
cmd
)
只是一个字符,没有特殊含义。

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