在Windows的环境下使用dos命令的for循环,使用创建文件的时间+日期+原名,批量重命名文件。
以图片为例子,假设有多张图片
在当前目录路径上输入cmd,回车
首先dir看看,可以看到dir的内容有最后修改文件日期,时间,内存,名称+后缀
简单的开始,遍历所有字段:
token= 1,2,3,4,5对应的变量是%%c,%%d,%%e,%%f,%%g
尝试遍历日期和图片名称:
@echo off
setlocal enabledelayedexpansion
for /f "skip=3 tokens=1,4 delims= " %%c in ('dir') do (
if not %%d==xfx.bat (
echo %%c %%d)
)
pause
- skip=n ------指在文件开始时忽略的行数。
- delims=xxx ------- 指定分隔符集。默认以空格和制表符TAB为分隔符。for /f "delims= " %i in (c:/temp/myfile.txt) do echo %i 与for /f %i in (c:/temp/myfile.txt) do echo %i 效果一样。
- tokens=x,y,m-n ------- 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。
for /f "skip=3 tokens=1,4 delims= " %%c in ('dir') do (------忽略前三行,以空格为分隔符,取第1个字符串赋值给变量%%c,取第4个字符串赋值给变量%%d,赋值的变量默认a到z这个顺序
if not %%d==xfx.bat (------如果变量%%d的字符串not等于xfx.bat,则进入if条件(不打印该文件)
echo %%c %%d)------输出变量%%c和%%d
)
pause ------暂停等待
能正常打印出来就是成功了一半了,因为打印的时间和文件名之间有空格,所以加上_号:
本来想直接ren重命名文件,结果发现不行
检查了很多次代码,找了很多方法,才发现,Windows不允许文件命名里含有:和 / 这两个符号
需要把日期字符串里的的‘ / ’和时间的‘:’ 去掉,否则无法命名ren
所以又在if里面嵌套了一个for循环,用来去掉时间和日期里的 /:符号
搞定!!!
全部完整代码:
@echo off
setlocal enabledelayedexpansion
for /f "skip=4 tokens=1,2,4 delims= " %%c in ('dir') do (
if not %%e==xfx.bat (
set var=%%c_%%d
for /f "tokens=1,2,3,4 delims=/:" %%m in ("!var!") do (
echo %%e %%m_%%n_%%o_%%p_%%e
ren %%e %%m_%%n_%%o_%%p_%%e
)))
pause
看起来有点复杂,其实很简单,结构就是for--if--for
set var=%%c_%%d ------把第一个for循环里切出来的时间和日期赋值给var变量
for /f "tokens=1,2,3,4 delims=/:" %%m in ("!var!") do ( ------第二个for循环,delims值为 /: delims值有多个字符默认分隔每一个单个字符,变量赋值从m开始,in里面使用“!!”把var变量包起来
ren %%e %%m_%%n_%%o_%%p_%%e ------%%m%%n是分割后的日期,%%o%%p是分割后的时间,%%e是第一 个for循环里分割出的文件名,最后的命名格式是日期+修改文件时间+原文件名
对了,如果不想使用修改文件时间,可以把dir改成dir /TC,这是创建文件的时间
还有重命名的内容含有中文字体,可能需要更改bat文件的编码格式,就在右下角,如果是UTF-8格式的,需要另存为为同名的ANSI格式的文件保存,再双击运行即可,否则会出现乱码
在命名过程中还遇到一个问题,名称里含有空格的文件无法被读取全名,会被 delims以默认空格分开字符,所以这里需要再写一个去除空格文件名的bat,如果文件名里没有空格的文件则不需要
去掉文件的空格
@echo off
setlocal enabledelayedexpansion
for /f "skip=4 tokens=1,2,4,5 delims= " %%c in ('dir') do (
set var=%%e %%f
set clm=%%e%%f
ren "!var!" !clm!)
)
pause
%%e和%%f是文件名,因为含有空格被分开了,有空格的文件必须使用“”包起来才能重命名
本文章仅作参考使用,有其他的想法或者改进优化代码的想法,可以评论区讨论噢
转载请备注