Board logo

标题: 100元悬赏,判断磁盘空间大小,删除文件 [打印本页]

作者: zhouzzl    时间: 2021-10-17 23:01     标题: 100元悬赏,判断磁盘空间大小,删除文件

本帖最后由 zhouzzl 于 2021-10-17 23:03 编辑

判断当前磁盘空间大小。 如果当前磁盘空间少于300G。
则删除当前磁盘指定文件夹内的一个*.plot 文件,直到指定目录没有plot 文件可删,则停止运行。(磁盘空间一直在增加大概40分钟增加100G)

要达到程序运行监控效果。
作者: hlzj88    时间: 2021-10-18 00:16

本帖最后由 hlzj88 于 2021-10-18 00:53 编辑
  1. @echo off
  2. mode con cols=32 lines=7
  3. set lj=%~d0
  4. for /f "tokens=3" %%j in ('dir %lj% ^|find "可用字节"') do (
  5.   set /a dx=%%j/1073741824
  6.   echo %lj%盘空间剩余 约%dx%G
  7.   )
  8. if %dx% lss 300 (echo del /q %lj%\路径\*.plot) else (echo 不执行删除任务)
  9. echo 19分钟循环监控
  10. ping /n 1140 127.1>nul
  11. %0
  12. pause
复制代码

作者: zaqmlp    时间: 2021-10-18 01:33

本帖最后由 zaqmlp 于 2021-10-18 10:02 编辑
  1. @echo off&cd /d "%~dp0"&mode con cols=50 lines=15&rem 编码ANSI
  2. set "plot_path=E:\xxx\指定文件夹\*.plot"
  3. set min_space=300
  4. set sleep=2400
  5. (echo;Set wmi=GetObject^("winmgmts://./root/CIMV2"^)
  6. echo;Set query=wmi.ExecQuery^("SELECT * FROM Win32_LogicalDisk Where Name='%~d0'"^)
  7. echo;For Each it In query
  8. echo;    WSH.echo it.FreeSpace/^(1024*1024*1024^)
  9. echo;Next
  10. echo;WSH.Quit)>"%tmp%\v.txt"
  11. :loop
  12. cls&echo;当前分区 %~d0
  13. for /f "delims=." %%a in ('cscript -nologo -e:vbscript "%tmp%\v.txt"') do set freespace=%%a
  14. echo;剩余%freespace% GB
  15. if %freespace% lss %min_space% (
  16.     echo;空间不足,删文件
  17.     for /f "delims=" %%a in ('dir /a-d/b/s "%plot_path%"') do (
  18.         echo;"%%a"
  19.         del /a /f /q "%%a"
  20.         goto break
  21.     )
  22. )
  23. :break
  24. echo;暂停%sleep%秒后重检……
  25. >nul ping /n %sleep% 0
  26. goto loop
  27. pause
  28. exit
复制代码

作者: zhouzzl    时间: 2021-10-18 08:00

本帖最后由 zhouzzl 于 2021-10-18 08:02 编辑
zaqmlp 发表于 2021-10-18 01:33



    不是1个一个删。
运行就一次性删除了。又返回去判断

要一个一个删除。   空间少于300G  就删除一个plot  。然后过40分钟再来判断。  只能这样了。 不然就一次性全部删除了。
作者: zhouzzl    时间: 2021-10-18 08:27

回复 2# hlzj88


    也会造成,全部删除。
要判断一次,只删除1个。 然后过40分钟再监控。

是不是批处理无法实现啊
作者: zaqmlp    时间: 2021-10-18 09:54

回复 4# zhouzzl

已修改
作者: 523066680    时间: 2021-10-18 10:02

本帖最后由 523066680 于 2021-10-18 10:10 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set driver="E:"
  4. set folder="E:\plotfiles"
  5. set GB300=322122547200
  6. set  mask=0000000000000000
  7. set limit=%mask%%GB300%
  8. set /a minutes=10, f_times=minutes*60/10
  9. :loop
  10. for /f "tokens=3" %%d in ('dir /-C %driver% ^|find "可用字节"') do (set free=%mask%%%d)
  11. rem echo %free:~-16%
  12. rem echo %limit:~-16%
  13. if %free:~-16% lss %limit:~-16% (
  14.     echo !free:%mask%=! 小于
  15.     echo !GB300!,将尝试删除一个 .plot 文件
  16.     echo,
  17.     call :remove_one %folder%
  18. ) else (
  19.     echo !free:%mask%=! ^> !GB300!, 目前大于300GB
  20. )
  21. rem 每10秒打一个点作为进度显示
  22. echo 等待 %minutes% 分钟:
  23. for /l %%a in (1,1,%f_times%) do (ping /n 10 127.0.0.1>nul&set /p s=.<nul)
  24. echo,
  25. goto :loop
  26. exit /b
  27. :remove_one
  28. set flag=0
  29. for /f "tokens=*" %%a in ('dir /s /b %~1\*.plot') do (
  30.     set flag=1
  31.     echo 删除的文件:"%%a"
  32.     echo,
  33.     del /f /a "%%a"
  34.     goto :eof
  35. )
  36. set /p s=没有找到plot文件,按任意键结束<nul
  37. if %flag%==0 (pause>nul&exit)
复制代码

作者: hlzj88    时间: 2021-10-18 12:46

回复 5# zhouzzl

删除一个是可以实现的。取建立时间最早的那个就可以。但是可能的情况是,产生的文件过大,空间会一直小于300G,每40分钟删一个,可能会慢慢填满300G空间。
当然你的要求是删一个。

上班太忙,一直没有上网。其他几位大佬的代码已经可以完美解决问题。
作者: zhouzzl    时间: 2021-10-18 13:02

523066680 发表于 2021-10-18 10:02



    老大,测试完美运行。只是等待10分钟, 我在测试一下。
微信或支付宝二维码传一下。
作者: zhouzzl    时间: 2021-10-18 13:15

回复 3# zaqmlp


    你和版主老大,都可以运行啊。   要么,你和版主每人发50元红包吧。 本论坛太火热了。
作者: zaqmlp    时间: 2021-10-18 13:28

回复 11# zhouzzl

可以,扫图像即可
作者: 523066680    时间: 2021-10-18 18:53

本帖最后由 523066680 于 2021-10-18 20:03 编辑

回复 11# zhouzzl


    可以,二维码在签名处

2021-10-18 20:03 已收到,tks




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