いまち、下記のコマンドの意味がわかりません。
>>%LFILE% は、リダイレクトでログに書くというのは分かるのですが、
2とか&1が何を表しているのかわかりません。
2>&1>> %LFILE%とは何をやっているのでしょうか。
echo パフォーマンスログスタート >> %LFILE%
logman start counter perflog 2>&1>> %LFILE%
「2>&1>>」で検索すると出てきますが、普通のメッセージとエラーメッセージを合体しています
http://www.ne.jp/asahi/hishidama/home/tech/windows/dos.html#redi...
stdoutとstderrの違いです
そのバッチファイルを呼んでいる親の部分を見るとヒントが隠されているかも。
%は置き換えだと思うので、
バッチファイル 引数 で検索
http://ykr414.com/dos/bat.html
、
バッチファイル 環境変数 で検索
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdat...
、
このあたりから探ってみては?
何かの参考となれば幸いです。
1は標準出力、2はエラー出力を表します。
例えば、標準出力に"hello stdout"、エラー出力に「hello stderr」と出力する以下のプログラムに対して
#include <stdio.h> int main() { fputs("hello stdout\n", stdout); fputs("hello stderr\n", stderr); return 0; }
コマンドプロンプトから以下の様に実行します。(イメージだけですのでコンパイル等は必要ないです)
C:\>foo hello stdout hello stderr
それぞれどちらに出力されたのかは目見るのは難しいです。標準出力(1)をファイル"log"に出力します。
C:\>foo 1> log hello stderr C:\>type log hello stdout
1を指定したので標準出力のみがファイルに出力され、エラー出力は画面に表示されました。また今度は
C:\>foo 2> log hello stdout C:\>type log hello stderr
2を指定したのでエラー出力のみがファイルに出力され、標準出力は画面に出力されました。今回の「2>&1」というのはエラー出力を標準出力と同じ出力先にするという意味になります。
C:\>foo > log 2>&1 C:\>type log hello stdout hello stderr
つまり、前任者の方はあるコマンドが出力する標準出力とエラー出力を両方同じファイルに出力しようとして書いた処理になります。実際には%LFILE%という環境変数LFINEで設定されたファイルになります。
ただ残念ながら、書かれておられる処理ではおそらく正しく動きません。"2>&1"は最初の">>%FLILE%"よりも後に置かれるべきです。
本来コメントに書く話ですが、コメントがつけられないみたいなのでこちらに。
2>&1>>%LFILE%
だと、標準出力のみをLFILEに出力して、標準エラーがもとの標準出力に出力されます(つまり標準エラーはファイルには出力されない)。
たぶん前任者は
>>%LFILE% 2>&1
ってやりたかったんじゃない?これだと標準出力も標準エラーもLFILEに出力されます。
コメント(0件)