khi*_*loc 3 batch characters rename batch-rename
我目前遇到了我一直在处理的 DOS 批处理脚本的问题,我需要重命名文件的帮助。
这是我正在寻找的重命名方案:
FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD
Run Code Online (Sandbox Code Playgroud)
我需要将原始文件名的最后一部分 ( 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
Run Code Online (Sandbox Code Playgroud)
请注意,它不适合当前需要使用当前日期和文件名的那部分中的某些命令来完成重命名。
我想知道是否可以使用批处理脚本来获取最后一个文件名部分字符来切换位置YY并DD交换位置。
此外,我需要将固定之前的其他部分YYMMDD替换为静态字符MYNAME_TLD_EXT_而不是切换之前的静态字符,因此最终结果将是MYNAME_TLD_EXT_<YYMMDD>并且没有文件扩展名。
构建一个 DOS 脚本来重命名文件
原始文件名:
FIL120_000112_DDMMYY ==> MYNAME_TLD_EXT_YYMMDD我需要将原始文件名的最后一部分 (DDMMYY) 转换为 YYMMDD。
下面是一个 Windows 批处理脚本,它将只执行您在问题中列出的内容——如果您想解释该脚本的作用,请告诉我,我会在逻辑中添加注释以明确说明您是否不确定基于我所拥有的内容。
您需要将 更改为SET SourceDir=需要重命名的文件所在位置的完整路径。
我.txt在示例中使用了这些文件的文件扩展名,但您可以在DIR /B "%SourceDir%\*_*_*.txt"下面的逻辑部分中将其更改为任何其他扩展名- 如果您遇到问题,我会提供帮助,所以请告诉我。
此外,如果您的文件根本没有任何扩展名,请告诉我,我将在此答案中添加另一个示例,但没有任何文件扩展名仍将为您完成此操作。
请注意,我测试并确认这与上述示例和上述问题中的解释一样有效。
@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
Run Code Online (Sandbox Code Playgroud)
@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
Run Code Online (Sandbox Code Playgroud)
(重要说明:如果两个文件在使用静态名称重命名时具有相同的 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
Run Code Online (Sandbox Code Playgroud)