标题: 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 编辑
- @echo off
- mode con cols=32 lines=7
- set lj=%~d0
- for /f "tokens=3" %%j in ('dir %lj% ^|find "可用字节"') do (
- set /a dx=%%j/1073741824
- echo %lj%盘空间剩余 约%dx%G
- )
- if %dx% lss 300 (echo del /q %lj%\路径\*.plot) else (echo 不执行删除任务)
- echo 19分钟循环监控
- ping /n 1140 127.1>nul
- %0
- pause
复制代码
作者: zaqmlp 时间: 2021-10-18 01:33
本帖最后由 zaqmlp 于 2021-10-18 10:02 编辑
- @echo off&cd /d "%~dp0"&mode con cols=50 lines=15&rem 编码ANSI
-
- set "plot_path=E:\xxx\指定文件夹\*.plot"
- set min_space=300
- set sleep=2400
-
- (echo;Set wmi=GetObject^("winmgmts://./root/CIMV2"^)
- echo;Set query=wmi.ExecQuery^("SELECT * FROM Win32_LogicalDisk Where Name='%~d0'"^)
- echo;For Each it In query
- echo; WSH.echo it.FreeSpace/^(1024*1024*1024^)
- echo;Next
- echo;WSH.Quit)>"%tmp%\v.txt"
- :loop
- cls&echo;当前分区 %~d0
- for /f "delims=." %%a in ('cscript -nologo -e:vbscript "%tmp%\v.txt"') do set freespace=%%a
- echo;剩余%freespace% GB
- if %freespace% lss %min_space% (
- echo;空间不足,删文件
- for /f "delims=" %%a in ('dir /a-d/b/s "%plot_path%"') do (
- echo;"%%a"
- del /a /f /q "%%a"
- goto break
- )
- )
- :break
- echo;暂停%sleep%秒后重检……
- >nul ping /n %sleep% 0
- goto loop
-
- pause
- 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 编辑
- @echo off
- setlocal enabledelayedexpansion
- set driver="E:"
- set folder="E:\plotfiles"
- set GB300=322122547200
- set mask=0000000000000000
- set limit=%mask%%GB300%
- set /a minutes=10, f_times=minutes*60/10
-
- :loop
- for /f "tokens=3" %%d in ('dir /-C %driver% ^|find "可用字节"') do (set free=%mask%%%d)
- rem echo %free:~-16%
- rem echo %limit:~-16%
- if %free:~-16% lss %limit:~-16% (
- echo !free:%mask%=! 小于
- echo !GB300!,将尝试删除一个 .plot 文件
- echo,
- call :remove_one %folder%
- ) else (
- echo !free:%mask%=! ^> !GB300!, 目前大于300GB
- )
-
- rem 每10秒打一个点作为进度显示
- echo 等待 %minutes% 分钟:
- for /l %%a in (1,1,%f_times%) do (ping /n 10 127.0.0.1>nul&set /p s=.<nul)
- echo,
- goto :loop
- exit /b
-
- :remove_one
- set flag=0
- for /f "tokens=*" %%a in ('dir /s /b %~1\*.plot') do (
- set flag=1
- echo 删除的文件:"%%a"
- echo,
- del /f /a "%%a"
- goto :eof
- )
-
- set /p s=没有找到plot文件,按任意键结束<nul
- 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 |