スクリプトでinputなど、対話的に入力した値を使用して運用行う事は沢山あります。

batファイルでユーザーが指定したものを使用したいです
このような要望に応えます。
ユーザーが入力したものを、変数に入れて使用すると、業務効率化の幅が広がります。入力された値によって結果が変わってくるってワクワクしますね。
batファイルでもset /pを使用すれば、ユーザーが入力した値を使用して処理が可能なのでやってみましょう。
プログラミングにオススメのマウス
プログラミングにオススメのキーボード
batでset /pを使用し、入力したものを使用する


setといえば変数を指定するものですが、オプションで「/p」を使用する事で、「input」のような入力する値を、変数に格納する事が出来ます。
そして「%変数%」のように、変数を「%」で囲うことで使用できます。
では実際に行っていきます。
batでset /pを実際に使用してみる
batファイル作成
まずはbatファイルを作成してください。ここでは「star.bat」というファイルを作成しました。




このファイルを右クリックして、「編集」をクリックして編集します。
ここでは下記のようなスクリプトを書きました。
set /p star="評価をしてください[1-5]"
echo あなたの評価は%star%でした。
pause
上書き保存します。




batファイルを実行する
では早速batを実行して見ます。




setの行でユーザーの入力を待つ画面が出てきました。


文字化けのエラーが発生した場合
ここで文字化けした方も、いるのではないでしょうか?
文字化けした方はbatファイルを「名前を付けて保存」して、文字コードを「ANSI」にしましょう。
そのまま上書き保存をし、もう一度batファイルをダブルクリックします。


batファイル実行の続き
ここでは4を入力し、エンターします。


変数に入力した「4」が格納されて、表示されているのがわかります。
setコマンドやechoコマンドまで表示されていますね。ここも不要なので消しましょう。
batファイル実行して不要な部分を消す
batファイルを編集して下記のように「@echo off」を最初の行に入れましょう。


@echo off
set /p star="評価をしてください[1-5]"
echo あなたの評価は%star%でした。
pause
ファイルを保存して、もう一度batファイルをダブルクリックする。起動したら4を入力して、エンターして見ましょう。


不要なスクリプト部分が消えて、想定通りの動きになりました。
batでset /pを使用した応用編
では少し難しいですが、実務用の応用編をやってみます。
先程のbatファイルでは1から5以外の値を入力した場合も表示されてしまいます。また何も指定しなかった場合も表示されてしまいます。
学習で「set /p」の動きを知るだけなら良いですが、実務で使用するにはそこまで作りこむ必要があります。
先程のbatファイルを修正して、実務レベルにしてみました!
@echo off
REM 1-5以外を指定した場合はここに戻る
:again
set /p star="評価をしてください[1-5]"
REM 条件分岐
if %star% equ 1 (
goto :message
) else if %star% equ 2 (
goto :message
) else if %star% equ 3 (
goto :message
) else if %star% equ 4 (
goto :message
) else if %star% equ 5 (
goto :message
) else (
goto :again
)
REM 1-5を指定した場合はここに移動
:message
echo あなたの評価は%star%でした
pause
「REM」はその行はコメントアウトして、処理とは関係ない事を示すコマンドです。処理の説明を書く時に使用します。


「:」でもコメントアウトできますが、4行目や23行目はコメントアウトになりません。その理由は以下の記事で書いていますが、ここでは省略します。


「:again」は任意の名前でラベルを指定しています。1から5以外であればここに戻ってくる目印になります。
戻るには「goto」コマンドを使用し、ラベルを指定します。


if文を用いて条件分岐しています。1から5を指定した場合は「goto」で「:message」ラベルまで移動してメッセージを表示する設計です。


1から5以外を指定した場合は「:again」のラベルまで戻る仕組みです。
これで1から5以外を指定した場合は、再度数字の入力を求められるようになります。
batでset /pを使用し、入力したものを使用する!まとめ


変数を指定する「set」コマンドに「/p」のオプションを付ける事で、入力した値を使用可能です。
文字化けする場合もありますが、その対処法として「文字コードの変更」がありました。
そのままだと、batファイルの中身も表示してしまうので、最初の行に「@echo off」を追記する事で、綺麗にしました。
最終的なコードは下記になりました。
@echo off
set /p star="評価をしてください[1-5]"
echo あなたの評価は%star%でした。
pause
batファイルで、入力する値を使用すると、運用の幅が広がりますので、是非やってみて下さい。
もっと高度なプログラミングで、業務効率化する場合はプログラミングスクールもお勧めです。
おすすめするプログラミングスクール


batで入力した値を使用できるようになれば、簡単なbatで幅広い事が出来るようになるので是非覚えて見て下さい。