バッチファイル入門講義

入門講義【第7章】 ユーザが処理を選べるようにする

ここまでは、一つの決まった処理をするバッチファイルを作ってきました。ここではバッチファイルを使っているユーザーの指示で、行う処理を変更できるような対話的なバッチファイルを作っていきましょう。

そこで重要なコマンドが「if」です。日本語訳だと「もし~ならば」となりますが、その意味の通り「もしユーザーがこう支持したらこう処理する、もしこっちの支持がでたらこっちの処理を行う」という分岐処理をさせることができます。

第7章 第7章の内容

その他の関連しそうな記事

 

「if」文を使ってみる

「第7章」フォルダの中に「if_test.bat」というバッチファイルを作ってください。その中に以下を記述します。

このバッチファイルをコマンドプロンプトで実行してください。

以下のように表示されましたか?

第7章 if_test.batの実行結果

はじめの3,4行目の「set」で変数「me」と「you」に文字列「wada」を代入しています。

そして、6行目の「if」を使って「me」と「you」を比較して、同じ場合にだけ( )の中を実行しています。

このように、「if」を使って二つの文字列が同じかどうかを判定したいときは「==」を使います。この判定のことを「条件判定」と呼びます。

 

「if_test.bat」で「set you=wada」を「set you=tanaka」と変更すると、今度は何も表示されません。これはif文の「%me%==%you%」を満たさなかったために、( )の中が実行されなかったからです。

 

「else」で処理を分岐させる

「if_test.bat」を発展させ、以下のように変更します。

変数「you」が「tanaka」の状態で、if文の続きでelse文というもの増やしました。8行目です。

これを実行すると今度は、「Your and my name are not same」と出力されるはずです。

 

このように、else以下の( )で囲まれた場所に、「if」で指定した条件に合わなかった場合の処理を記述できます。

 

else文は何回でも使えます。「if_test.bat」をさらに発展させましょう。

このように「else if」を付け足していくことでいくらでも分岐を増やすことができます。

そして、最後の「else」で上で指定したどの条件にも一致しなかった場合に処理が行われます。

 

ユーザーの入力情報を受け取る

これでif文の基礎は十分です。次は、ユーザーの入力情報を受け取る方法を紹介します。

これは「set」コマンドにオプションに「/p」を付けるだけで実現できます。こんな感じです。

 

これをバッチファイルとして「user_input.bat」に保存し、実行してみてください。入力を求められるので、適当に言葉を入力しEnterを押します。

うまく出力されましたか?以下、実行例です。

第7章 ユーザー入力を受け取り表示する

「set」にオプション「/p」を使うと、イコールの右側に書いた文字列が画面に表示され、「user_input」に自分が入力した文字列が代入されます。

普通に「set」コマンドを使う場合とかなり変わった動きをするようになりますね。バッチファイルは「set」以外にもオプションによって動きが全く変わるコマンドがたくさんありますので注意が必要です。

 

入力を判断して処理を分岐させる

ここまでの知識を使って、ユーザーの入力した情報を判断して、処理を分岐させるバッチファイルを作ってみましょう。ここで作るのは以下のようなバッチファイルです。

【Step.1】
  選択: ユーザーに1~3の入力を求めます。
【Step.2】
  分岐1: 1が入力されると指定したファイルがコピーされます。
  分岐2: 2が入力されると指定したファイルの名前が変わります。
  分岐3: 3が入力されると指定したファイルが削除されます。

 

バッチファイルを「edit_file.bat」として作成します。処理の対象ファイルとして「file.txt」をバッチファイルと同じ場所に作ってください。

上記した処理をプログラムにすると、以下のようになります。

 

これを「edit_file.bat」として保存します。

3~7行目の「echo」はユーザーに入力番号とそれに対応する処理を説明するものです。ここで、「%1」には引数が入り、コマンドプロンプト上で実行する際、処理の対象となるファイルを指定します。以下のような形で実行します。

 

10行目からユーザーの入力番号に対して、それぞれの処理を書いています。ユーザーの入力番号は変数「ui」に格納されています。

「1」を入力した場合、11行目が実行されますが、対象ファイル名を「copy_ファイル名」としてコピーする処理です。

「2」を入力すると「rename」コマンドが実行されます。これは、ファイルの名前を変えるコマンドで、

というように使います。

この場合、「copy」コマンドはと違って、「file.txt」は「ren_file.txt」という名前に変えられてしまうため、「file.txt」という名のファイルは残りません。

「3」を入力した場合、「del」コマンドでファイルを消去します。

です。ここでは「del」コマンドの前に「if exist ファイル名(ここでは、%1)」がくっついています。

これは「もしファイルが存在すれば、それ以降のコマンドを実行する」というコマンドです。すなわち「file.txt」ファイルが存在する場合にだけ、その後に書かれたコマンドを実行します。

これを付けないと、「file.txt」というファイルが無い場合、「file.txtが見つかりませんでした。」という警告が出るため付けています。無くても問題ありませんが、警告が出るの嫌うときにはよく使う手法ですので、

を一つの文型として覚えてしまいましょう。

 

このバッチファイルを自由にテストして、動きを確認してみましょう。

第7章 edit_file.batを自由にテストしてみる

 

第7章のまとめ

本章では、ユーザーが処理を選択できるようにしました。

ユーザーからの入力は「set /p user_input=[画面出力文字]」で可能でした。ユーザーからの入力情報を受け取ると、「if文」で条件判定を行い分岐処理を行いました。

【入門講義 第7章のまとめ】

  • その1 ユーザーからの入力は「set /p user_input=[画面出力文字]」で受け取ることができる。
  • その2 「if文」で条件判断し、分岐処理を行う。
  • その3 上記の二つを組み合わせると、ユーザー選択を可能にできる

なにか不明な点やうまくいかない場合は、「お問い合わせフォーム」からお気軽にお問い合わせ下さい。

 

次章では、バッチファイルの核とも言える「ループ処理」について学んでいきます。

第8章 ファイル名に日付を加える(改良編)

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメント

  1. 石井 より:

    あなた様のサイトでバッチの勉強をさせていただいています。

    「1から3の入力番号で処理を分岐する」のプログラムで3を選択して「file.txt」が存在しなければ「echo 1~3のどれかを選択してください。」が表示されるのだろうと思うのですがされません。
    掲載されているプログラムをそのままコピーしても同じです。
    理由が分かるとありがたいのですが。

    1. jj-blues より:

      ご質問ありがとうございます。

      >>「1から3の入力番号で処理を分岐する」のプログラムで3を選択して「file.txt」が存在しなければ「echo 1~3のどれかを選択してください。」が表示されるのだろうと思うのですがされません。

      ですが、「file.txt」が存在しなければ「echo 1~3のどれかを選択してください。」が表示されるわけではございません。

      「echo 1~3のどれかを選択してください。」が実行されるのは、入力を求められたときに1~3以外のキーを打ち込んだときです。

      ファイルが存在しないときの処理はこのコードには書いていないのです。エラーが起きると思われます。

      ファイルが存在しないときにどのような処理をしたいかを教えていただければ、何かアドバイスできるかもしれません。

      よろしくお願いいたします。

      1. 石井 より:

        おさらいをしていてご回答いただいていることに気づきました。
        大変失礼いたしました。
        チンプンカンプンの状態で始めたために変な質問をしたようです。
        現在、ここで学んだ内容をもとにFTPサーバから自動でダウンロードしたり、バックアップを取ったりと色々楽しませていただいています。
        ありがとうございました。

コメントを残す