Batch file 用于复制和重命名.pdf文件的批处理文件

Batch file 用于复制和重命名.pdf文件的批处理文件,batch-file,cmd,Batch File,Cmd,我有一套每天生成的文件,称为 01234fileA.pdf 01234SecondFile.pdf 01234Final.pdf 我需要复制到一个单独的目录。文件名前面的数字表示生成文件的运行编号,因此A)彼此匹配,B)始终为五个字符。然后我需要将其余文件名映射到静态但不同的文件名: fileA.pdf -> A_File.pdf SecondFile.pdf -> File_Number_Two.pdf Final.pdf -> Grand_Finale.pdf 我想我需

我有一套每天生成的文件,称为

01234fileA.pdf
01234SecondFile.pdf
01234Final.pdf
我需要复制到一个单独的目录。文件名前面的数字表示生成文件的运行编号,因此A)彼此匹配,B)始终为五个字符。然后我需要将其余文件名映射到静态但不同的文件名:

fileA.pdf -> A_File.pdf
SecondFile.pdf -> File_Number_Two.pdf
Final.pdf -> Grand_Finale.pdf
我想我需要一个for循环来遍历文件夹中的.pdf文件,并选择前导数字的最大值。然后,我希望获取文件名的其余部分,并分别将每个(只有六个)映射到其目标。似乎是一个简单的批处理过程,但我挂断了

感谢您的帮助

@ECHO OFF
SETLOCAL
:: Set source and destination directories (can be same...)
SET sourcedir=c:\sourcedir
SET destdir=c:\destdir
FOR /f "delims=" %%i IN ('dir /b /a-d "%sourcedir%\*.pdf" ') DO CALL :moveme "%%i"
GOTO :EOF

:moveme
SET destd=%~1
SET destf=%destd:~5%
SET destd=%destd:~0,5%
IF /i "%destf%"=="filea.pdf" SET destf=A_File.pdf
IF /i "%destf%"=="Secondfile.pdf" SET destf=File_Number_Two.pdf
IF /i "%destf%"=="Final.pdf" SET destf=Grand_Finale.pdf
ECHO MD "%destdir%\%destd%" 2>NUL
ECHO COPY /B "%sourcedir%\%~1" "%destdir%\%destd%\%destf%"
GOTO :eof
这应该符合你的要求。您只需更改源目录设置和目标目录(即要创建的子目录的父目录)

与掩码匹配的每个文件名都由
:moveme
例程处理。这会将目标文件名
destf
设置为除前5个字符外的所有字符,并将目录设置为所提供名称的前5个字符

既然你说你想要的名称转换有一个限制列表,那么你所需要做的就是在剩下的三个名称转换中跟随弹跳球。
/i
使比较不区分大小写

最后,目录被创建,
2>nul
将抑制“目录已存在”消息,并将文件复制到新名称

请注意,最后两个操作只是
ECHO
发送到控制台-您需要在验证命令是否正常工作后删除
ECHO
关键字

最好将
>nul
(注意:
>nul
,而不是
2>nul
)添加到
COPY
命令的末尾<代码>>nul此处禁止“1文件已复制”消息<代码>2>nul将抑制任何错误消息


moveme
例程之所以这样命名,是因为我下意识地希望
MOVE
而不是
COPY
文件
COPY/B
将对文件(duh)进行
复制,但将原始文件保留在源目录中。用
MOVE
替换
COPY/B
会将文件从源文件传输到目标文件。

您的要求不清楚。