2012-04-02 9 views
0

ハードディスクの空き容量が少なくなったときに通知する通知が必要です。私はWindows 7 Professionalを使用しています。クイックバッチファイルでこれを処理できると思います。私はそれを1日1回実行するようにスケジュールを設定します。これは今まで私が持っているものです:DOSバッチスクリプトで残りのハードディスク領域を確認する。 IF条件が動作しない

これは、 "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ギガバイト(私の仮説的なディスクスペースの床)である場合。もしそうなら、私はある時点で "lowSpace.txt"というファイルを作成します。 (これは私のためには機能しません)

if %Var1% leq 100000000000 dir > lowSpace.txt 

この "if"文が私に問題を引き起こしています。私の空きディスク容量は約150 GB(または150000000000)なので、if条件は失敗し、 "dir> lowSpace.txt"は実行されてはいけませんが、とにかく実行されます。

  • 私は500000000000から100000000000の声明「場合」私は期待どおり、ファイル「lowSpace.txt」が作成されます。中に定数を大きくした場合

  • また、定数を100000000000から500000000000に再増加させ、条件を "leq"から "geq"に変更すると、作成されないと予想されるときに "lowSpace.txt"というファイルが作成されます。

私の番号が間違っていますか?または、私の「if」声明に何か間違っていますか?このコードでは、150 GBを100 GB以上と100 GB未満の両方と見なしているようです。 100ギガバイトは、私の本当のハードディスクの空き容量の床ではないことを

@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% 

注:


は、ここに私の完全なスクリプトです。私は自分のコードをテストするためにその番号を使用しています。

答えて

4

この質問はWindows batch file IF failure - How can 30000000000000 equal 40000000000?で尋ねられました。あなたの問題は、Windowsバッチは〜2 GBを超える数を処理できないということです。 Ifは、2GBを超えるものを2GBとみなして扱います。 私は数値にゼロを接頭し、数値比較の代わりに文字列比較を強制する、単純な回避策を投稿しました。

注意、あなたはまた、任意のドライブの空き容量を取得するためにWMICを使用することができます。

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

自分の番号が大きすぎる可能性があることを認識していませんでした。私は別のルートをとって、1000で私の数を分割し、私のコードが働いた。ありがとう。 – user1214135

1

wmicコマンドは、時には使用できません。

ので、単一行に:

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

結果がbytesに変数%FREE_SPACE%です。

関連する問題