• 締切済み

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% (4844/10253)
回答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

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • バッチ・ファイル中で時間をファイル名に使用したいです。

    いつもお世話になっております。 バッチ・ファイルを使用して、「netstat」コマンドの結果をファイルにリダイレクトし、そのファイル名に時間を使用したいです。 いま、使用しているファイルは、「バッチファイルA」と「バッチファイルB」の2つがあります。 「バッチファイルA」は0時~9時まで、「バッチファイルB」は10時~24時までとなっています。これを、1つのファイルにまとめたいのですが、よろしくご教示をいただけませんでしょうか。 --------------------------- @「バッチファイルA」(0時~9時) set TIME_A=%TIME% set TIME_B=%TIME_A:~1,4% set TIME_B=%TIME_B::=% set FILENAME=%TIME_B% netstat -s -e >C:\Temp\%FILENAME%.txt --------------------------- --------------------------- @「バッチファイルB」(10時~24時) set TIME_A=%TIME% set TIME_B=%TIME_A:~0,5% set TIME_B=%TIME_B::=% set FILENAME=%TIME_B% netstat -s -e >C:\Temp\%FILENAME%.txt ---------------------------

  • RMANのバッチ実行に関して

    RMANの不完全リカバリをバッチ化しようとしています。 サービスの起動や状態を確認するバッチ(oracle_restore.bat)内で リカバリを行うsqlファイル(oracke_restore.sql)を呼び出して、 実行しようとしています。 不完全リカバリの方法としては、時間を指定してリカバリを行うので、 rmanコマンドに、時間を引数として渡したいのですが、渡し方がわかりません。 バッチ実行時に oracle_restore.bat 2013-01-21 10:55:00 set RESTORE_TIME_YMD=%~1 set RESTORE_TIME_HMS=%~2 こんな感じで、引数を渡して rmanコマンドに rman target sys/pass @C:\oracle_restore.bat %RESTORE_TIME_YMD% %RESTORE_TIME_HMS% こんな感じで渡すことで、 set until time内に正しく時間を渡したいです。 SET UNTIL TIME "TO_DATE('%1','YYYY-MM-DD HH24:MI:SS')"; ↑sqlplusならこれで渡せたのですが。。。 なにか良い方法はありませんでしょうか。 ご教示願います。 OS:WindowsServer2008 R2 Oracle:oracleDB 11g R2

  • HP-UXのlsコマンドで日時書式を統一する方法

    一般的にUNIX系OSで ls -l コマンド実行した場合6ヶ月以上前に修正したファイルは、 時刻までは出力されません。 下記のような表示になってしまします。 # ls -l foo -rwxr-x--- 1 root root 3223 Nov 10 2004 foo このようなとき Linux だと 下記のようにlsコマドを実行するとファイルの修正日時に関わらず "YYYY/MM/DD HH:MI:SS"形式で表示してくれます。 ls -al --time-style=+'%Y/%m/%d %H:%M:%S' Solarisの場合でも ls -E コマンドを使えば、同じようなことができそうです。 しかし、HP-UXのlsコマンドの場合は、--time-style や -E オプションが使えません。 何か良い方法はないでしょうか? ls でなくとも ファイルのタイムスタンプが "YYYY/MM/DD HH:MI:SS"形式で取得できまれば、方法は問いません。

  • バッチファイルにおけるコマンドの引数

    バッチファイルの中で曜日判定で処理内容を変えたいのですが DOSコマンドのdateでは曜日を出力できませんでした。 そこで、Services for UNIX 3.5をインストールし、UNIXのdateコマンドを使って曜日判定をしようとしたのですが、以下のようにエラーに なってしまいます。 ===バッチの中身== rem 曜日判定 set wk=c:\SFU\bin\date +%a IF %wk% EQU "日” call batch_1.bat  ・・・ ・・・ ====== 上記をコマンドプロンプトで実行しますと date: illegal time format usage: date [-u] [-r seconds] [+format] date [-u] -t [[[[[CC]yy]mm]dd]HH]MM[.SS] [+format] date [-u] [+format] mmddHHMM[yy] +aの使い方が誤っています。 ※ちなみコマンド単体で実行すると正常です。 c:\SFU\bin\date +%a 水

  • MS-DOSでの日付表示

    MS-DOSコマンドで、日付や時刻の%date% %time%ですと、 yyyy/mm/dd hh:mm:ssの表示になります。 バッチファイルを作成して、フォルダ名の頭に日付時刻をつけたいんですが、 yyyymmdd hhmmss の表示形式にする方法が分かりません。 よろしかったら教えて頂けませんでしょうか。

  • windowsバッチファイル ファイル移動

    windows2012R2で下記のようなバッチファイルを作成しました。 --------------- Set YYYY=%Date:~0,4% Set MM=%Date:~5,2% Set DD=%Date:~8,2% Set File=%YYYY%%MM%%DD% mkdir G:\bbb\xx1_%File% move G:\aaa\ttttt* G:\bbb\xx1_%File% --------------- としてもフォルダは作成されておりましたが、tttttから始まるファイル名が移動されてませんでした。 MS-DOSで move G:\aaa\ttttt* G:\bbb\xx1_20141110 とコマンドしたら、移動できたのですが。。。 どなたかお分かりの方がおりましたら、お願い致します。

  • バッチファイルを使用したsql@plusの実行及びログ出力について

    バッチファイルを使用したsql@plusの実行及びログ出力について Windows Server 2003上で動作しているOracle10gのDBに対して Windows XP上に配置したバッチファイルをタスクで起動させ、 sql@plusを使用してデータを削除する処理を行いたいと考えています。 ---data_delete.bat--- @echo %date% %time% データ削除開始 >> log.txt sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt @echo %date% %time% データ削除終了 >> log.txt ---data_delete.sql--- DELETE FROM TABLE WHERE FLG = 1; EXIT; data_delete.batを実行するとlog.txtが出力されます。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 XXX行が削除されました。 yyyy/mm/dd hh:nn:ss.xx データ削除終了 この時、log.txtの内容を下記のように変更したいのですが、 その方法が分りません。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。 できれば[削除件数 XXX 件]と表示させたかったのですが、 自分の調べた限りではできそうにないので、 フィードバックされる文字列をそのまま使う方向で進めています。 上記ログの出力方法ができるようでしたら、 その方法を教えて頂けると嬉しいです。 宜しくお願いします。

  • ファイル名を今日の日付、時刻で保存する

    マクロについて教えてください エクセル(2003?)でマクロを使って ファイルを保存するボタンをつくろうと思います。 「ファイル名を今の月-日-時-分で保存する」 という内容を書きたいと思います。 保存するところまではできるのですが、 今日の月-日-時-分を自動的にファイル名に入れる ところをどうしたらよいかわかりません。 Filename = Format(Date, "yyyy-mm-dd") と入れれば日付が入るのはわかったのですが、 時刻も入れたいです Filename = Format(Date,"yyyy-mm-dd",Time,"hh-mm-ss") こんな風に書いてみたのですが、うまく機能しませんでした ご存知の方、ご教授ください。