我有一个批处理脚本用于提取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
答案 0 :(得分:2)
这个注释的批处理文件代码可能用于将当前目录中的所有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
命令行。