中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)定时清理磁盘的批处理中的空间判断
作者:
标题: (已结)定时清理磁盘的批处理中的空间判断 上一主题 | 下一主题
kaxuer
初级用户





积分 26
发帖 2
注册 2005-10-9
状态 离线
『楼 主』:  (已结)定时清理磁盘的批处理中的空间判断

我想做个批处理来定时检查我的c盘,如果剩余空间少于自定的大小时,批处理会自动提示或删除指定的文件,
:start
dir c: >dir.txt
findstr /c:"可用字节" dir.txt >temp.txt
FOR /F "tokens=3,4,5,6,8* delims=, " %%i in (temp.txt) do set /a %%i%%j%%k/1024 >p%%
rem 问题在这里,因为用if命令无法对9位数以上的数字比较,我把它除以1024后把结果输入到P%%里面,但在比较时不是%%i%%j%%k/1024 的结果,求高手指点错误在哪里,

if p%% lss 80000 del ***.*** else goto time1
:time1
@echo off
  setlocal enableextensions
  echo %time%
  call :ProcDelay 1000
  echo %time%
  goto :EOF

  :ProcDelay delayMSec_
  setlocal enableextensions
  for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
    :_procwaitloop
    for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k
    set /a diff_=%now_%-%start_%
  if %diff_% LSS %1 goto _procwaitloop
  endlocal & goto start
---------- Edited by willsort  ----------
修改原标题:批处理高手来帮帮我完成这个批处理啊
----------- Edited by willsort ----------


[ Last edited by willsort on 2005-10-11 at 19:45 ]

2005-10-10 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

Re kaxuer:

      在讨论具体的细节之前,我想先讨论一下程序的总体构思。在程序判断磁盘空间大小并做清理与不清理的选择后,它利用了 ProcDelay 延时模块等待10秒,然后继续判断。我认为除非有某个程序异常快速的侵占磁盘空间,否则这个时间就设定的过于短暂了,对于普通的应用每周或每半个月检测一次都是足够的,对于特殊的应用,也应保持在1天以上,否则这个程序将会耗费大量的CPU时间。

      至于程序中的错误在于混淆了环境变量与文本文件的概念,第三句将set /a的结果输出重定向到了文件p%中(尽管在批处理中set /a是没有任何输出结果的),第四句if却又将p%当作环境变量来直接引用其中的数字值,这对文本文件来说是无效的。

      所以建议做如下修改:
for /f "tokens=3,4,5,6,8* delims=, " %%i in (temp.txt) do set /a freesize=%%i%%j%%k/1024
if "%freesize%" lss "80000" del ***.*** else goto time1
[ Last edited by willsort on 2005-10-11 at 01:31 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-10-11 01:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kaxuer
初级用户





积分 26
发帖 2
注册 2005-10-9
状态 离线
『第 3 楼』:  

非常感谢willsort 大哥,我这段批处理搞了好久都没搞出来,经老大指点,正好问题解决,非常感谢willsort 老兄

2005-10-11 08:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 4 楼』:  

:to willsort
if "%freesize%" lss "80000" 与 if %freesize% lss 80000 的结果是不一样的。
请看一下下面两条语句的输出:
C:\>if 5000 LSS 800 echo ok

C:\>if "5000" LSS "800" echo ok
ok
所以认为 if %freesize% lss 80000 才应该是合乎要求的。

:to kaxuer
实在没有看出你的程序怎么退出,大于 80000 后为什么还要延时?

2005-10-11 22:59
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: