Batch file 如何根据起始文件名重命名文件?
我需要一个例程将文件重命名为转换后的文件名,并删除给定目录中的原始文件。Batch file 如何根据起始文件名重命名文件?,batch-file,rename,Batch File,Rename,我需要一个例程将文件重命名为转换后的文件名,并删除给定目录中的原始文件。它必须只查找开始字符串GL_AVG,GL_DEFAULT,GL_END,因为在此之后,文件名将每天更改,因此无法硬编码(我可以这样做) 原始文件: GL_AVG_2017-02-15_08-54-56.txt GL_DEFAULT_2017-02-15_08-54-34.txt GL_END_2017-02-15_08-55-12.txt 转换为: GL_AVG_Feb_2017.txt GL_DEFAULT_Feb_20
它必须只查找开始字符串
GL_AVG
,GL_DEFAULT
,GL_END
,因为在此之后,文件名将每天更改,因此无法硬编码(我可以这样做)
原始文件:
GL_AVG_2017-02-15_08-54-56.txt
GL_DEFAULT_2017-02-15_08-54-34.txt
GL_END_2017-02-15_08-55-12.txt
转换为:
GL_AVG_Feb_2017.txt
GL_DEFAULT_Feb_2017.txt
GL_END_Feb_2017.txt
到目前为止,我有以下代码来解析year和filemonth,但是在尝试使用这些变量重命名时遇到了问题
For /F "eol=_ tokens=3 delims=_" %%a in ('dir /b *.txt') do set yy=%%~na
For /F "eol=_ tokens=2 delims=-" %%a in ('dir /b *.txt') do set filemonth=%%~na
if %filemonth% == "01" set mm=Dec
if %filemonth% == "02" set mm=Jan
if %filemonth% == "03" set mm=Feb
if %filemonth% == "04" set mm=Mar
if %filemonth% == "05" set mm=Apr
if %filemonth% == "06" set mm=May
if %filemonth% == "07" set mm=Jun
if %filemonth% == "08" set mm=Jul
if %filemonth% == "09" set mm=Aug
if %filemonth% == "10" set mm=Sep
if %filemonth% == "11" set mm=Oct
if %filemonth% == "12" set mm=Nov
set dd=%%c
)
任何帮助都将不胜感激 我将使用字符串替换函数,该函数如下所示:
%VariableName:[OldText]=[NewText]%
或者在您的情况下:
for /F "eol=_ tokens=2 delims=-" %%a in ('dir /b *.txt') do (
call :RenameFile %%~na )
exit /B
:RenameFile [%1: Name of file to be renamed]
set Filename=%1
::Look for "2017-01", change it to "2017_Jan"
::Repeat for each possible month.
set Filename=%Filename:2017-01=2017_Jan%
set Filename=%Filename:2017-02=2017_Feb%
set Filename=%Filename:2017-03=2017_Mar%
set Filename=%Filename:2017-04=2017_Apr%
set Filename=%Filename:2017-05=2017_May%
set Filename=%Filename:2017-06=2017_Jun%
set Filename=%Filename:2017-07=2017_Jul%
set Filename=%Filename:2017-08=2017_Aug%
set Filename=%Filename:2017-09=2017_Sep%
set Filename=%Filename:2017-10=2017_Oct%
set Filename=%Filename:2017-11=2017_Nov%
set Filename=%Filename:2017-12=2017_Dec%
rename %1 %Filename%
exit /B
或者,您可能想看看我将使用字符串替换函数,它如下所示:
%VariableName:[OldText]=[NewText]%
或者在您的情况下:
for /F "eol=_ tokens=2 delims=-" %%a in ('dir /b *.txt') do (
call :RenameFile %%~na )
exit /B
:RenameFile [%1: Name of file to be renamed]
set Filename=%1
::Look for "2017-01", change it to "2017_Jan"
::Repeat for each possible month.
set Filename=%Filename:2017-01=2017_Jan%
set Filename=%Filename:2017-02=2017_Feb%
set Filename=%Filename:2017-03=2017_Mar%
set Filename=%Filename:2017-04=2017_Apr%
set Filename=%Filename:2017-05=2017_May%
set Filename=%Filename:2017-06=2017_Jun%
set Filename=%Filename:2017-07=2017_Jul%
set Filename=%Filename:2017-08=2017_Aug%
set Filename=%Filename:2017-09=2017_Sep%
set Filename=%Filename:2017-10=2017_Oct%
set Filename=%Filename:2017-11=2017_Nov%
set Filename=%Filename:2017-12=2017_Dec%
rename %1 %Filename%
exit /B
或者,您可能需要查看
样本输出
Ren "GL_AVG_2017-02-15_08-54-56.txt" "GL_AVG_Feb_2017.txt"
Ren "GL_DEFAULT_2017-02-15_08-54-34.txt" "GL_DEFAULT_Feb_2017.txt"
Ren "GL_END_2017-02-15_08-55-12.txt" "GL_END_Feb_2017.txt"
如果输出看起来正常,则删除最后一行中的回波
样本输出
Ren "GL_AVG_2017-02-15_08-54-56.txt" "GL_AVG_Feb_2017.txt"
Ren "GL_DEFAULT_2017-02-15_08-54-34.txt" "GL_DEFAULT_Feb_2017.txt"
Ren "GL_END_2017-02-15_08-55-12.txt" "GL_END_Feb_2017.txt"
如果输出看起来正常,请删除最后一行中的回显。您的If语句永远不会为真。这是一个字符串比较。你在比较的一边有引号,但另一边没有。谢谢你的关注。关于更名有什么想法吗?你有没有故意减去一个月?12月1日是以什么为基础的?02是1月,12是11月???你的IF陈述永远不会是真的。这是一个字符串比较。你在比较的一边有引号,但另一边没有。谢谢你的关注。关于更名有什么想法吗?你有没有故意减去一个月?12月1日是以什么为基础的?02是一月,12是十一月???