[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎么保留指定数量的文件?

请教一下这个批处理文件怎么写
文件夹下有如下多版本的文件

    a.back           b.dat                      d.ini.5            c.txt               e.cfg               f.cfg     .....
    a.back.1        b.dat.2                   d.ini.6            c.txt.2             e.cfg.1       
    a.back.3        b.dat.5                   d.ini.15          c.txt.6
    a.back.8        b.dat.12                 d.ini.22               
    a.back.10      b.dat.42                 d.ini.41                 
    a.back.50      b.dat.95                 d.ini.58               
                        b.dat.114                               
                        b.dat.181                               

现在想通过设置指定每个文件保留指定的版本数量,
如果只保留1个最高版本,处理后剩下以下文件
    a.back.50           b.dat.181                  d.ini.58            c.txt.6              e.cfg.1          f.cfg             .....
       
如果只保留2个最高版本,处理后剩下以下文件
    a.back.10           b.dat.114                  d.ini.41            c.txt.2              e.cfg              f.cfg     .....
    a.back.50           b.dat.181                  d.ini.58            c.txt.6              e.cfg.1       

如果只保留3个最高版本,处理后剩下以下文件
    a.back.8           b.dat.95                  d.ini.22            c.txt              e.cfg              f.cfg   .....
    a.back.10         b.dat.114                d.ini.41            c.txt.2            e.cfg.1       
    a.back.50         b.dat.181                d.ini.58            c.txt.6

以此类推,处理当前目录,处理子目录的处理怎么写

  1. @echo off
  2. set /p n=保留数量:
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d ^|find /v "%~0"') do (
  5. for /f "tokens=1-3 delims=." %%a in ("%%~nxi") do (
  6. set m=00000%%c
  7. if "%%c" equ "" (
  8. set "#!m:~-5!#%%~nxi.0=%%i"
  9. ) else (
  10. set "#!m:~-5!#%%~nxi=%%i"
  11. )
  12. )
  13. )
  14. for /f "tokens=1-4* delims=#=." %%a in ('set # ^|sort /r') do (
  15. if defined _"%%b.%%c" (
  16. set m=!_"%%b.%%c"!
  17. set /a m+=1
  18. set _"%%b.%%c"=!m!
  19. ) else set _"%%b.%%c"=1
  20. if !_"%%b.%%c"! gtr %n% (
  21. rem 显示正确则去掉 echo 再执行
  22. echo del "%%e"
  23. )
  24. )
  25. endlocal
  26. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 2# 77七


   谢谢,测试了当前目录没得问题,但是如果是处理子目录的话,运行一次只能清除去最底层文件夹
比如,批理程序放在   文件夹A    所在目录
        文件夹A   里面有   文件夹B
        文件夹B   里面有   文件夹C
点第一次运行只会   处理        文件夹C 的文件
点第二次运行时      处理        文件夹B 的文件
点第三次运行时      处理        文件夹A 的文件

TOP

回复 3# 阿一呐法


   存在大量重名文件吧?是需要每个文件夹单独保留?
bat小白,请多指教!谢谢!

TOP

回复 4# 77七


    嗯是的,每个文件夹单独保留

TOP

回复 5# 阿一呐法


  
  1. @echo off
  2. set /p n=保留数量:
  3. for %%x in (.) do call :1 "%%~fx"
  4. for /r /d %%y in (*) do call :1 "%%~fy"
  5. pause
  6. exit
  7. :1
  8. pushd "%~1"
  9. echo 正在处理 "%~1"
  10. setlocal enabledelayedexpansion
  11. for /f "delims=" %%i in ('dir /b /a-d ^|find /v "%~nx0"') do (
  12. for /f "tokens=1-3 delims=." %%a in ("%%~nxi") do (
  13. set m=00000%%c
  14. if "%%c" equ "" (
  15. set "#!m:~-5!#%%~nxi.0=%%i"
  16. ) else (
  17. set "#!m:~-5!#%%~nxi=%%i"
  18. )
  19. )
  20. )
  21. for /f "tokens=1-4* delims=#=." %%a in ('set # ^|sort /r') do (
  22. if defined _"%%b.%%c" (
  23. set m=!_"%%b.%%c"!
  24. set /a m+=1
  25. set _"%%b.%%c"=!m!
  26. ) else set _"%%b.%%c"=1
  27. if !_"%%b.%%c"! gtr %n% (
  28. rem 显示正确则去掉 echo 再执行
  29. echo del "%%e"
  30. )
  31. )
  32. endlocal
  33. popd
  34. exit /b
复制代码
bat小白,请多指教!谢谢!

TOP

回复 6# 77七


    测试OK,太感谢了

TOP

返回列表