我有一组每天生成的文件,称为例如。
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文件并选择前导数字的最大值。然后我想获取文件名的其余部分并分别将每个(只有六个)映射到其目的地。看起来像一个简单的批处理过程,但我挂断了。
感谢任何帮助!
答案 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
会将文件从源传输到目标。