我现在有D,E两个分区,E盘里有个文件夹,我想在D盘下写一个批处理,运行后自动对比D盘的剩余空间和E盘那个文件夹大小,如果D盘剩余空间大于E盘那个文件夹1G,就自动执行1.BAT,否则就自动删除掉D盘上访问时间最早的1个文件夹,再对比,如果空间还不够就再删1个访问时间最早的文件夹,直到D盘剩余空间大于E盘那个文件夹1G为止,然后自动执行1.BAT
请问各位大大,这个命令怎么写啊?
请问各位大大,这个命令怎么写啊?
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
Originally posted by chkau at 2007-4-18 02:39 PM:
发现一个问题,在DOS下dir文件夹只能查看到该文件夹所含文件的总大小,看不到文件夹总大小,有什么方法解决吗?
dim q,fn,frD
Set q = CreateObject("Scripting.FileSystemObject")
set fn=q.getdrive("d:")
frD=fn.freespace/1024/1024/1024
dim fon,size
set fon=q.getfolder("F:\GHOST")
size=fon.size/1024/1024/1024
if frD>size and frD>1 then
dim ws
set ws=wscript.createobject("WScript.Shell")
ws.run "1.bat"
else
do until frD>size and frD>1
frD=fn.freespace/1024/1024/1024
set fon=q.getfolder("F:\GHOST")
size=fon.size/1024/1024/1024
set ws=wscript.createobject("WScript.Shell")
ws.run "cmd /c dir /od /ad /b d:\>folder.txt"
set file=q.opentextfile("folder.txt")
fil=file.readline
q.deletefolder "d:\"&fil,true
loop
end if
如果D盘剩余空间大于E盘那个文件夹1G
BJSH发表于: 2007-04-18 18:24
- @echo off & setlocal enabledelayedexpansion
- :loop
- rem 得到d盘的剩余空间
- for /f %%i in ('wmic LOGICALDISK where "name='d:'" get freespace ^|more +1') do set "d_free=%%i"
- rem 得到e盘某文件夹的大小
- for /f "tokens=3" %%a in ('dir e:\某文件夹 /s /a ^| find "个文件"') do set "file_size=%%a" && set "file_size=!file_size:,=!"
- rem 进行差值计算 (默认为剩余空间大于文件夹的大小;否则自行修改代码)
- set "x=%d_free%"
- set "y=%file_size%"
- set "result="
- set "flag="
- call :c
- rem 返回result 判断result是否大于1G
- set "x=%result%"
- set "y=1073741824"
- set "result="
- set "flag="
- call :c
- rem 返回值P等于-1说明小于1G;返回值P等于1说明大于1G
- if "%p%"=="1" 1.bat
- if "%p%"=="-1" goto clean
- :clean
- rem 获取访问时间
- for /f %%C in ('echo %date%') do set "today=%%C" && set "today=!today:-=!"
- set "small=%today%"
- pushd d:
- for /f "delims=" %%A in ('dir /ad-h/b') do set "folder=%%A" && CALL :f_time
- echo 访问时间最早的文件是 d:\%ear_folder% ;是否要删除 & pause
- rd /s /q d:\%ear_folder%
- goto loop
- goto exit
- :f_time
- for /f %%B in ('wmic fsdir where "name='d:\\%folder%'" get LastAccessed ^|more +1') do set "ear=%%B"
- if %ear:~0,8% lss %small% set "small=%ear:~0,8%" && set "ear_folder=%folder%"
- goto exit
- rem 计算函数
- :c
- if defined flag (set /a "next=%x:~-1%-1") else (set /a "next=%x:~-1%")
- set /a "last=%next%-%y:~-1%"
- set "t=%last%"
- if %last% geq 0 (set "flag=") else (set /a "last=10+%next%-%y:~-1%" & set "flag=flag")
- set "result=%last%%result%"
- set "x=%x:~0,-1%"
- set "y=%y:~0,-1%"
- if "%x%"=="" if not "%y%"=="" set /a "p=-1" & goto exit
- if "%x%"=="" if %t% lss 0 set /a "p=-1" & goto exit
- if "%y%"=="" if not "%x%"=="" set "y=0" && set /a "p=1"
- if "%y%"=="" if "%x%"=="" if %t% geq 0 set /a "p=1" && goto exit
- goto c
- :exit