使用内容重命名 PDF 文件的批处理脚本

Posted

技术标签:

【中文标题】使用内容重命名 PDF 文件的批处理脚本【英文标题】:Batch script to rename PDF files using the content 【发布时间】:2018-06-23 06:23:11 【问题描述】:

我有一个批处理脚本,用于提取 PDF 信息并重命名 PDF。

该脚本适用于 1 个 PDF 文件,但我需要在包含大量 PDF 文件的 文件夹 中直接使用它。

那该怎么做呢?

脚本需要为每个 PDF 文件一个接一个地运行,直到结束。 一旦 PDF 文件被重命名,文件将移动到另一个文件夹中,因此文件夹中剩余的 PDF 文件需要相同的东西。当文件夹为空时,脚本退出。

@echo off

setlocal enabledelayedexpansion

set PDF="Renommer_Manuellement.pdf"
set text="Renommer_Manuellement.txt"
set DSUBDIX=%USERPROFILE%\Google Drive\CLASSEURS

ren *.pdf %PDF%
pdftotext -raw %PDF%

for /f "delims=- tokens=2" %%a in ('find "Number=" %text%') do set numeroa=%%a

for /f "delims== tokens=2" %%a in ('find "NAME=" %text%') do set nature=%%a


ren "%PDF%" "OCC-%numeroa:~0,5%#!nature!.pdf"
move "%PDF%" "OCC-%numeroa:~0,5%#!nature!.pdf" "XYZ FOLDER"

exit

【问题讨论】:

这应该可以帮助你***.com/questions/39615/… 【参考方案1】:

也许这个注释的批处理文件代码适用于将当前目录中的所有 PDF 文件移动到子目录 XYZ FOLDER,新文件名由每个 PDF 文件的内容确定。

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Don't know what this environment variable is for. It is not used by this code.
set "DSUBDIX=%USERPROFILE%\Google Drive\CLASSEURS"

md "XYZ FOLDER" 2>nul

for /F "delims=" %%I in ('dir *.pdf /A-D /B 2^>nul') do call :RenamePDF "%%~fI"

rem Restore initial command environment and exit batch file processing.
endlocal
goto :EOF


:RenamePDF
set "FilePDF=%~1"
set "FileTXT=%~dpn1.txt"

pdftotext.exe -raw "%FilePDF%"

for /F "delims=- tokens=2" %%J in ('%SystemRoot%\System32\find.exe "Number=" "%FileTXT%"') do set "numeroa=%%J"
for /F "delims== tokens=2" %%J in ('%SystemRoot%\System32\find.exe "NAME=" "%FileTXT%"') do set "nature=%%J"

rem The text version of the PDF file is no longer needed.
del "%FileTXT%"

rem Move the PDF file to XYZ FOLDER and rename the file while moving it.
move "%FilePDF%" "XYZ FOLDER\OCC-%numeroa:~0,5%#%nature%.pdf"

rem The file movement could fail in case of a PDF file with new
rem name exists already in target folder. In this case rename
rem the PDF file in its current folder.
if errorlevel 1 ren "%FilePDF%" "OCC-%numeroa:~0,5%#%nature%.pdf"

rem Exit the subroutine RenamePDF and continue with FOR loop in main code.
goto :EOF

我不清楚为什么每个 *.pdf 文件都应该移动到具有新文件名的子目录中。 在我看来,这并不是真正必要的。命令 REN 就足够了。

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

call /? del /? dir /? echo /? endlocal /? find /? for /? goto /? md /? move /? rem /? ren /? set /? setlocal /?

另请阅读有关Using Command Redirection Operators 的Microsoft 文章,了解2>nul 的解释。重定向运算符 > 必须在 FOR 命令行上使用插入符号 ^ 转义,以便在 Windows 命令解释器在执行命令 FOR 之前处理此命令行时解释为文字字符> 在后台启动的单独命令进程中执行嵌入的dir 命令行。

另见Where does GOTO :EOF return to?

【讨论】:

以上是关于使用内容重命名 PDF 文件的批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用批处理脚本重命名上个月的文件

使用创建日期复制和重命名文件(批处理脚本)

使用 bash 脚本批量重命名 FTP 服务器上的文件

使用 Windows 批处理脚本重命名目录中的所有文件

使用 Windows 批处理脚本重命名目录中的所有文件

从文件夹名称重命名文件的批处理脚本; “-”的问题