Board logo

标题: [文件操作] 批处理如何保留每个文件夹中扩展名为brd的最初和最后保存的两个文件? [打印本页]

作者: jelly_770    时间: 昨天 12:39     标题: 批处理如何保留每个文件夹中扩展名为brd的最初和最后保存的两个文件?

请教各位大大,批处理,遍历目录下的子文件夹,保留每个文件夹中扩展名为brd的最初和最后保存的两个文件,其余的都删除,如何解决?
作者: Five66    时间: 昨天 15:40

请具体说明什么是"最初"跟"和" ,例如怎样的才算是"最初"(创建时间?修改时间?其他?) ,"和"跟"最后保存"是什么关系(or? and?)
最好举个实际的例子 ,比如操作之前是怎样的 ,操作之后变成啥样?
作者: jelly_770    时间: 昨天 15:57

。。。。。。。。
作者: jelly_770    时间: 昨天 15:57

回复 2# Five66


目录下有多个扩展名为BRD的文件,根据修改时间来判定
比如操作之前目录下有下列文件:
名称                修改时间
123.brd   2022/10/21 8:30
456.brd   2022/10/21 12:10
abc.brd    2022/10/21 15:06
test.brd   2022/10/21 16:50
last.brd   2022/10/21 21:50
操作之后目录下有下列文件:(其余的文件都删除)
名称                修改时间
123.brd    2022/10/21 8:30
last.brd   2022/10/21 21:50
作者: qixiaobin0715    时间: 昨天 16:29

本帖最后由 qixiaobin0715 于 2024-10-21 16:44 编辑

代码未经测试:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /ad') do (
  3.     pushd "%%i"
  4.     setlocal enabledelayedexpansion
  5.     for /f "delims=" %%j in ('dir /b /od /a-d *.brd') do (
  6.         if not defined str set "_%%j=true"
  7.         set "str=%%j"
  8.     )
  9.     set "_!str!=true"
  10.     set str=
  11.     for /f "delims=" %%j in ('dir /b /a-d *.brd') do if not defined _%%j del "%%j"
  12.     endlocal
  13.     popd
  14. )
  15. pause
复制代码

作者: jelly_770    时间: 昨天 16:35

回复 5# qixiaobin0715


    测试反馈:
运行后,只保留了一个最初修改时间的文件
作者: qixiaobin0715    时间: 昨天 16:47

回复 6# jelly_770
5楼代码已修改
作者: jelly_770    时间: 昨天 16:55

本帖最后由 jelly_770 于 2024-10-21 16:59 编辑

回复 7# qixiaobin0715


    测试成功了,感谢大大的热心帮忙,感谢感谢!!!
但同时发现个问题,如果是嵌套了多个文件夹,不会达到效果
作者: aloha20200628    时间: 昨天 17:11

本帖最后由 aloha20200628 于 2024-10-21 17:16 编辑

回复 4# jelly_770
当前目录和其各个子目录中符合匹配条件的目标文件*.brd均被删除...
  1. @echo off &setlocal enabledelayedexpansion
  2. (dir /b/s/ad &echo,%cd%)>all.d
  3. for /f "delims=" %%d in (all.d) do if exist "%%d\*.brd" (
  4.    set "lastF=" & for /f "skip=1 delims=" %%F in ('dir /b/a-d/od/tw "%%d\*.brd" ') do (
  5.       if not defined lastF (set "lastF=%%d\%%F") else (del/q "!lastF!"&set "lastF=%%d\%%F")
  6.    )
  7. )
  8. del/q "all.d"&endlocal&pause&exit/b
复制代码

作者: jelly_770    时间: 昨天 17:22

回复 9# aloha20200628


    完美实现预期的效果了,真是藏龙卧虎之地,再次感谢大大们的帮忙,太感谢了~~
作者: qixiaobin0715    时间: 2 小时前

回复 8# jelly_770
那是你自己没有表达清楚:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /s /ad') do (
  3.     pushd "%%i"
  4.     if exist *.brd (
  5.         setlocal enabledelayedexpansion
  6.         for /f "delims=" %%j in ('dir /b /od /a-d *.brd') do (
  7.             if defined str (
  8.                 if defined n del "!str!"
  9.                 set n=0
  10.             )
  11.             set "str=%%j"
  12.         )
  13.         endlocal
  14.     )
  15.     popd
  16. )
  17. pause
复制代码





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