如何根据开始文件名重命名文件?
问题描述:
我需要一个例程来将文件重命名为转换后的文件名并删除给定目录中的原件。
它必须寻找只是开始字符串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
到目前为止,我有以下的代码来解析一年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
答
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
:: build a pseudo array with the month names
Set M#=101
For %%A in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
) do Set Month[!M#:~-2!]=%%A&Set /A M#+=1
:: Rename
For /f "tokens=1-4* delims=_-" %%A in (
'Dir /B GL_*_20*_*.txt'
) Do Echo Ren "%%A_%%B_%%C-%%D-%%E" "%%A_%%B_!Month[%%D]!_%%C.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语句永远不会是真的。这是一个字符串比较。你在比较的一侧有引号,但没有引用另一侧。 – Squashman
感谢您的收获。关于重命名作品的任何想法? – user7571572
你有意减去一个月吗? – LotPings