2012-02-01 143 views
0

我必須編寫一個腳本來檢查驅動器中是否有足夠的空間。 我寫道:批處理文件比較數字

@echo off 
set gbsize = 1,073,741,824 
Set gbsize=%gbsize:,=% 
for /f "tokens=3" %%a in ('dir c:\') do (
    set /a bytesfree=%%a 
) 
set bytesfree=%bytesfree:,=% 
endlocal && set bytesfree=%bytesfree% 

If %gbsize% gtr %bytesfree% echo hi 

但是當腳本拋出錯誤: 號碼無效。數字常量是十進制(17), 十六進制(0x11)或八進制(021)。

我錯過了什麼?誰能幫忙? 謝謝!

回答

4

當你的值有逗號時,你的直接問題是試圖使用SET/A。

您還需要在定義gbsize之前和之後刪除空格。

我不明白你爲什麼沒有SETLOCAL

有ENDLOCAL我相信這是你要找的人。如果少於1GB的空閒空間,它會回顯「hi」。

@echo off 
setlocal 
set gbsize=1,073,741,824 
Set gbsize=%gbsize:,=% 
for /f "tokens=3" %%a in ('dir c:\') do set bytesfree=%%a 
set bytesfree=%bytesfree:,=% 
If %gbsize% gtr %bytesfree% echo hi 

另一個更直接的(也可能是更準確?)的方式來獲得免費的空間

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

首先,您的幫助謝謝!另外,我想編寫腳本來找到具有最大可用空間的卷,並將文件複製到他,你能幫我做到嗎? – RRR 2012-02-01 14:30:32

+0

@RRR - 我在你的[後續問題](http://stackoverflow.com/q/9099138/1012053)上回答了這個問題, – dbenham 2012-02-01 16:51:27