Board logo

标题: [文本处理] 批处理怎样删除D盘文件夹中按时间升序排列的前10个文件夹? [打印本页]

作者: 朱科技    时间: 2022-9-26 14:22     标题: 批处理怎样删除D盘文件夹中按时间升序排列的前10个文件夹?

应用场景:车间D盘中电脑主文件夹叫:“张三”,张三文件夹中每天会以当天日期生成一个文件夹,电脑上存储太多了,过一段时间就要“删除张三文件夹中”最早生成日期的文件夹以释放空间,所以每次我都要要升序在删除,现在想用批处理来完成
作者: Batcher    时间: 2022-9-26 14:31

回复 1# 朱科技


建议使用任务计划定期执行:批处理删除指定天数日期之前的文件夹
http://bbs.bathome.net/thread-3503-1-1.html
作者: hfxiang    时间: 2022-9-26 14:47

测试如下代码,成功后注释掉pause,然后加入定时任务即可
  1. @echo off
  2. rem 保存为ANSI格式
  3. @echo off&setlocal enabledelayedexpansion
  4. set /a n=0
  5. for /f "tokens=*" %%a in ('dir/a-d/od/b') do (
  6. set /a n+=1
  7. if !n! leq 10 del /f "%%~fa"
  8. )
  9. endlocal
  10. pause
复制代码

作者: 朱科技    时间: 2022-9-26 14:51

回复 3# hfxiang


    想在桌面上运行BAT,然后自动删除D盘中的文件夹
作者: hfxiang    时间: 2022-9-26 15:01

本帖最后由 hfxiang 于 2022-9-26 15:07 编辑

回复 4# 朱科技


   
将第5行代码修改为:
  1. for /f "tokens=*" %%a in ('dir "D:\张三" /a-d/od/b/s') do (
复制代码
即可
作者: 朱科技    时间: 2022-9-26 15:08

回复 5# hfxiang


    回收站也看不到了吧
作者: hfxiang    时间: 2022-9-26 15:13

回复 6# 朱科技


   直接删除了,不进回收站的
作者: 朱科技    时间: 2022-9-26 15:14

回复 6# 朱科技


    提示找不到文件(D盘的路径,怎么删除路径是desktop)
作者: qixiaobin0715    时间: 2022-9-26 15:14

本帖最后由 qixiaobin0715 于 2022-9-26 15:32 编辑

我觉最好是保留最新生成的多少个文件夹,以免多次运行代码产生误删:
  1. @echo off
  2. cd /d "D:\张三"
  3. set num=20
  4. for /f "skip=%num% delims=" %%i in ('dir /b /o-d /ad') do rd /q /s "%%i"
复制代码
保留最新生成的前20个文件夹。
注意一定要存在路径“D:\张三”,否则会删除批处理文件所在路径中的除了最新生成的若干文件夹以外的所有文件夹。因为有rd命令,太危险了,切记切记!!!
最好在需要处理的文件夹中运行,上面代码去掉 cd /d "D:\张三"。这样风险要小一些。
作者: hfxiang    时间: 2022-9-26 15:35

回复 8# 朱科技


   
把你完整的代码帖上来看看
作者: qixiaobin0715    时间: 2022-9-26 16:35

回复 8# 朱科技
代码中如果有中文字符的话,批处理文件需要另存为ANSI编码。
作者: 朱科技    时间: 2022-9-27 13:20

回复 9# qixiaobin0715


    路径都设置了D:\张三,不必非要放张三文件夹运行吧,桌面运行没毛病吧
作者: 朱科技    时间: 2022-9-27 13:24

回复 9# qixiaobin0715


    @echo off
cd /d "D:\张三"
set num=20
for /f "skip=%num% delims=" %%i in ('dir /b /o-d /ad') do rd /q /s "%%i"

我放在张三文件夹,运行后,没任何反映,
作者: 朱科技    时间: 2022-9-27 13:28

回复 5# hfxiang


    以下代码放在桌面 和 放在张三文件夹中 运行,都没反映,CMD窗口显示:找不到文件
@echo off
rem 保存为ANSI格式
@echo off&setlocal enabledelayedexpansion
set /a n=0
for /f "tokens=*" %%a in ('dir "D:\张三" /a-d/od/b/s') do (
        set /a n+=1
        if !n! leq 5 del /f "%%~fa"
)
endlocal
pause
作者: qixiaobin0715    时间: 2022-9-27 13:38

本帖最后由 qixiaobin0715 于 2022-9-27 13:51 编辑

回复 12# 朱科技
桌面运行确实是没毛病。主要是如果你把代码误存为UTF-8编码,如果路径中有中文,代码不会识别路径,就会出问题,后面所有的命令都会默认在桌面路径执行,可能会删除桌面符合条件的所有的文件夹。
注意批处理文件用记事本打开,另存为ANSI编码
看你楼上的误删文件可能就是这个原因。
上面代码只是举例:保留最新生成的前20个文件夹而删除其他文件夹,如果文件夹个数不超过20个,当然不会有变化了。保留文件夹的个数请自行修改。
作者: 朱科技    时间: 2022-9-27 14:05

回复 15# qixiaobin0715


    好的
作者: 朱科技    时间: 2022-9-27 14:06

回复 15# qixiaobin0715

如果不管是文件夹还是文件 删除掉,改哪里呢
作者: qixiaobin0715    时间: 2022-9-27 14:09

太笼统了,没明白你的意思,删除文件夹不就是连文件一块都删除了吗?请举例说明。
作者: 朱科技    时间: 2022-9-27 14:15

回复 18# qixiaobin0715
算了,这是另一个问题了,重新开贴问




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