Board logo

标题: [文件操作] [已解决]请问批处理如何批量修改文件名为指定要求 [打印本页]

作者: mgg9373    时间: 2021-3-19 12:00     标题: [已解决]请问批处理如何批量修改文件名为指定要求

本帖最后由 mgg9373 于 2021-3-19 20:32 编辑

各位大佬好,本人初学批处理,现在遇到一个问题,恳请各位指导,十分感谢!

目前的文件夹中有一系列格式为.fft的文件,文件名的样式主要有两类(主要是最后一部分有两位数表示也有1位数表示),分别为:
20190216-045440-B-P-l-CRH380B-3664-00-1.fft
20190216-045440-B-P-l-CRH380B-3664-00-01.fft
用-作为划分符号
第一部分:日期,2019年2月16日,希望只保留201902(即年月),放置到新文件名第二部分
第二部分:不需要
第三部分:表示状态(有B和A两种,希望保留,并放到新文件名第一部分)
第四部分:不需要
第五部分:表示状态(有l和r两种,希望保留,并放到新文件名第一部分,和原第三部分合并)
-第六部分:不需要
第七部分:编号,需要,放置到新文件名第三部分
第八部分-第九部分:希望保留,放置到新文件名的第四、五部分

一些实例:
20190216-045440-B-P-l-CRH380B-3664-00-1.fft
希望更改文件名为:BL-201902-3664-00-01
20190805-031904-B-P-r-CRH380B-3608-00-01
希望更改文件名为:BR-201908-3608-00-01
20200525-052922-A-P-l-CRH380B-3662-07-03
希望更改文件名为:AL-202005-3662-07-03

再次感谢!
作者: qixiaobin0715    时间: 2021-3-19 13:19

本帖最后由 qixiaobin0715 于 2021-3-19 13:41 编辑

未测试,请自测。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.fft') do (
  4.     for /f "tokens=1,3,5,7-9 delims=-." %%a in ("%%i") do (
  5.         set "str1=%%a"
  6.         set "str2=0%%f"
  7.         ren "%%i" "%%b%%c-!str1:~0,-2!-%%d-%%e-!str2:~-2!%%~xi"
  8.     )
  9. )
  10. pause
复制代码

作者: mgg9373    时间: 2021-3-19 13:36

谢谢您!我直接运行了一下,好像会闪退,我琢磨一下这个代码,试试在这个基础上修改一下,谢谢
作者: qixiaobin0715    时间: 2021-3-19 13:41

回复 3# mgg9373
已修改
作者: mgg9373    时间: 2021-3-19 13:59

谢谢大神!太牛了
作者: mgg9373    时间: 2021-3-19 14:17

回复 4# qixiaobin0715

您好,运行时又发现了一个问题,有重复文件,比如
20190409-095947-B-P-l-CRH380B-3665-06-3
20190409-101402-B-P-l-CRH380B-3665-06-3
这两个文件的项都相同,只有第二部分不同,能否只将第二部分最大的文件改名,剩下的不做改动呢?谢谢!

比如这两个文件只保留后者,因为101402>095947
后者的文件名改为BL-201904-3665-06-03
作者: qixiaobin0715    时间: 2021-3-19 15:51

回复 6# mgg9373
自己试试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.fft^|sort /r') do (
  4.     for /f "tokens=1,3,5,7-9 delims=-." %%a in ("%%i") do (
  5.         set "str1=%%a"
  6.         set "str2=0%%f"
  7.         set "newname=%%b%%c-!str1:~0,-2!-%%d-%%e-!str2:~-2!%%~xi"
  8.         if not exist !newname! ren "%%i" "!newname!"
  9.     )
  10. )
  11. pause
复制代码

作者: mgg9373    时间: 2021-3-19 20:32

回复 7# qixiaobin0715


   谢谢大神,学到了!




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