Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

バッチ処理 (Batch Scripts)

バッチで見る「2>&1」の意味とリダイレクトの種類について

投稿日:2021年1月28日 更新日:

<目次>

(1) バッチで見る「2>&1」の意味とリダイレクトの種類について
 (1-1) 「2>&1」の意味
 (1-2) 「2>&1」の各文字の意味
 (1-3) リダイレクトの種類
 (1-4) サンプルプログラム

(1) バッチで見る「2>&1」の意味とリダイレクトの種類について

(1-1) 「2>&1」の意味

本日はWindowsのバッチで見かける「2>&1」の意味や使い方についてご紹介します。

結論から申しますと、この記述は『「エラー出力」を「標準出力」にリダイレクトする』という処理になります。つまり、「標準エラー出力」に出たエラーメッセージを「標準出力」に転送するようなイメージになります。

1つ例を見てみます。次のバッチはまずコマンド「cd C:\NotExistingPath」が実行されますが、このパスは存在しないので「指定されたパスが見つかりません。」というエラーになります(図①)。次に「2>&1」が登場して「標準エラー出力」を「標準出力」にリダイレクトしています(図②)。加えて、もう一回リダイレクトをしていて「>」の働きにより「標準出力」を「Result.txt」というテキストファイルにリダイレクトしています。

(例)

@echo off
echo ###Test0:
cd C:\NotExistingPath > Result.txt 2>&1

この2つのリダイレクトを連結する事で、結果的に「標準エラー出力」⇒「標準出力」⇒「テキスト」とリレーで連携した事になります。

(図111)

目次にもどる

(1-2) 「2>&1」の各文字の意味

まず「>」が「リダイレクト」を意味する記号になります。[左辺] > [右辺]で、左辺のコマンド/変数の結果を右辺にリダイレクトするという意味になります。

「2」は「標準エラー出力」を表しており、「1」は「標準出力」を表しています。また1の前の「&」はリダイレクトを複数組み合わせる場合に1の前に付ける記号になります(お作法)。

目次にもどる

(1-3) リダイレクトの種類

ここまでの情報を踏まえると、リダイレクトの「左辺」と「右辺」の指定の仕方によっては、リダイレクトの「リダイレクト元」と「リダイレクト先」の組み合わせでいくつかパターンがあるのでは?と思われると思います。代表的なパターンを以下にまとめています。

(表)リダイレクトの種類

[左辺] > [右辺] 左辺(コマンドや変数)を右辺(テキストや「nul」など)にリダイレクト(転送)します。
————-
(例)
echo %[何かの変数]% > output.txt
[左辺] 1> [右辺] 「標準出力」(コマンドの実行結果)を右辺(テキストや「nul」など)をリダイレクトします。
————-
「標準出力」はコマンドの結果が出力されているので、結果的に「[左辺] > [右辺]」と同じ結果になります。

(例)
echo %[何かの変数]% 1> output.txt

[左辺] 2> [右辺] 「エラー出力」を右辺(テキストや「nul」など)をリダイレクトします。
————-
下記の例では通常なら「指定されたパスが見つかりません。」とエラーが出力される所を、下記でnulにリダイレクトしているため、何も表示されません。

(例)
cd C:\[存在しないファイルパス] 2> nul

[左辺] 1> [右辺] 2>&1
or
[左辺] > [右辺] 2>&1
リダイレクトを2つ組み合わせています。組み合わせる場合は、後に記載する方は「>&」と記述します。

(前半:2>&1)
「エラー出力」を「標準出力」にリダイレクトします。

(後半:[左辺] 1> [右辺])
「標準出力」を右辺(テキストや「nul」など)にリダイレクト。

つまり、「エラー出力」⇒「標準出力」⇒「右辺」とリダイレクトしており、結果的には「標準出力」を中継ぎとして、「エラー出力」⇒「右辺」へのリダイレクトをしている事になります。

目次にもどる

(1-4) サンプルプログラム

5つほど簡単なサンプルプログラムをご紹介します。

(サンプル1)

@echo off
rem ############### 「標準出力」のリダイレクト
rem 「標準出力」(=コマンドの実行結果)を右辺(テキストや「nul」)にリダイレクト。
echo ###Test0:
set word3=3_GREEN
echo %word3% 1> output2.txt

(図141)標準出力⇒テキストへリダイレクト:echoの結果は正常終了するのでリダイレクトされる

(操作動画)

(サンプル2)

@echo off
rem ############### 「エラー出力」のリダイレクト
rem 左辺(コマンド)を右辺(テキストや「nul」)にリダイレクトするも、
rem 左辺はエラー出力のため、コンソールにエラーが表示される
echo ###Test1:
rem 【結果】リダイレクトされない
cd C:\NotExistingPath > output3.txt

(図142)標準出力⇒テキストへリダイレクト:cdの結果がエラー出力のためリダイレクトされず

(操作動画)

(サンプル3)

@echo off
rem ############### 「エラー出力」のリダイレクト
rem 「標準出力」(=コマンドの実行結果)を右辺(テキストや「nul」)にリダイレクトするも、
rem 左辺はエラー出力のため、コンソールにエラーが表示される
echo ###Test2:
rem 【結果】リダイレクトされない
cd C:\NotExistingPath 1>> output3.txt

(図143)標準出力⇒テキストへリダイレクト:cdの結果がエラー出力のためリダイレクトされず

(サンプル4)

@echo off
rem ############### 「エラー出力」のリダイレクト
rem 「エラー出力」を右辺(テキストや「nul」)にリダイレクトする。
rem 左辺はエラー出力なので、リダイレクトが行われる
echo ###Test3: 1>> output3.txt
rem 【結果】リダイレクトされる
cd C:\NotExistingPath 2>> output3.txt

(図144)エラー出力⇒テキストへリダイレクト:エラー出力のためリダイレクトされる

(サンプル5)

@echo off
rem ############### 「エラー出力」のリダイレクト
rem 「エラー出力」を右辺(テキストや「nul」)にリダイレクトする。
rem 左辺はエラー出力なので、リダイレクトが行われる
echo ###Test4: 1>> output3.txt
rem 【結果】リダイレクトされる
cd C:\NotExistingPath 1>> output3.txt 2>&1

(図145)エラー出力⇒標準出力⇒テキストへリダイレクト:エラー出力のためリダイレクトされる

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-バッチ処理 (Batch Scripts)

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Windowsバッチでイベントログに出力する方法+オプション説明表・サンプルPGも掲載

<目次> (1) Windowsバッチでイベントログに出力する方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) 少し応用:ERRORLEVELの値に応じてログ出力 (1) Wi …

バッチから引数を与えてPowershellを実行する方法

<目次> (1) バッチからPowershellを実行する方法  (1-1) 構文①  (1-2) 構文② (2) バッチから引数を与えてPowershellを実行する方法  (2-1) 引数を表現す …

Windowsでサービスの起動状態(ステータス)を取得するバッチ

<目次> (1) Windowsでサービスの起動状態(ステータス)を取得するバッチ  (1-1) 構文  (1-2) サンプルプログラム  (1-3) 実行手順  (1-4) 実行手順サンプル動画 ( …

バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について

<目次> (1) バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対処 (1) バッチ処理のパイプ …

バッチファイルでSQLServerに接続する方法~sqlcmdの各オプション挙動を実例で紹介~

<目次> (1) バッチファイルでSQLServerに接続する方法  (1-1) 構文  (1-2) オプションの説明  (1-3) 各オプションの挙動をサンプルで確認 (1) バッチファイルでSQL …

  • English (United States)
  • 日本語
Top