いつもお世話になっております。
先日C#でCPU使用率やメモリ使用量1分毎に表示しテキストファイルへ出力という質問をさせていただき。実現することができました。
しかし、そのプログラムを報告したら C#ではなく コマンドプロンプトやバッチで処理できないの?と言われました・・・
私の中ではそのプログラムをタスクスケジューラで毎日動かして24時間データを取る予定だったのですが
今回はC#ではなくコマンドやバッチで
・現在日時、CPU使用率、物理メモリ使用量、仮想メモリ使用量を1分毎にテキストファイルへ書込み
・24時間データを1分毎に取り続ける。テキストのファイル名は当日の日付です。
・毎日24時間分のデータを取って1ファイルずつ増えていくイメージです。
C#では以下のように書いてます。
using System; using System.Threading; using System.Diagnostics; using System.IO; namespace CodeRecipe_Timer_CS { class Program { static void Main(string[] args) { using (PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total", true)) { TimerCallback tDelegate = new TimerCallback(GetCpuUsage); using (Timer oTimer = new Timer(tDelegate, pc, 0, 60000)) { Thread.Sleep(734400000); } } Console.WriteLine("Timer を停止しました。終了するには何かキーを押してください。"); Console.Read(); } static void GetCpuUsage(object state) { string today = DateTime.Now.ToString("yyyyMMdd"); PerformanceCounter pc = state as PerformanceCounter; DateTime dtNow = DateTime.Now; System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess(); p.Refresh(); if (pc != null) { //Console.WriteLine(String.Format("現在のCPU使用率は {0:f}% です。" + dtNow.ToString(), pc.NextValue())); //Console.WriteLine("物理メモリ使用量: {0}", p.WorkingSet64); //Console.WriteLine("仮想メモリ使用量: {0}", p.VirtualMemorySize64); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format(dtNow.ToString() + " ")); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today +".txt", String.Format("現在のCPU使用率は {0:f}% です。", pc.NextValue())); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format(" 物理メモリ使用量: {0}", p.WorkingSet64)); File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV\" + today + ".txt", String.Format(" 仮想メモリ使用量: {0}", p.VirtualMemorySize64) + Environment.NewLine); } } } }
流れとしてはProcessor Time", "_Total"でCPUの使用率を取り出し
Timer oTimer = new Timer(tDelegate, pc, 0, 60000))
{
Thread.Sleep(734400000);
で60秒毎にデータを取るようにして24時間後に停止する
後半の
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today + ".txt", String.Format(dtNow.ToString() + " "));
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today +".txt", String.Format
("現在のCPU使用率は {0:f}% です。", pc.NextValue()));
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today + ".txt", String.Format(" 物理メモリ使用量: {0}", p.WorkingSet64));
File.AppendAllText(@"C:\検証用\検証データ\MLOG_RCV" + today + ".txt", String.Format(" 仮想メモリ使用量: {0}", p.VirtualMemorySize64) + Environment.NewLine);
では現在の日時、CPU使用率、物理メモリ使用量、仮想メモリ使用量などを書き込み改行
という処理をしています。
同じ動作を実現させるためにはどのようなコマンドを入力すればよいのでしょうか?
バッチやコマンドプロンプトを扱ったことがなく
検索した結果
ファイル名に日付を指定するバッチ?
@echo off echo %date% echo %time% set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% set filename=%yyyy%-%mm%%dd%-%hh%%mn%%ss% echo test >> log_%filename%.txt
C:\> typeperf -sc 1440 -si 60 "\Processor(_Total)\% Processor Time" > typeperf.txt
※1分(60秒)間隔で1日(1440回)実行する場合の記述
@echo off :label01 echo %date% %time% tasklist ping localhost -n 60 > nul goto label01
メモリの使用量を60秒間隔で実行するバッチ
ですが これらの組み合わせかたや使い方がよく分かりません。
どうかご教授お願い致します。

回答1件
あなたの回答
tips
プレビュー