我目前遇到了一个与我正在处理的 DOS 批处理脚本有关的问题,我需要帮助重命名文件。
这是我正在寻找的重命名方案:
原始文件名
FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD
我需要将原始文件名的最后一部分(DDMMYY
)转换为YYMMDD
。
它应该是这样的
FIL120_000112_301215 ==> MYNAME_TLD_EXT_151230
FIL120_000112_311215 ==> MYNAME_TLD_EXT_151230
FIL120_000112_040116 ==> MYNAME_TLD_EXT_151230
FIL120_000112_050116 ==> MYNAME_TLD_EXT_151230
请注意,它不适合当前需要使用当前日期和文件名该部分中的某些命令来完成重命名。
我想知道是否可以使用批处理脚本让文件名的最后一个部分字符交换位置,从而实现本质上的YY
交换DD
。
此外,我需要将 fixed 之前的其他部分YYMMDD
替换为静态字符,MYNAME_TLD_EXT_
而不是 switch 之前的部分,这样最终的结果将是MYNAME_TLD_EXT_<YYMMDD>
没有文件扩展名。
答案1
构建 DOS 脚本来重命名文件
原始文件名:
FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD
我需要将原始文件名的最后一部分(DDMMYY)转换为YYMMDD。
下面是一个 Windows 批处理脚本,它将执行您在问题中列出的操作 - 如果您想要解释这个脚本正在执行的操作,请告诉我,如果您不确定我所写的内容,我会在逻辑中添加注释以准确澄清。
您需要将其更改SET SourceDir=
为您需要重命名的文件所在位置的完整路径。
我.txt
在我的示例中使用了这些文件的文件扩展名,但您可以在下面的逻辑部分将其更改为任何其他扩展名DIR /B "%SourceDir%\*_*_*.txt"
- 如果您遇到麻烦,我会为您提供帮助,所以请告诉我。
另外,如果您的文件根本没有任何扩展名,请告诉我,我将在此答案中添加另一个不带任何文件扩展名的示例,但仍可为您完成此操作。
请注意,我已测试并确认,这与上述示例和您上述问题中的解释一致。
Windows 批处理脚本示例
文件名解析和重命名带扩展名的文件
@ECHO ON
SET SourceDir=C:\PathForFilesToRename
FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*.txt""') DO (
CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA" "%%~XA"
)
GOTO :EOF
:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%
SET Extension=%~3
REN "%~1" "%FnamePart1%_%YY%%MM%%DD%%Extension%"
GOTO :EOF
文件名解析和重命名文件无扩展名
@ECHO ON
SET SourceDir=C:\PathForFilesToRename
FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (
CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"
)
GOTO :EOF
:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%
REN "%~1" "%FnamePart1%_%YY%%MM%%DD%"
GOTO :EOF
文件名解析和重命名文件无扩展名,带静态重命名部分
(重要的提示:如果两个文件在使用静态名称重命名时具有相同的 YYMMDD 名称,那么这将是一个问题,但只要同一文件夹中没有两个文件具有相同的 YYMMDD 名称,那么这应该可以正常工作。但是,如果有一个文件已经使用该静态名称重命名,然后下一个文件尝试使用相同的静态名称重命名,那么这将是一个问题。)
变量说明:在下面,SET StaticFnamePart=
您可以将其设置为任何您想要设置的内容,用于文件的静态重命名部分,并将其用于放入重命名文件的该部分。
@ECHO ON
SET SourceDir=C:\PathForFilesToRename
SET StaticFnamePart=MYNAME_TLD_EXT
FOR /F "TOKENS=*" %%A IN ('"DIR /B "%SourceDir%\*_*_*""') DO (
CALL :RenameLogic "%SourceDir%\%%~NXA" "%%~NA"
)
GOTO :EOF
:RenameLogic
SET FnameNoExt=%~2
FOR /F "TOKENS=1-3 DELIMS=_" %%R IN ("%FnameNoExt%") DO (SET FnamePart1=%%R_%%S)
SET FnameDtPart=%FnameNoExt:~-6%
SET DD=%FnameDtPart:~0,2%
SET MM=%FnameDtPart:~2,2%
SET YY=%FnameDtPart:~-2%
REN "%~1" "%StaticFnamePart%_%YY%%MM%%DD%"
GOTO :EOF