トップ回答者
ディスク使用量が一定になるまでダミーファイルを作成するBAT

質問
-
監視テストの為にディスク使用量が一定になるまでダミーファイルを作成するBATファイルを作成したいです。
下記に要件を纏めます。
・Powershellが導入されてないサーバーがある為、BATファイルでないとだめ。VBも基本はNGだが、BATでは不可能な場合、調整次第で可能。
・一時的にサイズの大きいファイルを作成する事を作成する為に100MB程度のファイルを複数回に分けて作成したい。
・1つのファイルを作成した後はtimeoutでインターバルを置く
・ディスク使用量が一定になったら止めたい。「***.bat 80」(80%で止める場合)のようにコマンドプロンプト上から引数を渡してコマンドを実行したい。
・複数ドライブある場合は全てのディスク使用量が**%になったらという条件分岐にしたい。
BATに慣れてなく、ループさせる所で悩んでおりますが、アドバイスをお願いします。2015年12月17日 13:19
回答
-
batに慣れていないとの事なので、おそらく「ディスク使用量が一定になったら止めたい・・・」辺りをwmic等で解決する方法は、ご存知だと思われます。 その上で、単に100MB の空ファイルを作成するバッチは以下のように書きます。
@echo off REM ---------------------------------------------------------------------------- REM 引数で指定された数字MiBのダミーファイル(dummy.dmp)を作成する REM ex) make_dummy.bat 100 REM REM 100 MB作成するのに5分程度必要 REM ---------------------------------------------------------------------------- set TARGET_MB=%1 set /a TARGET_SIZE=%TARGET_MB%*1024*1024/128 set ONE_BLOCK=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 echo make a %TARGET_MB% MiB file IF EXIST dummy.dmp ( del /q dummy.dmp ) REM for /l %%i in ( 1, 1, %TARGET_SIZE% ) ^ do ^ echo %ONE_BLOCK% >> dummy.dmp REM echo %ONE_BLOCK% >> dummy.dmp
2016年1月12日 9:55 -
チャブーンです。
Yoshizawaさんもおっしゃっていますが、ゼロベースで全部作る、というのはやはり大変かと思います。仕方がないので基本動作の部分だけを実装したバッチを書いてみました。
@echo off setlocal for /f "usebackq delims== tokens=2" %%i in (`wmic logicaldisk where "DeviceID='C:'" get Size /format:value`) do set Size=%%i mkdir C:\sample :LOOP set /a Counter+=1 fsutil file createnew C:\Sample\sample%Counter%.bin 104857600 for /f "usebackq delims== tokens=2" %%i in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%i set FreeMB=%FreeSpace:~0,-6% set SizeMB=%Size:~0,-6% set /a Percent=100 * (SizeMB - FreeMB) / SizeMB echo 現在のディスク利用率は %Percent% パーセントです。
ping 127.0.0.1 -n 2 > nul IF %Percent% LSS 80 goto loop echo ディスク利用率がしきい値に到達しました。
したのようなページを参考にすることで、うまくできるようですね。
http://stackoverflow.com/questions/1788473/while-loop-in-batch
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
2016年1月13日 5:56
すべての返信
-
batに慣れていないとの事なので、おそらく「ディスク使用量が一定になったら止めたい・・・」辺りをwmic等で解決する方法は、ご存知だと思われます。 その上で、単に100MB の空ファイルを作成するバッチは以下のように書きます。
@echo off REM ---------------------------------------------------------------------------- REM 引数で指定された数字MiBのダミーファイル(dummy.dmp)を作成する REM ex) make_dummy.bat 100 REM REM 100 MB作成するのに5分程度必要 REM ---------------------------------------------------------------------------- set TARGET_MB=%1 set /a TARGET_SIZE=%TARGET_MB%*1024*1024/128 set ONE_BLOCK=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 echo make a %TARGET_MB% MiB file IF EXIST dummy.dmp ( del /q dummy.dmp ) REM for /l %%i in ( 1, 1, %TARGET_SIZE% ) ^ do ^ echo %ONE_BLOCK% >> dummy.dmp REM echo %ONE_BLOCK% >> dummy.dmp
2016年1月12日 9:55 -
チャブーンです。
Yoshizawaさんもおっしゃっていますが、ゼロベースで全部作る、というのはやはり大変かと思います。仕方がないので基本動作の部分だけを実装したバッチを書いてみました。
@echo off setlocal for /f "usebackq delims== tokens=2" %%i in (`wmic logicaldisk where "DeviceID='C:'" get Size /format:value`) do set Size=%%i mkdir C:\sample :LOOP set /a Counter+=1 fsutil file createnew C:\Sample\sample%Counter%.bin 104857600 for /f "usebackq delims== tokens=2" %%i in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%i set FreeMB=%FreeSpace:~0,-6% set SizeMB=%Size:~0,-6% set /a Percent=100 * (SizeMB - FreeMB) / SizeMB echo 現在のディスク利用率は %Percent% パーセントです。
ping 127.0.0.1 -n 2 > nul IF %Percent% LSS 80 goto loop echo ディスク利用率がしきい値に到達しました。
したのようなページを参考にすることで、うまくできるようですね。
http://stackoverflow.com/questions/1788473/while-loop-in-batch
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
2016年1月13日 5:56