【问题标题】:Nested loop with different Magick command in bat Windowsbat Windows 中具有不同 Magick 命令的嵌套循环
【发布时间】:2018-10-22 19:31:28
【问题描述】:

我正在尝试将许多 pdf 文件转换为 jpg,但前提是它只有 1 页。我宁愿使用多页 pdf 而不是图像。我尝试了不同的命令并让它们单独正常工作,identifyconvert。但是,我无法将它们组合起来在一个文件夹中工作。我还没有到条件操作的地步(如果少于 2 页,则转换它)。我正在使用此代码

pause
set path="C:\Program Files\ImageMagick-7.0.8-Q16\";%path%
FOR /r %%g in (*.pdf) DO (
    for /f %%i in ('identify -format %n %%g') do set pgs=%%i
    echo %pgs%
echo "%%g"
::convert %%~ng%%~xg %%~ng.jpg
::del %%~ng.pdf
)
pause

它说命令的语法不正确。注释掉的部分工作正常。我不太了解命令行,因此非常感谢任何帮助。

【问题讨论】:

  • 用 Powershell 代替怎么样?
  • 在设置时需要使用ss64.com/nt/delayedexpansion.html(code block)中的变量。
  • 您将FOR 变量视为文件都在当前工作目录中。 FOR 命令的/R 选项递归目录。这意味着您必须使用 %%g 作为您正在运行的命令的输入,因为它包含文件的完整路径。
  • @LotPings 我只是在顶部添加了SETLOCAL EnableDelayedExpansion,但它仍然说语法不正确。
  • 不要将页数设置为变量,而是使用IF 命令。 for /f %%i in ('identify -format %n %%g') do if %%i geq 2 convert "%%g" "%%~dpng.jpg"

标签: windows batch-file for-loop command-line imagemagick-convert


【解决方案1】:

这是最终有效的代码。它做了很多小事情

  • 遍历文件夹和子文件夹
  • 评估每个 pdf 文件
  • 如果 pdf 文件的名称中没有“c”并且有超过 1 页,则在扩展名之前的名称后重命名为“c”。 (这有助于避免处理已处理的文件)

SETLOCAL EnableDelayedExpansion

pause 
set path="C:\Program Files\ImageMagick-7.0.8-Q16\";%path%

FOR /d /R %%i in (*) DO ( 

    cd "%%i"
        FOR /r %%g in (*.pdf) DO (
        (Echo "%%g" | FIND /I "_c_" 1>NUL )||(
            for /f %%i in ('magick identify -format %%n "%%g"') do if %%i gtr 1 ren %%~ng%%~xg %%~ng_c_%%~xg
)
)
cd..
)
pause

【讨论】:

  • 哇,发布一个工作代码实际上是有缺点的。我知道这不是世界上最伟大的代码,解决了少数小问题,没有什么尖端的。只是尝试贡献,仍然想知道为什么我会得到缺点?有管理员回答吗?
猜你喜欢
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多