[解決済み] コマンドライン出力の抑制
質問
以下のような簡単なバッチファイルがあります。
エコーオフ タスクキル /im "test.exe" /f > nul ポーズ
"test.exe"が起動していないと、このメッセージが表示されます。
ERROR: プロセス "test.exe" が見つかりませんでした。
出力を NUL にリダイレクトしたのに、なぜこのエラーメッセージが表示されるのですか?
どうすればこの出力を抑止できますか?
どのように解決するのですか?
エラーメッセージはしばしば
stderr
ではなく
stdout
.
呼び出しをこれに変更します。
taskkill /im "test.exe" /f >nul 2>&1
で、すべてがよくなる。
これがうまくいくのは
stdout
はファイル記述子1であり
stderr
はファイルディスクリプタ2です。(0は
stdin
です)。その
2>&1
は出力ファイル記述子 2 を新しい値 1 からコピーしますが、これはちょうど null デバイスにリダイレクトされたところです。
この構文は多くの Unix シェルから(緩やかに)借用したものですが、シェルの構文と CMD.EXE の間には微妙な違いがあるため、注意が必要です。
更新しました。
という名前の"file"の特殊性をOPが理解していることは知っています。
NUL
というファイルの特殊性を理解していることは知っていますが、コメントした人は理解していなかったので、その点についてもう少し詳しく脱線します。
MSDOS の初期のリリースまでさかのぼると、特定のファイル名がファイル システム カーネルによって先取りされ、デバイスを参照するために使用されていました。これらの名前の最も古いリストには
NUL
,
PRN
,
CON
,
AUX
と
COM1
を通して
COM4
.
NUL
はヌルデバイスです。これは常に読み取りまたは書き込みのために開くことができ、任意の量を書き込むことができ、読み取りは常に成功しますが、データは返されません。その他に、パラレルプリンタポート、コンソール、最大4つのシリアルポートがあります。MSDOS 5の時点では、さらにいくつかの予約名がありましたが、基本的な規約は非常によく確立されています。
Windows が作成されたとき、MSDOS カーネルの上にかなり薄いアプリケーション切り替えレイヤーとしてスタートし、したがって同じファイル名の制約がありました。Windows NT がそれ自体で真のオペレーティング システムとして作成されたとき、次のような名前が使用されました。
NUL
と
COM1
が機能するとあまりにも広く仮定されていたため、それらの削除を許可しました。しかし、新しいデバイスが常に、実際のファイルに対してその名前を使用する将来のユーザーをブロックするような名前を取得するという考えは、明らかに不合理です。
Windows NT とそれに続くすべてのバージョン (2K、XP、7、そして現在は 8) では、より精巧な
NT 名前空間
を使用し、カーネル コードから、慎重に構築された移植性の低いユーザー空間コードまでをカバーします。この名前空間では、デバイス ドライバは
\Device
フォルダーを通して見ることができます。要求される後方互換性をサポートするために、デバイスドライバは
\DosDevices
フォルダを使用した特別なメカニズムがあり、任意のファイルシステムフォルダで予約されたファイル名のリストを実装しています。ユーザー コードは、通常の Win32 API の下の API レイヤーを使用してこの内部名前空間を参照することができます。
WinObj
で、Microsoft の SysInternals グループから提供されています。
Windows におけるファイル (およびデバイス) の正式な名前を取り巻くルールの完全な説明については、こちらを参照してください。 MSDN のこのページ は、有益であると同時に困難なものです。このルールは ロット のような簡単な質問に答えることは実際不可能です。
関連
-
[解決済み] エラーです。"内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されていません"
-
[解決済み] Raspberry Piにリモートでファイルを転送し、再起動させる自動スクリプトを実行してみる
-
[解決済み] WindowsのCMDで1行に2つのコマンドを実行するにはどうしたらいいですか?
-
[解決済み] Windowsのコマンドラインでコマンドの実行時間を測定するにはどうすればよいですか?
-
[解決済み】バッチファイルから空のテキストファイルを作成する方法は?
-
[解決済み】Windowsのバッチファイルのコマンドを非同期で実行する
-
[解決済み] BATファイルです。新しいcmdウィンドウを開き、その中でコマンドを実行する。
-
[解決済み] バッチファイル内でファイルの内容を変数に読み込むには?
-
[解決済み] Windows コマンドインタプリタ(CMD.EXE)は、どのようにスクリプトを解析するのですか?
-
[解決済み] Batch File; List files in directory, only filenames?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ロボコピーが無効なパラメータ#3
-
[解決済み] バッチ中の "カウンター"
-
[解決済み] 非常に基本的なバッチ式自己複製コード:どのくらい危険か?
-
[解決済み] ファイルを別の場所にコピーするためのバッチファイル?
-
[解決済み] Windowsのバッチファイルから長いコマンドを複数行に分割する
-
[解決済み] cURLの出力をファイルに取り込むには?
-
[解決済み】MSバッチファイルを使用して、プログラムの出力を変数に割り当てる
-
[解決済み】not-equal(inequality)演算子の一括処理について
-
[解決済み] バッチスクリプトで待つには?[重複しています]
-
[解決済み] MS-DOS バッチファイル Enterキーで一時停止