2012xb21cn 发表于 2017-12-30 11:30:10

求批处理:查找包含某字符串的文件夹并删除日期较旧的文件夹

本帖最后由 2012xb21cn 于 2017-12-30 16:39 编辑

例:在C盘bak文件夹中有如下类似大量文件夹
adbd.245.sa
bbb.123.t
bbb.213a
cst.s
dsss.14
dsss.367.fss
eb.ab
……

要求:查找出所有包含相同字符串的文件夹,并比较他们的创建日期,删除日期较旧的另一个文件夹。
注:指定的字符串不确定,可以第一个.前面的内容比较,相同则归为一组。

需要的结果:
第2和第3行、第5行和第6行为需要找出的文件夹,然后比较比较他们的创建日期,
如果2比3日期新就删除3,否则删除2;5和6行同理……

望高手帮助!!!

nttwqz 发表于 2017-12-31 19:38:16

@echo off
pushd %~dp0\
setlocal enabledelayedexpansion
for /f "tokens=1* delims=." %%a in ('dir /ad /b /tc /o-d') do (
        set n=0
        for /f "tokens=1,4" %%c in ('dir /ad /tc /o-d %%a.* ^| findstr /i /r "" ^| findstr /v /i "\.$"') do (
                set /a n+=1
                set fn-!n!=%%d
                set var=%%c
                set "fd-!n!=!var:~0,4!!var:~5,2!!var:~8,2!"
        )
        if defined fd-2 if "!fd-2!" lss "!fd-1!" rd "!fn-2!" /s /q 2>nul
)
pause
exit

2012xb21cn 发表于 2018-1-1 10:11:30

本帖最后由 2012xb21cn 于 2018-1-1 10:19 编辑

nttwqz 发表于 2017-12-31 19:38
@echo off
pushd %~dp0\
setlocal enabledelayedexpansion


多谢高手,测试了失败
!fd-2!为旧日期而不是文件夹名称,所以显示和删除均失败!

nttwqz 发表于 2018-1-1 11:38:10

2012xb21cn 发表于 2018-1-1 10:11
多谢高手,测试了失败
!fd-2!为旧日期而不是文件夹名称,所以显示和删除均失败!

文件夹名称是!fn-2!

2012xb21cn 发表于 2018-1-1 11:52:34

本帖最后由 2012xb21cn 于 2018-1-1 11:57 编辑

nttwqz 发表于 2018-1-1 11:38
文件夹名称是!fn-2!

测试时改为显示,符合条件的全部显示<DIR>,不能显示具体文件夹名,删除也就失败
把set fn-!n!=%%d 改   set fn-!n!=%%a 后可以显示正确,但没了.后面的内容

nttwqz 发表于 2018-1-1 12:30:07

2012xb21cn 发表于 2018-1-1 11:52
测试时改为显示,符合条件的全部显示,不能显示具体文件夹名,删除也就失败
把set fn-!n!=%%d 改   ...

完整的文件夹名是%%a.%%b

不过你这样改的话,就依赖排序了,虽然两次排序应该也一样的……
页: [1]
查看完整版本: 求批处理:查找包含某字符串的文件夹并删除日期较旧的文件夹