dos命令-嵌套for循环批处理用时间重命名文件

在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是文件名,因为含有空格被分开了,有空格的文件必须使用“”包起来才能重命名

本文章仅作参考使用,有其他的想法或者改进优化代码的想法,可以评论区讨论噢

转载请备注

参考:https://www.jb51.net/article/31284.htm

DOS批处理命令:for循环详细说明及例子-简易百科

dos for循环嵌套 以及continue和break的讨论_dengxiansuo5846的博客-CSDN博客

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CMD命令行高级教程精选合编 目录 第一章 批处理基础 第一节 常用批处理内部命令简介 1、REM 和 :: 2、ECHO 和 @ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和 : 9、FIND 10、START 11、assoc 和 ftype 12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟(ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION 启动或停用延缓环境变量扩展名。) 17、ATTRIB显示或更改文件属性 第二节 常用特殊符号 1、@命令行回显屏蔽符 2、%批处理变量引导符 3、> 重定向符 4、>>重定向符 5、<、>、<& 重定向符 6、|命令管道符 7、^转义字符 8、组合命令 9、& 组合命令 10、||组合命令 11、\"\"字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号 第二章 FOR命令详解 一、基本格式 二、参数 /d仅为目录 三、参数 /R递归(文件名) 四、参数 /L迭代数值范围 五、参数 /F迭代及文件解析 第三章 FOR命令中的变量 一、 ~I- 删除任何引号(\"),扩展 %I 二、 %~fI- 将 %I 扩展到一个完全合格的路径名 三、 %~dI- 仅将 %I 扩展到一个驱动器号 四、 %~pI- 仅将 %I 扩展到一个路径 五、 %~nI- 仅将 %I 扩展到一个文件名 六、 %~xI- 仅将 %I 扩展到一个文件扩展名 七、 %~sI- 扩展的路径只含有短名 八、 %~aI- 将 %I 扩展到文件文件属性 九、 %~tI- 将 %I 扩展到文件的日期/时间 十、 %~zI- 将 %I 扩展到文件的大小 十一、 %~$PATH:I 第四章 批处理中的变量 一、系统变量 二、自定义变量 第五章 set命令详解 一、用set命令设置自定义变量 二、用set命令进行简单计算 三、用set命令进行字符串处理 1、字符串替换 2、字符串截取 第六章 if命令讲解 第一种用法:IF [NOT] ERRORLEVEL number command 第二种用法:IF [NOT] string1==string2 command 第三种用法:IF [NOT] EXIST filename command 第四种用法:IF增强的用法 第七章 DOS编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp命令实现自动下载 六、用7-ZIP实现命令行压缩和解压功能 七、调用VBScript程序 八、将批处理转化为可执行文件 九、时间延迟 1、利用ping命令延时 2、利用for命令延时 3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内 4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内 十、模拟进度条 十一、特殊字符的输入及应用 十二、随机数(%random%)的应用技巧 十三、变量嵌套 与 命令嵌套 1、更正了所有的错别字,适当排版,增加条理性。 2、运行改善所有例子,并纠正了一些语法错误。 3、补充了一些不完全的地方。 4、第一章参考了网上许多教程汇编而成。 5、20080229补充了变量延迟的问题。 6、20080305修改了参数usebackq的说明 7、20080310增加了特殊字符的输入及应用 8、20080311修改了子程序部分 9、20080313修改了echo说明,归纳了9个应用方法 10、20080320增加任意时间延迟方法 11、20080321增加了set计算中十进制与八进制混淆问题的说明 12、20080325修正dos数值计算范围:-2147483648至2147483647,即-2^31~2^31-1 13、20080326增加随机数的应用 14、20080327修改了“if增强用法”中的defined语句说明 15、20080402增加变量嵌套与命令嵌套,重要技巧之一。 ======================================================================
DOS批处理是一种在DOS操作系统下进行自动化任务的方法。它可以帮助用户批量执行多个DOS命令,从而提高工作效率。以下是一些DOS批处理高级教程和命令使用方法的精选。 首先,我们可以使用@echo off命令来关闭批处理的命令回显。这样可以使命令提示符窗口中只显示执行结果,而不显示每条命令的具体执行过程。 接下来是一些常用的DOS命令: 1. dir命令:用于列出指定目录下的文件和子目录。可以使用参数/s来显示包括子目录在内的所有文件。 2. cd命令:用于更改当前目录。可以使用参数..返回上一级目录,或者使用绝对路径指定目标目录。 3. copy命令:用于复制文件或目录。可以使用参数/a来复制文件的属性。 4. del命令:用于删除文件。可以使用参数/f来强制删除只读文件,或使用参数/s删除目录及其子目录下的所有文件。 5. ren命令:用于重命名文件或目录。 6. move命令:用于移动文件或目录。可以使用参数/y来自动覆盖同名文件,或使用参数/i提示是否覆盖。 除了上述基本命令外,还有一些高级的DOS命令可以用于批处理: 1. set命令:用于设置和显示环境变量。可以使用参数/p将所有环境变量显示在命令提示符窗口上。 2. if命令:用于在进行条件判断时执行不同的命令。可以使用参数/ieq来执行相等条件判断。 3. for命令:用于在循环中执行一系列命令。可以使用参数/f来读取指定文件中的每一行。 4. choice命令:用于在批处理中提供选择。可以使用参数/t设置等待时间,并返回相应的错误代码。 5. call命令:用于调用其他批处理文件。 通过学习和掌握这些高级的DOS批处理命令使用方法,我们可以更加灵活地进行自动化任务,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值