标题: [文件操作] 批处理如何保留每个文件夹中扩展名为brd的最初和最后保存的两个文件? [打印本页]
作者: jelly_770 时间: 2024-10-21 12:39 标题: 批处理如何保留每个文件夹中扩展名为brd的最初和最后保存的两个文件?
请教各位大大,批处理,遍历目录下的子文件夹,保留每个文件夹中扩展名为brd的最初和最后保存的两个文件,其余的都删除,如何解决?
作者: Five66 时间: 2024-10-21 15:40
请具体说明什么是"最初"跟"和" ,例如怎样的才算是"最初"(创建时间?修改时间?其他?) ,"和"跟"最后保存"是什么关系(or? and?)
最好举个实际的例子 ,比如操作之前是怎样的 ,操作之后变成啥样?
作者: jelly_770 时间: 2024-10-21 15:57
。。。。。。。。
作者: jelly_770 时间: 2024-10-21 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 时间: 2024-10-21 16:29
本帖最后由 qixiaobin0715 于 2024-10-21 16:44 编辑
代码未经测试:- @echo off
- for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- setlocal enabledelayedexpansion
- for /f "delims=" %%j in ('dir /b /od /a-d *.brd') do (
- if not defined str set "_%%j=true"
- set "str=%%j"
- )
- set "_!str!=true"
- set str=
- for /f "delims=" %%j in ('dir /b /a-d *.brd') do if not defined _%%j del "%%j"
- endlocal
- popd
- )
- pause
复制代码
作者: jelly_770 时间: 2024-10-21 16:35
回复 5# qixiaobin0715
测试反馈:
运行后,只保留了一个最初修改时间的文件
作者: qixiaobin0715 时间: 2024-10-21 16:47
回复 6# jelly_770
5楼代码已修改
作者: jelly_770 时间: 2024-10-21 16:55
本帖最后由 jelly_770 于 2024-10-21 16:59 编辑
回复 7# qixiaobin0715
测试成功了,感谢大大的热心帮忙,感谢感谢!!!
但同时发现个问题,如果是嵌套了多个文件夹,不会达到效果
作者: aloha20200628 时间: 2024-10-21 17:11
本帖最后由 aloha20200628 于 2024-10-21 17:16 编辑
回复 4# jelly_770
当前目录和其各个子目录中符合匹配条件的目标文件*.brd均被删除...- @echo off &setlocal enabledelayedexpansion
- (dir /b/s/ad &echo,%cd%)>all.d
- for /f "delims=" %%d in (all.d) do if exist "%%d\*.brd" (
- set "lastF=" & for /f "skip=1 delims=" %%F in ('dir /b/a-d/od/tw "%%d\*.brd" ') do (
- if not defined lastF (set "lastF=%%d\%%F") else (del/q "!lastF!"&set "lastF=%%d\%%F")
- )
- )
- del/q "all.d"&endlocal&pause&exit/b
复制代码
作者: jelly_770 时间: 2024-10-21 17:22
回复 9# aloha20200628
完美实现预期的效果了,真是藏龙卧虎之地,再次感谢大大们的帮忙,太感谢了~~
作者: qixiaobin0715 时间: 2024-10-22 08:44
回复 8# jelly_770
那是你自己没有表达清楚:- @echo off
- for /f "delims=" %%i in ('dir /b /s /ad') do (
- pushd "%%i"
- if exist *.brd (
- setlocal enabledelayedexpansion
- for /f "delims=" %%j in ('dir /b /od /a-d *.brd') do (
- if defined str (
- if defined n del "!str!"
- set n=0
- )
- set "str=%%j"
- )
- endlocal
- )
- popd
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |