Board logo

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

作者: llqcnw    时间: 2021-6-5 08:09     标题: 批处理怎样截取文件修改时间的年月日部分批量重命名?

一个文件夹内有多个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
作者: qixiaobin0715    时间: 2021-6-5 08:39

  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
复制代码

作者: llqcnw    时间: 2021-6-5 09:30

回复 2# qixiaobin0715


    运行后 提示   三行               存在一个重名文件,或是找不到文件
作者: llqcnw    时间: 2021-6-5 09:55

回复 3# llqcnw


    我可以先获取修改时间,然后用 delims=空格 截取出修改时间前面的年月日部分后重命名吗
作者: qixiaobin0715    时间: 2021-6-5 09:58

不同系统时间显示格式可能会有差别。
你在代码第3/4行之间加入一行代码:echo,%%~ti。
看看时间显示格式,可自己修改下面代码。
如果有几个文件修改时间相同,就会有重名文件,很正常啊。
作者: qixiaobin0715    时间: 2021-6-5 10:08

把这行代码ren "%%i" "!str!%%~xi"修改为:echo,ren "%%i" "!str!%%~xi"看看是否有重名文件。
作者: llqcnw    时间: 2021-6-5 10:23

回复 6# qixiaobin0715


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


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

  1. ren "%%i" "%%~ti.txt"
复制代码
加引号,文件名有空格?
作者: Batcher    时间: 2021-6-5 11:20

回复 7# llqcnw


如果8楼的方法仍未解决你的问题,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: llqcnw    时间: 2021-6-5 11:32

回复 8# newswan


    文件名里没有空格, 文件的修改日期也不是同一天    加引号后   还是提示 存在一个重名文件或找不到文件
作者: qixiaobin0715    时间: 2021-6-5 11:34

日期格式中有/:,不能出现在文件名中。
作者: newswan    时间: 2021-6-5 11:43

  1. echo ren "%%i" "%%~ti.txt"
复制代码
输出试试
看看9楼,怎么调试
作者: qixiaobin0715    时间: 2021-6-5 11:46

  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
复制代码

作者: llqcnw    时间: 2021-6-5 14:52

回复 13# qixiaobin0715


    这个好用,谢谢!

能问一下

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

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

这两句语句是什么意思?
作者: newswan    时间: 2021-6-5 15:39

回复 14# llqcnw


    去看教程 字符串替换
作者: llqcnw    时间: 2021-6-5 15:41

回复 15# newswan


    好的   谢谢
作者: ww0000    时间: 2023-5-10 11:28

回复 13# qixiaobin0715


    请问老师,如何截取修改时间的日期部分并加睛原文件名前面?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2