找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 76756|回复: 16

[文件操作] 批处理怎样截取文件修改时间的年月日部分批量重命名?

[复制链接]
发表于 2021-6-5 08:09:19 | 显示全部楼层 |阅读模式
一个文件夹内有多个txt文件,如何获取每个文件的修改时间,再截取修改时间的年月日部分(就是去掉后面的小时和分钟),将文件名变更为截取后的修改时间。

比如 三个文件                1.txt                                           2.txt                                                  3.txt   
文件的修改时间分别是 2021-‎01-‎08,‏‎17:02:14        2021-‎02-‎08,‏‎17:02:14                     2021-‎03-‎08,‏‎17:02:14

最终修改为 2021-‎01-‎08.txt            2021-‎02-‎08.txt                  2021-‎03-‎08.txt
发表于 2021-6-5 08:39:30 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4. for /f "tokens=1-3 delims=/ " %%a in ("%%~ti") do set str=%%a-%%b-%%c
  5. ren "%%i" "!str!%%~xi"
  6. )
  7. pause
复制代码
 楼主| 发表于 2021-6-5 09:30:14 | 显示全部楼层
回复 2# qixiaobin0715


    运行后 提示   三行               存在一个重名文件,或是找不到文件
 楼主| 发表于 2021-6-5 09:55:18 | 显示全部楼层
回复 3# llqcnw


    我可以先获取修改时间,然后用 delims=空格 截取出修改时间前面的年月日部分后重命名吗
发表于 2021-6-5 09:58:58 | 显示全部楼层
不同系统时间显示格式可能会有差别。
你在代码第3/4行之间加入一行代码:echo,%%~ti。
看看时间显示格式,可自己修改下面代码。
如果有几个文件修改时间相同,就会有重名文件,很正常啊。
发表于 2021-6-5 10:08:51 | 显示全部楼层
把这行代码ren "%%i" "!str!%%~xi"修改为:echo,ren "%%i" "!str!%%~xi"看看是否有重名文件。
 楼主| 发表于 2021-6-5 10:23:42 | 显示全部楼层
回复 6# qixiaobin0715


    三个文件的修改日期不是同一天了,加上echo后 显示的也不是同一个日期,但后面没有实现 就是pasue后就没有反应,实际没有更名


另外问一下 不截取年月日  直接获取文件的修改时间后重命名    用  for /f %%i in ('dir /b *.txt') do ren %%i %%~ti.txt    有什么问题?   提示命令语法不正确
发表于 2021-6-5 11:10:49 | 显示全部楼层

  1. ren "%%i" "%%~ti.txt"
复制代码
加引号,文件名有空格?
发表于 2021-6-5 11:20:29 | 显示全部楼层
回复 7# llqcnw


如果8楼的方法仍未解决你的问题,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
 楼主| 发表于 2021-6-5 11:32:35 | 显示全部楼层
回复 8# newswan


    文件名里没有空格, 文件的修改日期也不是同一天    加引号后   还是提示 存在一个重名文件或找不到文件
发表于 2021-6-5 11:34:20 | 显示全部楼层
日期格式中有/:,不能出现在文件名中。
发表于 2021-6-5 11:43:52 | 显示全部楼层

  1. echo ren "%%i" "%%~ti.txt"
复制代码
输出试试
看看9楼,怎么调试
发表于 2021-6-5 11:46:05 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  4. set str=%%~ti
  5. set "str=!str:/=-!"
  6. set "str=!str::=-!"
  7. ren "%%i" "!str!%%~xi"
  8. )
  9. pause
复制代码
 楼主| 发表于 2021-6-5 14:52:26 | 显示全部楼层
回复 13# qixiaobin0715


    这个好用,谢谢!

能问一下

set "str=!str:/=-!"

set "str=!str::=-!"

这两句语句是什么意思?
发表于 2021-6-5 15:39:27 | 显示全部楼层
回复 14# llqcnw


    去看教程 字符串替换
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:34 , Processed in 0.021054 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表