バッチスクリプト - 入力 / 出力
こんにちは、将来のプログラマーたち!今日は、バッチスクリプティングの魅力的な世界に飛び込み、入力と出力操作に焦点を当てます。あなたの近所の親切なコンピュータ教師として、この旅を案内するのが楽しみです。心配しないでください。これまでに一行もコードを書いたことがない人でも、基本から始めて少しずつ進んでいきます。お気に入りの飲み物を一杯取り、始めましょう!
バッチスクリプトにおける入力と出力の理解
本題に入る前に、バッチスクリプトの文脈で「入力」と「出力」が何を意味するか話しましょう。
- 入力 は、あなたのスクリプトに入る情報です。プログラムにデータを与えるようなものです。
- 出力 は、あなたのスクリプトが生成する、または表示するものです。スクリプトの作業結果です。
キッチンに例えると、入力は使う材料で、出力は作る美味しい料理です!
基本的な入力:SET /P コマンド
バッチスクリプトで入力を取得する最も一般的な方法は、SET /P コマンドです。このコマンドを使うと、ユーザーに入力を促し、変数に保存することができます。
@echo off
SET /P name=あなたの名前は何ですか?
echo こんにちは、%name%!バッチスクリプトの世界へようこそ!
pause
この例では:
-
@echo off
はコマンドが画面に表示されないようにします。 -
SET /P name=あなたの名前は何ですか?
はユーザーに名前を入力するように促し、name
変数に保存します。 -
echo こんにちは、%name%!
は入力された名前を使って挨拶を表示します。 -
pause
はウィンドウを開いたままにし、結果を見せることができます。
このスクリプトを実行してみてください。コンピュータと少し話すようなものです!
基本的な出力:ECHO コマンド
すでに ECHO コマンドを実行したことがありますが、もう少し詳しく見てみましょう。ECHO コマンドはバッチスクリプトで出力を表示する主要な方法です。
@echo off
echo これはシンプルな出力です。
echo.
echo この行の上には空白行があります。
echo "クォート"はそのまま表示されます。
echo.
echo 現在の日付: %date%
echo 現在の時間: %time%
pause
ここで起こっていることは以下の通りです:
-
echo.
は空白行を表示します。 - ECHO を使ってテキスト、変数、乃至はシステム情報(日付や時間)を表示できます。
出力のリダイレクト(stdout と stderr)
次に、出力のリダイレクトについて話しましょう。バッチスクリプトでは、主に2つの種類の出力があります:
- 标準出力(stdout):コマンドの通常の出力。
- 标準エラー(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
このスクリプトは以下のように動作します:
- ユーザーに Yes/No の質問を表示します。
-
/c YN
で有効な選択肢(Y または N)を指定します。 -
/m
でカスタムメッセージを表示します。 -
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