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

时间:2013-07-26 17:08:28

标签: 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

我想我想要一个for循环来浏览文件夹中的.pdf文件并选择前导数字的最大值。然后我想获取文件名的其余部分并分别将每个(只有六个)映射到其目的地。看起来像一个简单的批处理过程,但我挂断了。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

@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 file copied'消息; 2>nul会阻止任何错误消息...

moveme例程之所以如此命名,是因为我下意识地期望MOVE而不是COPY文件。 COPY /B将生成COPY文件(duh),但将原始文件保留在源目录中。将COPY /B替换为MOVE会将文件从源传输到目标。