我有一个包含图片文件的文件夹。文件名结构是ddmmyy2222.png其中 dd=日,mm=月,yy=年。我试图根据结构重命名它们yyyymmdd像这样:
120516222.png => 20160512.png
010616222.png => 20160601.png
190316222.png => 20160316.png
% 和 " 让我抓狂。我最后的尝试是:
FOR /F %%n IN ('dir /b') DO (
设置“旧文件=%%n”
设置“d=%oldfile:~0,2%”
设置“m=%oldfile:~2,2%”
设置“y=%oldfile:~4,2%”
设置“新文件=20%y%%m%%d%”
回显。%新文件%
)
但我甚至无法访问 RENAME 语句,因为我没有在 ECHO 中获得所需的内容。出了什么问题?非常感谢!
答案1
怎么了
你需要启用延迟扩展。
- 延迟扩展将导致变量在执行时而不是在解析时扩展。
使用以下批处理文件(test.cmd):
@echo off
setlocal EnableDelayedExpansion
for /f %%n in ('dir /b *.png') do (
set "oldfile=%%n"
set "d=!oldfile:~0,2!"
set "m=!oldfile:~2,2!"
set "y=!oldfile:~4,2!"
set "newfile=20!y!!m!!d!"
echo.!newfile!
)
endlocal
笔记:
dir
根据需要修改命令。%variable%
!variable!
在使用延迟扩展时将被替换。
例子:
F:\test>dir *.png
Volume in drive F is Expansion
Volume Serial Number is 3656-BB63
Directory of F:\test
02/06/2016 21:23 0 010616222.png
02/06/2016 21:23 0 120516222.png
02/06/2016 21:23 0 90316222.png
3 File(s) 0 bytes
0 Dir(s) 1,769,583,063,040 bytes free
F:\test>test
20160601
20160512
20623190
F:\test>
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。