バッチスクリプト - 入力 / 出力

こんにちは、将来のプログラマーたち!今日は、バッチスクリプティングの魅力的な世界に飛び込み、入力と出力操作に焦点を当てます。あなたの近所の親切なコンピュータ教師として、この旅を案内するのが楽しみです。心配しないでください。これまでに一行もコードを書いたことがない人でも、基本から始めて少しずつ進んでいきます。お気に入りの飲み物を一杯取り、始めましょう!

Batch Script - Input / Output

バッチスクリプトにおける入力と出力の理解

本題に入る前に、バッチスクリプトの文脈で「入力」と「出力」が何を意味するか話しましょう。

  • 入力 は、あなたのスクリプトに入る情報です。プログラムにデータを与えるようなものです。
  • 出力 は、あなたのスクリプトが生成する、または表示するものです。スクリプトの作業結果です。

キッチンに例えると、入力は使う材料で、出力は作る美味しい料理です!

基本的な入力:SET /P コマンド

バッチスクリプトで入力を取得する最も一般的な方法は、SET /P コマンドです。このコマンドを使うと、ユーザーに入力を促し、変数に保存することができます。

@echo off
SET /P name=あなたの名前は何ですか?
echo こんにちは、%name%!バッチスクリプトの世界へようこそ!
pause

この例では:

  1. @echo off はコマンドが画面に表示されないようにします。
  2. SET /P name=あなたの名前は何ですか? はユーザーに名前を入力するように促し、name 変数に保存します。
  3. echo こんにちは、%name%! は入力された名前を使って挨拶を表示します。
  4. pause はウィンドウを開いたままにし、結果を見せることができます。

このスクリプトを実行してみてください。コンピュータと少し話すようなものです!

基本的な出力:ECHO コマンド

すでに ECHO コマンドを実行したことがありますが、もう少し詳しく見てみましょう。ECHO コマンドはバッチスクリプトで出力を表示する主要な方法です。

@echo off
echo これはシンプルな出力です。
echo.
echo この行の上には空白行があります。
echo "クォート"はそのまま表示されます。
echo.
echo 現在の日付: %date%
echo 現在の時間: %time%
pause

ここで起こっていることは以下の通りです:

  • echo. は空白行を表示します。
  • ECHO を使ってテキスト、変数、乃至はシステム情報(日付や時間)を表示できます。

出力のリダイレクト(stdout と stderr)

次に、出力のリダイレクトについて話しましょう。バッチスクリプトでは、主に2つの種類の出力があります:

  1. 标準出力(stdout):コマンドの通常の出力。
  2. 标準エラー(stderr):エラーメッセージや診断出力。

これらの出力をファイルにリダイレクトするには >>> オペレータを使用します。

标準出力のリダイレクト

@echo off
echo これはファイルに保存されます > output.txt
echo これはファイルに追記されます >> output.txt
type output.txt
pause

このスクリプトでは:

  • > はファイルを作成(または上書き)し、出力を書き込みます。
  • >> は既存のファイルに追記します(ファイルが存在しない場合は作成します)。
  • type output.txt はファイルの内容を表示します。

标準エラーのリダイレクト

エラーメッセージをリダイレクトするには 2> を使用します。

@echo off
dir 存在しないフォルダ 2> error.txt
type error.txt
pause

このスクリプトは、存在しないフォルダを表示しようとし、エラーメッセージをファイルにリダイレクトします。

标準出力と標準エラーの両方をリダイレクト

標準出力と標準エラーの両方を同じファイルにリダイレクトすることもできます。

@echo off
dir 2>&1 > output.txt
type output.txt
pause

ここで 2>&1 は「stderrをstdoutと同じ場所にリダイレクトする」という意味です。

プログラム出力の抑制

時々、コマンドを実行して出力を表示しないようにする必要があります。そのためには、出力を特別なデバイス「NUL」にリダイレクトします。

@echo off
echo これは表示されます
echo これは表示されません > NUL
dir > NUL
echo ディレクトリリストは抑制されました
pause

このスクリプトでは、第二の ECHO コマンドと DIR コマンドの出力が抑制されます。

高度な入力/出力技術

基本を理解したところで、少し高度な技術を見てみましょう。

CHOICE コマンドを使ったユーザー入力

CHOICE コマンドを使うと、ユーザー入力をより構造化された方法で取得できます。

@echo off
echo プログラミングが好きですか?
choice /c YN /m "Yを押して「はい」、Nを押して「いいえ」"
if errorlevel 2 goto No
if errorlevel 1 goto Yes
:Yes
echo すばらしい!もっと学びましょう!
goto End
:No
echo 心配しないで、すぐに好きになると思いますよ!
:End
pause

このスクリプトは以下のように動作します:

  1. ユーザーに Yes/No の質問を表示します。
  2. /c YN で有効な選択肢(Y または N)を指定します。
  3. /m でカスタムメッセージを表示します。
  4. if errorlevel を使ってユーザーの選択をチェックし、適切なラベルにジャンプします。

ファイルからの読み取り

ファイルから入力を読み取ることもできます。

@echo off
for /f "delims=" %%a in (input.txt) do (
echo 読み取った行: %%a
)
pause

このスクリプトは input.txt の各行を読み取って表示します。

複数のファイルに書き込み

複数のファイルに書き込むスクリプトを作成しましょう。

@echo off
echo ファイル1の内容 > file1.txt
echo ファイル2の内容 > file2.txt
echo ファイル3の内容 > file3.txt
echo ファイルが正常に作成されました!
pause

このスクリプトは、異なる内容を持つ3つの別々のファイルを作成します。

入力/出力メソッドのまとめ

学んだ入力/出力メソッドを便利な表にまとめます。

メソッド 説明
SET /P ユーザー入力を取得 SET /P name=名前を入力してください:
ECHO 出力を表示 echo こんにちは、世界!
> 出力をファイルにリダイレクト echo テキスト > file.txt
>> 出力をファイルに追記 echo もっとテキスト >> file.txt
2> エラー出力をリダイレクト command 2> error.txt
2>&1 标準出力と標準エラーをリダイレクト command > output.txt 2>&1
NUL 出力を抑制 command > NUL
CHOICE 構造化されたユーザー入力 choice /c YN /m "Yes or No?"
FOR /F ファイルから読み取り for /f "delims=" %%a in (file.txt) do ...

そして、ここまでがバッチスクリプトの入力と出力に関する旅でした。これらの概念をマスターする鍵は練習です。自分自身でスクリプトを書いてみて、さまざまなコマンドを試し、間違った場所を探して学びましょう!

あなたの古いコンピュータ教師がいつも言うように、「プログラミングでは、すべてのエラーは隠された学習機会です。」それでは、バッチスクリプトを書いて、あなたの出力が意図した通りになることを祈っています!

Credits: Image by storyset