• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FOR文ないでの判定処理)

FOR文を使った判定処理がうまくいかない

このQ&Aのポイント
  • FOR文を使って、テキストファイルから値を取り出し、ある値と比較して条件判定をしたいが、うまくいかない。
  • 具体的には、指定したファイルから値を取り出し、その値が20000より大きければエラーメッセージを表示する処理を行いたい。
  • しかし、上記のコードでは期待した動作を行ってくれない。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

環境変数の参照%MEMORY%は、バッチの実行前に展開されてしまいます。 こういうケースでは遅延展開という方法を使います。 おまじないとして、最初に setlocal EnableDelayedExpansion と書いておいて、 %MEMORY% を !MEMORY! に変えればできると思います。 質問文のケースでは、 setlocal EnableDelayedExpansion FOR /F "eol=; tokens=3 delims=, " %%j in (C:\PerfLogs\memory_02071801.csv) do ( set MEMORY=%%j set MEMORY=!MEMORY:~1,6! rem 値が20000がより大きい場合はエラーメッセージを表示する。 if !MEMORY! GTR 20000 net send %COMPUTERNAME% %ERRTXT% ) とすればいけるのではないでしょうか。

参考URL:
http://www.fpcu.jp/dosvcmd/bbs/log/cat3/for_in_do/4-0333.html
hidesbizar
質問者

お礼

ham_kamoさんありがとう御座います。 上記の指摘どおりに変更したところ正常に稼動してくれました。 次回に生かしたいと思います。 話は変わってしまうのですが、 FOR文にて読み込んでいる(C:\PerfLogs\memory_02071801.csv)が 他のプロセスにて使用されているときにアクセスする事は可能でしょうか。 実はWindows既存のパフォーマンスのカウンタログで、メモリー状況を出力させて、 バッチにて一定間隔で監視させる設定を行いたいのですが難しいですかね・・・。 何かオプションで回避できるものがあればいいのですが・・。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.1です。 同じようにパフォーマンスログを出力させていろいろためしてみました。その結果、 cd \PerfLogs Copy Test_02081714.csv MemoryLog.txt で普通にコピーできました。なので、ワンクッション置いて、バッチの中でいったんコピーして、コピーしたファイルをFOR文で使用すればいいのではないでしょうか。

hidesbizar
質問者

お礼

上記方法にて解決いたしました。 hidesbizarさん回答ありがとう御座いました。

すると、全ての回答が全文表示されます。
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。一部訂正。 > 環境変数の参照%MEMORY%は、バッチの実行前に展開されてしまいます。 →構文解析時に展開されてしまいます。 の誤りでした。FOR文が実行される前に()の中が解析され、そこでMEMORYの値が確定してしまう、という意味です。

すると、全ての回答が全文表示されます。

関連するQ&A