Board logo

标题: [文件操作] 批处理怎么删除旧版本 [打印本页]

作者: 阿一呐法    时间: 2022-8-29 09:28     标题: 批处理怎么删除旧版本

文件夹下有软件生成的各个版本文件如下
      a.txt.1
      a.txt.2
      a.txt.3
....
      b.txt.4
      b.txt.10
      b.txt.15
...
      c.pro.22
      c.pro.50
      c.pro.51
....
      d.prt.4
      d.prt.100
      d.prt.201
....

类似的文件,怎么批处理后只保留最高版本,如上面文件执行后只保留的文件如下
      a.txt.3
....
      b.txt.15
...
      c.pro.51
....
      d.prt.201
....
作者: qixiaobin0715    时间: 2022-8-29 11:26

回复 1# 阿一呐法
未测试,代码另存为ANSI编码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2* delims=." %%i in ('dir /b /a-d^|findstr /e "[0-9]"') do (
  4.     if "%%i.%%j"=="!fn!" (
  5.         if %%k gtr !n! (
  6.             set n=%%k
  7.             del "!fn!.!m!"
  8.         ) else (
  9.             del "%%i.%%j.%%k"
  10.         )
  11.     ) else (
  12.         set n=%%k
  13.     )
  14.     set fn=%%i.%%j
  15.     set m=%%k
  16. )
复制代码

作者: hfxiang    时间: 2022-8-29 16:00

  1. @echo off
  2. Setlocal Enabledelayedexpansion
  3. for /f "delims==" %%a in ('set _del_ID_ 2^>nul') do set "%%a="
  4. for /f %%a in ('dir /b /a-d^|findstr /er "\.[0-9][0-9]*$"') do (
  5. set n=%%~xa
  6. set /a n=!n:~1!
  7. if defined _del_ID_%%~na (
  8. set /a n1=_del_ID_%%~na
  9. if !n! LSS !n1! ( set /a n1=n ) else ( set /a "_del_ID_%%~na=!n!" )
  10. del /f /q "%%~na.!n1!"
  11. ) else (
  12. set /a "_del_ID_%%~na=!n!"
  13. )
  14. )
  15. endlocal
复制代码

作者: 阿一呐法    时间: 2022-8-29 18:12

回复 2# qixiaobin0715


    谢谢,测试没得问题,
作者: WHY    时间: 2022-8-29 18:21

  1. PowerShell "dir *.* | ?{$_.Extension -match '\.\d+$'} | sort{1*$_.Extension.Trim('.')} -Desc | group{$_.BaseName} | forEach{$_.Group | select -Skip 1 | del -Force}"
复制代码





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