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是十一月???