@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
,不是)可能是个好主意。此处禁止显示“已复制 1 个文件”消息;会抑制任何错误消息...2>nul
COPY
>nul
2>nul
例程之所以如此命名,moveme
是因为我下意识地期望MOVE
而不是COPY
文件。COPY /B
将制作COPY
文件(duh),但将原始文件保留在源目录中。替换COPY /B
为MOVE
会将文件从源传输到目标。