• 締切済み

typeperfコマンドを使用したバッチについて

とあるPCについて、CPU使用率とメモリ使用量を一定期間(例えば1時間、1日間など)監視するために、 typeperfコマンドを使った以下のようなバッチファイルを作成しました。 ----- 条件:  1. プロセス毎に監視したい  2 結果はcsv形式でファイルに出力したい  3. 監視開始後に起動したプロセスについても監視したい 対象OS:  Windows 7 バッチ記述内容: @ECHO OFF setlocal enabledelayedexpansion for /l %%i in (1,1,360) do ( set OUTDIR=C:\temp\ set YYYY=!DATE:~0,4! set MM=!DATE:~5,2! set DD=!DATE:~8,2! set HH=!TIME:~0,2! set MI=!TIME:~3,2! set SS=!TIME:~6,2! set FILENAME=!OUTDIR!log_!YYYY!!MM!!DD!!HH!!MI!!SS!.csv echo ファイル出力:!FILENAME! typeperf -sc 1 "\Processor(*)\%% Processor Time" "\Process(*)\Working Set" > !FILENAME! ping localhost -n 10 > nul ) pause 補足: 上記のバッチでは、typeperfコマンドは1回のみ実行し、 for文で10秒ごとに360回(=1時間)繰り返しています。 ちなみに、ゆくゆくは1日間程度監視したいと思っているので、 可能であれば1ファイルにまとめて出力したいです。 (上記の場合は、出力ファイル名を一意にするために「log_yyyymmddhhmmss.csv」にしていますが、 まとめられるのであれば何でもいいです) ----- 実行した結果、CSVは問題なく出力されるのですが、 出力されたCSVの末尾に「終了しています。お待ちください... コマンドは、正しく完了しました。」 というメッセージが付いてしまいます。 上記メッセージ以外の部分だけをファイルに出力することはできないのでしょうか? 一旦ファイルに出力してから、文字列置換するしかないのでしょうか? 何かいい方法があれば教えてください。

みんなの回答

回答No.3

あらまほしき方のご登場に感謝。 >find コマンドは4094より長い行を扱えない 知りませなんだ orz findstr は正規表現もOKなので使いでがありそうです。 (私が使いこなせるかは別問題ですけど (^_^;) ) ありがとうございました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

typeperf -sc 1 "\Processor(*)\%% Processor Time" "\Process(*)\Working Set" だと、プロセスが多いと非常に長い行が出来ますが、find コマンドは4094より長い行を扱えないので、findstrコマンドを代わりに使った方が良いでしょう。 それ以外は、No1さんの回答で良いと思います。

hoppemaru
質問者

お礼

回答ありがとうございます。 まだコマンドについての知識が少なく、また少ないデータ量で試してみていたので気付きませんでした。 ひとつ勉強になりました。 ありがとうございました。

回答No.1

typeperfコマンドについて全く知りませんでしたので試してみました。 下記のようにループの外に出して、 | find """" で、" を含む行だけ、 >> で追記書き込み ではどうでしょう? in (1,1,360) は長いので、in (1,1,5) にしてます。 ただし、メモ帳を立ち上げるなど、途中でプロセスの増減があると出力の列数も増減します。 CSVファイルとしては非常に扱いにくいものになってしまいました。 私からは、ここまでです。 あとは先達の方々のご登場に期待。 @ECHO OFF setlocal enabledelayedexpansion set OUTDIR=e:\tmp\ set YYYY=!DATE:~0,4! set MM=!DATE:~5,2! set DD=!DATE:~8,2! set HH=!TIME:~0,2! set MI=!TIME:~3,2! set SS=!TIME:~6,2! set FILENAME=!OUTDIR!log_!YYYY!!MM!!DD!!HH!!MI!!SS!.csv for /l %%i in (1,1,5) do ( echo ファイル出力:!FILENAME! typeperf -sc 1 "\Processor(*)\%% Processor Time" "\Process(*)\Working Set" | find """" >> !FILENAME! ping localhost -n 10 > nul ) pause

hoppemaru
質問者

お礼

回答ありがとうございます。 実際に試したところ、余分なメッセージ以外の部分をまとめることが出来ました。 > ただし、メモ帳を立ち上げるなど、途中でプロセスの増減 があると出力の列数も増減します。 > CSVファイルとしては非常に扱いにくいものになってしまいました。 確かにそうですね。。 「“プロセス毎”に監視して結果をファイルに出力する」という点については、 もう少し調査方法について検討してみます。

関連するQ&A