【问题标题】:Batch file - convert only new files批处理文件 - 仅转换新文件
【发布时间】:2018-07-27 16:57:47
【问题描述】:

我使用 ImageMagick 将其转换为 JPG 的 PDF 目录不断增长。随着它变大,每次都重新转换所有文件没有意义。

这是我的命令:

FOR /R %%a IN (*.pdf) DO magick -density 120 "%%~a" -quality 90 "%%~dpna.jpg"

如何构建批处理文件或 ImageMagick 命令以仅处理尚未匹配 JPG 的 PDF?

【问题讨论】:

  • Do If Not Exist "%%~dpna.jpg" magick… 呢?

标签: batch-file imagemagick


【解决方案1】:

一个简单的解决方案是使用命令 IF 检查当前 *.pdf 文件是否存在 *.jpg:

for /R %%I in (*.pdf) do if not exist "%%~dpnI.jpg" magick -density 120 "%%I" -quality 90 "%%~dpnI.jpg"

另一种可能性是使用文件的存档属性,如果在目录中创建或修改文件,则会自动设置该属性。

for /F "delims=" %%I in ('dir *.pdf /AA-D-H /B /S 2^>nul') do (
    %SystemRoot%\System32\attrib.exe -a "%%I"
    magick -density 120 "%%I" -quality 90 "%%~dpnI.jpg"
)

使用此解决方案的主要优点是一旦转换为 JPEG 文件的 PDF 文件将被覆盖,更新后的 PDF 文件将再次转换为 JPEG。

要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • attrib /?
  • dir /?
  • for /?
  • if /?

【讨论】:

  • 从技术上讲,您应该检查 PDF 是否比 JPG 更新。这正是 make 命令会做的事情,给定一个将 PDF 转换为 JPG 的规则。
  • @xenoid 我不建议比较文件日期,因为这个任务至少有两个原因。一个原因是使用纯批处理命令非常困难和错误修剪,请参阅Find out if file is older than 4 hours in Batch file。以及将 PDF 复制到文件夹中,转换为 JPEG 文件,后来用户发现旧版本的 PDF 文件更好,因此用户复制旧版本而不是新版本的 PDF 的用例呢?文件? JPEG 文件应从较旧但更好的 PDF 文件重新创建。
  • @xenoid 使用旧版本文件的用例应该被处理,尽管输出文件比以前从新版本的输入文件创建的更新是使用make 的一般问题。我很确定每个使用版本控制系统在团队中工作的 C/C++/C# 程序员都会不时地运行到这个用例中,并且必须开始一个完整的重建,可能需要几分钟才能完成,或者手动删除一个或多个目标文件并构建项目以在从版本控制系统获取/签出后编译旧版本的源文件。
  • 这是源代码控制系统的设计。如果文件在本地发生了变化,即使你拉了一个旧版本,你也必须重新编译它,所以 SCS 给了它拉的时间。当我在做 C++ 的时候,一个完整的重新编译可能需要几个小时......你只需要为此更新一个战略头文件......
  • @xenoid 是的,在大多数版本控制系统中,可以配置文件在 get/checkout/pull 之后的最后修改日期或 VCS 中获取文件的操作的任何术语从版本系统并将其存储在本地:在下一次构建时获取文件编译的当前日期或存储在 VCS 中的文件的实际最后修改日期。我们已决定在我们的团队中使用真实的最后修改日期,而不是当前日期,因为我们希望在文件最后修改内容的日期而不是文件最后一次从版本控制系统“下载”文件的日期上看到。
猜你喜欢
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2021-10-04
  • 2012-01-10
  • 2017-02-19
  • 1970-01-01
  • 2013-08-27
相关资源
最近更新 更多