gpt4 book ai didi

用于减小 PDF 文件大小的 Windows 批处理文件

转载 作者:可可西里 更新时间:2023-11-01 11:26:51 27 4
gpt4 key购买 nike

我一直在研究这个 Windows 批处理文件,以减少一个目录(“C:\BigPDFs”)中所有 PDF 文件的大小,并将它们移动到不同的目录(“C:\SmallPDFs”),使用鬼脚本。 Ghostscript 工作得很好,但我遇到的问题是在 Windows 批处理文件脚本中:

for /R "%1" %%f in (*.pdf) do (
SET outfile=%2\%%~nf%%~xf
gswin32c.exe -sDEVICE=pdfwrite -dMaxSubsetPct=100 -dPDFSETTINGS=/ebook -sOutputFile=%outfile% -dNOPAUSE -dBATCH "%%f"
)

“C:\BigPDFs”目录中有四个文件:

  • TEST1.pdf(5 页)
  • TEST2.pdf(9 页)
  • TEST3.pdf(9 页)
  • TEST4.pdf(4 页)

我希望它将相同的四个压缩文件写入“C:\SmallPDFs”目录,但唯一写入的是“TEST4.pdf”。看起来 %outfile% 变量总是解析为“C:\BigPDFs”目录(“TEST4.pdf”)中的最后一个文件名,即使它正在按顺序处理所有四个文件。我知道它正在处理所有四个文件的原因是因为 Ghostscript 输出显示“正在处理第 1 到 5 页”,然后是“正在处理第 1 到 9 页”、“正在处理第 1 到 9 页”,最后是“正在处理第 1 到 4 页” ".

为什么变量总是解析到最后一个文件(“TEST4.pdf”)?有没有办法捕获它正在处理的“当前”文件名并将其存储在变量中,以便它在运行 Ghostscript 时保留“当前”文件名?

最佳答案

你需要使用延迟扩展。

@echo off
setlocal enabledelayedexpansion
for /R "%1" %%f in (*.pdf) do (
SET outfile=%2\%%~nf%%~xf
gswin32c.exe -sDEVICE=pdfwrite -dMaxSubsetPct=100 -dPDFSETTINGS=/ebook -sOutputFile=!outfile! -dNOPAUSE -dBATCH "%%f"
)

但我想你也可以这样做。

for /R "%1" %%f in (*.pdf) do (  
gswin32c.exe -sDEVICE=pdfwrite -dMaxSubsetPct=100 -dPDFSETTINGS=/ebook -sOutputFile="%~2\%%~nxf" -dNOPAUSE -dBATCH "%%f"
)

关于用于减小 PDF 文件大小的 Windows 批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33223029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com