Batch file 批处理文件-仅转换新文件

Batch file 批处理文件-仅转换新文件,batch-file,imagemagick,Batch File,Imagemagick,我有一个不断增长的PDF目录,我正在使用ImageMagick将其转换为JPGs。随着文件越来越大,每次重新转换所有文件是没有意义的 这是我的命令: FOR /R %%a IN (*.pdf) DO magick -density 120 "%%~a" -quality 90 "%%~dpna.jpg" 如何构造批处理文件或ImageMagick命令以仅处理尚未具有匹配JPG的pdf?如果要检查当前*.pdf文件是否存在*.JPG,一个简单的解决方案是使用该命令: for /R %%I in

我有一个不断增长的PDF目录,我正在使用ImageMagick将其转换为JPGs。随着文件越来越大,每次重新转换所有文件是没有意义的

这是我的命令:

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

如何构造批处理文件或ImageMagick命令以仅处理尚未具有匹配JPG的pdf?

如果要检查当前*.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"
)
使用此解决方案的主要优点是,PDF文件转换为JPEG文件后会被覆盖,而更新后的PDF文件会再次转换为JPEG

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

属性/? 目录/? 对于/? 如果/?
如果不存在怎么办%%~dpna.jpg magick…?从技术上讲,您应该检查PDF是否比jpg更新。这正是make命令所要做的,因为给定了将PDF转换为JPG的规则。@xenoid我不建议比较文件日期,因为这项任务至少有两个原因。一个原因是这相当困难,并且使用纯批处理命令进行错误修剪,请参阅。还有一个用例呢,PDF被复制到文件夹中,转换成JPEG文件,后来用户发现旧版本的PDF文件更好,因此用户复制旧版本而不是新版本的PDF文件?JPEG文件应该从较旧但更好的PDF文件重新创建。@xenoid应该处理文件较旧版本的用例,尽管输出文件比以前从较新版本的输入文件创建的文件要新是使用make时的一个普遍问题。我非常确信,在使用版本控制系统的团队中工作的每个C/C++/C程序员都会在这个用例中反复运行,并且必须开始一次完整的重建(可能需要几分钟才能完成),或者手动删除一个或多个目标文件,并构建项目以编译旧版本的源文件从版本控制系统获取/签出后。这是源代码控制系统的设计。如果文件在本地发生了更改,即使是因为拉取了旧版本,也必须重新编译,因此SCS会给它拉取时间。当我做C++时,一个完整的重新编译可能需要几个小时…您只需更新此…@xenoid Yes的一个战略头文件,在大多数版本控制系统中,可以配置文件在get/checkout/pull之后应具有的最后修改日期,或者VCS中从版本系统获取文件并将其存储在本地的操作的术语:在下一次构建时获取文件编译的当前日期或存储在中的文件的实际最后修改日期风投。我们在团队中决定使用真实的上次修改日期,而不是当前日期,因为我们希望在文件日期上看到上次修改内容的时间,而不是上次从版本控制系统下载文件的时间。