我正在尝试编写一个 .bat 文件,它将
这是我到目前为止所拥有的(回声和暂停用于测试):
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。
/resize=(750,560)
行中的
"%ProgramFiles%\IrfanView\i_view64.exe"
需要是 /resize=(750,560^)
)
终止括号内的代码块,生成 /aspectratio was unexpected at this time.
错误消息。插入符号转义了 )
,告诉 cmd
)
只是一个字符,没有特殊含义。