locked
ディスク使用量が一定になるまでダミーファイルを作成するBAT RRS feed

  • 質問

  • 監視テストの為にディスク使用量が一定になるまでダミーファイルを作成する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:56
    • 回答の候補に設定 佐伯玲 2016年1月13日 1:33
    • 回答としてマーク 佐伯玲 2016年1月21日 8:39
    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/2539262/how-to-find-the-percentage-of-free-space-for-mapped-drives

    http://stackoverflow.com/questions/1788473/while-loop-in-batch


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2016年1月13日 5:56

すべての返信

  • 何か (途中まででも) 作成されているものがあるのであれば、そのコードを出してみることで 「ここをこうしたらいいかも」 的な返信が付きやすいかもしれないですね。まるまる提示するのはなかなか大変だったりしますので。
    2015年12月20日 6:22
  • 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:56
    • 回答の候補に設定 佐伯玲 2016年1月13日 1:33
    • 回答としてマーク 佐伯玲 2016年1月21日 8:39
    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/2539262/how-to-find-the-percentage-of-free-space-for-mapped-drives

    http://stackoverflow.com/questions/1788473/while-loop-in-batch


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。


    2016年1月13日 5:56