2012-04-02 194 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