2012-04-02 195 views
0

我想告诉我什么时候硬盘空间不足。我正在运行Windows 7 Professional,我认为一个快速批处理文件可以处理这个问题。我会安排它每天运行一次。这是我到目前为止:在DOS批处理脚本中检查剩余硬盘空间。如果条件不起作用

这使用“dir”命令和“find”命令查找剩余的磁盘空间。它将值存储在Var1中。 (这适用于我)

@echo off 
FOR /F "tokens=*" %%i in ('dir ^| find "free"') do SET WinVer=%%i 
FOR /F "tokens=1-3 delims=]-" %%A IN ("%WinVer%") DO ( 
SET Var1=%%A 
) 

这会从结果中拉出数字并删除逗号。结果会像“111222333444”不带引号(这为我的作品)

set Var1=%Var1:~10,15% 
set Var1=%Var1:,=% 

此检查在VAR1值小于100 GB(我假设的磁盘空间地板)。如果是这样,它会创建一个名为“lowSpace.txt”的文件,我会在某个时候看到。 (这对我不起作用)

if %Var1% leq 100000000000 dir > lowSpace.txt 

这个“if”语句导致我的问题。我的可用磁盘空间大约为150 GB(或150000000000),因此if条件应该失败,并且“dir> lowSpace.txt”不应该在运行,但它无论如何都是。

  • 如果我增加在“if”语句从千亿向5000亿,在文件被创建“lowSpace.txt”恒如我所料。

  • 或者,如果我再次将常量从100000000000增加到500000000000,并将条件从“leq”更改为“geq”,则会创建文件“lowSpace.txt”,当我期望它不会被创建时。

我是不是比较我的号码错了?或者我的“if”陈述有问题?该代码似乎认为150 GB大于和小于100 GB。


这里是我完整的脚本:

@echo off 
FOR /F "tokens=*" %%i in ('dir ^| find "free"') do SET WinVer=%%i 
FOR /F "tokens=1-3 delims=]-" %%A IN ("%WinVer%") DO ( 
SET Var1=%%A 
) 
set Var1=%Var1:~10,15% 
set Var1=%Var1:,=% 

if %Var1% leq 100000000000 dir > lowSpace.txt 
@echo on 
@echo %Var1% 

注意,100 GB是不是我真正的硬盘空间地板。我只是用这个数字来测试我的代码。

回答

4

我问,并在Windows batch file IF failure - How can 30000000000000 equal 40000000000?回答了这个问题。您的问题是Windows批处理无法处理大于〜2 GB的数字。如果将大于2 GB的任何数字视为等于2 GB。 我发布了一个简单的工作,用零作为数字前缀,强制字符串比较而不是数字比较。

请注意,您还可以使用WMIC得到任何给定的驱动器的可用空间:

for /f "tokens=2" %%S in ('wmic volume get DriveLetter^, FreeSpace ^| findstr "^C:"') do set freeSpace=%%S 
+0

我没有意识到我的电话号码可能太大。我采取了另一条路线,并将我的数字除以1000,我的代码工作。谢谢。 – user1214135 2012-04-02 16:43:28

1

wmic命令有时是不可用的。

所以,在一个单行:

for /F "tokens=8" %%? in ('fsutil volume diskfree C:') do set FREE_SPACE=%%? 

结果是可变%FREE_SPACE%bytes