1

次のようにして、stdoutとstderrを同じファイルにリダイレクトしようとしています:

dir c:\*.mp3 c:\*.mpa c:\*.asf c:\*.avi c:\*.flv c:\*.mov c:\*.mp4 c:\*.mpg c:\*.swf c:\*.vob c:\*.wmv /s/b > out.file.nlm.txt 2>&1

これは機能しません-ファイルに「ファイルが見つかりません」というエラーが表示されません-しかし、次のような複数のステートメントに分割すると:

dir c:\*.mp3 /s/b> out.file.nlm.txt 2>&1
dir c:\*.mpa /s/b >> out.file.nlm.txt 2>&1
dir c:\*.asf /s/b >> out.file.nlm.txt 2>&1

それは正常に動作します。どうすればそれを 1 つのステートメントにまとめることができますか?

4

2 に答える 2

1

存在しないため、元のステートメントで「ファイルが見つかりません」をキャプチャしていません:-)

DIR コマンドは、デフォルトで各ファイル マスクの結果を個別に一覧表示しますが、「ファイルが見つかりません」というメッセージは、マスクのいずれにもファイルが見つからない場合にのみ発生します。

並べ替えオプションを適用すると、より直感的/ONになり、複数の拡張子が混在します。最終的なエラー状態とエラー メッセージが累積結果に適用されることは明らかです。

どの拡張機能が存在しないかを示すメッセージが必要な場合は、これまで行ってきたように、複数の DIR コマンドに分割することをお勧めします。Andriy は、コマンドを括弧で囲む方法を示しているため、リダイレクトは 1 回だけで済みます。

于 2013-02-25T12:22:31.450 に答える
0

dirコマンドを括弧付きブロックで囲み、ブロック全体にリダイレクトを適用できます。

(
dir c:\*.mp3 /s/b
dir c:\*.mpa /s/b
dir c:\*.asf /s/b
) > out.file.nlm.txt 2>&1

コマンド プロンプトでは、コマンドを&sで区切って同じ行に配置できます。

(dir c:\*.mp3 /s/b & dir c:\*.mpa /s/b & dir c:\*.asf /s/b) >out.file.nlm.txt 2>&1
于 2013-02-25T11:36:35.650 に答える