今回は、バッチファイルの重要な基礎である「変数」と簡単な「演算」について学んでいきましょう。
変数とは、中に入っている値や文字を自由に変えることができる箱のようなものです。また、ここで言う簡単な演算とは、足し算や掛け算など四則演算のことを指しています。ここでキーとなるコマンドが「set」コマンドです。
実際に使ってみないとしっくりこないと思いますので、さっそく使ってみましょう。
【変数と演算】
- 変数とは 中に入っている値や文字を自由に変えることができる箱のようなもの
- ここでの簡単な演算とは 四則演算のこと
- キーコマンド 「set」
その他の関連しそうな記事
変数の使い方
前回までと同様に「第5章」というフォルダを作って下さい。この中に、前章で作った「第4章」フォルダからコマンドプロンプトをコピーして、持ってきます。
コマンドプロンプトを開いて、以下のように打ち込んで下さい。
1 |
set variable=initial |
「set」は変数を作るコマンドで、ここでは「variable」という変数を作っています。
変数「variable」の右にイコールで結ばれた「initial」を初期値と呼び、「variable」には始めに「initial」という文字を代入しています。つまり、今「variable」の中には「initial」という文字列が入っていることになります。(※プログラミングの世界では、文字を「文字列」と呼びます。)
ここでは、変数名に「variable」、初期値の文字列に「initial」を使いましたが、もちろんこれらはユーザーが自由に設定できます。
上記のコマンドを実行したら、ちゃんと変数「variable」に文字列「initial」が入っているかを確認しましょう。次のように、打ち込んで下さい。
1 |
echo %variable% |
コマンドプロンプトに「initial」と出力されたと思います。
第1章の講義で少し登場しましたが、「echo」は「echoの右に指定したものを出力する」コマンドです。
ここでは、変数「variable」を%で囲ったものを指定しています。これで「variable」の中に入っている「initial」が表示されます。このように、変数の中に入っているものを見るときには変数を「%」で囲います。
1 |
echo variable |
のように、「%」で囲まないとそのまま「variable」と表示されてしまうので注意して下さい。
変数の中身の変更と合成
では、「variable」の中身を「second value」に変更してみましょう。
はじめと同様にコマンドプロンプトに、
1 |
set variable=second value |
と打ち込んで下さい。そして、中身を確認します。
1 |
echo %variable% |
「second value」と表示されたでしょうか。
このように変数の中身を変えたいときは、再び「set」コマンドで上書きしてしまえばよいです。また、上の例から分かるように、変数にはスペースを含んだ文字列も代入することができます。
変数は合成することもできます。
1 2 |
set variable_1=first set variable_2=second |
と打って、二つの変数(「variable_1」と「variable_2」)を作ります。
この二つを合成しましょう。
1 |
set gosei=%variable_1%%variable_2% |
として、「echo %gosei%」で確認して下さい。
変数「gosei」には「variable_1」と「variable_2」に入っている「first」と「second」が合成されて、「firstsecond」となっています。このように変数を並べるだけで文字列の合成が可能です。
もう少し見やすくするため二つの変数間に何か文字を挟みたいとき、例えば「_」を挟むときは、
1 |
set gosei=%variable_1%_%variable_2% |
のようにします。
「変数」はどんなときに使うのか
変数はどようなときに役に立つのでしょうか?前章で紹介した「copy」コマンドを使って、「変数」が役に立つ例を紹介します。
まずは、「第5章」フォルダの中に「file」フォルダと「copies」フォルダを作って下さい。「file」フォルダの中に、
file1.txt
file2.txt
file3.txt
の三つのファイルを作ります。これら三つのファイルを、
copy_file1.txt
copy_file2.txt
copy_file3.txt
とそれぞれ名前を変え「copies」フォルダの中にコピーしたいとします。
このとき、次のようなバッチを書けばよいでしょう。「copy_files.bat」というバッチファイルをコマンドプロンプトがある場所に作り中に、
1 2 3 |
copy file/file1.txt copies/copy_file1.txt copy file/file2.txt copies/copy_file2.txt copy file/file3.txt copies/copy_file3.txt |
と書いて下さい(※「/」は「\」と置き換えて下さい)。
コマンドプロンプトから「copy_files.bat」と打ち込みます。「copies」フォルダの中に、三つのファイル(「copy_file1.txt」、「copy_file2.txt」と「copy_file3.txt」)ができていれば成功です。
では、このバッチファイルを変更して、三つのファイルを
test_file1.txt
test_file2.txt
test_file3.txt
とそれぞれ名前を変更してコピーしたいときにはどう書き換えればよいでしょうか。
そのためには、三つのファイル名の一部を「copy」から「test」に変えればよいでしょう。以下のようになります。
1 2 3 |
copy file/file1.txt copies/test_file1.txt copy file/file2.txt copies/test_file2.txt copy file/file3.txt copies/test_file3.txt |
ただし、これでは名前を変更したいたびに三箇所の修正が必要であり手間です。また、今は三箇所の修正で済んでいますが、もっと多くの修正が必要な場合もできてくるでしょう。
こんなときに変数を利用しましょう。
頻繁に変更するであろう場所は、あらかじめ変数にしておくのです。こんな感じです。
1 2 3 |
copy file/file1.txt copies/%name%_file1.txt copy file/file2.txt copies/%name%_file2.txt copy file/file3.txt copies/%name%_file3.txt |
変えたい場所を「name」という変数に置き換えました。
そして、このファイルの先頭に「set」を使って、変数の中身を決定します。
1 2 3 4 5 |
set name=test copy file/file1.txt copies/%name%_file1.txt copy file/file2.txt copies/%name%_file2.txt copy file/file3.txt copies/%name%_file3.txt |
これで、コピーするファイルの名前を変更したいときは、はじめの「set name=***」の部分だけを変えればオッケーになりました。
下の図は、コピーするファイルの名前を「test」から「henko」に変えた例です。
このように、一箇所の変更でプログラムの複数の部分が自動的に置き換わってくれるのが変数を使うメリットです。
簡単な演算
「set」コマンドは変数を代入するだけではなく、簡単な演算をするときにも使用されます。
「1+1」をやってみましょう。コマンドプロンプトに、
1 |
set /a wa=1+1 |
と打ってください。
「2」と表示されましたか?
ここで、「set」コマンドのオプションとして、「/a」が指定されていることに注意してください。これは演算を行うときのオプションです。これを書かずに、
1 |
set wa=1+1 |
とすると、「wa」という変数に「1+1」という文字が代入されるだけなので注意しましょう。
もう少しだけ複雑な計算を行ってみましょう。
変数「result」に11を「足す」、「掛ける」、「割る」、「引く」、「余りを出す」という5つの操作を、この順番で連続して行ってみます。
バッチファイル「calculation.bat」を作って以下のように書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
set result=11 echo %result% set /a result=result+11 echo %result% set /a result=result*11 echo %result% set /a result=result/11 echo %result% set /a result=result-11 echo %result% set /a result=result%11 echo %result% |
はじめの行で変数「result」に11を代入しています。ここは演算を行っているわけではないので、「/a」は必要ありません。
4行目以降は「足す」、「掛ける」、「割る」、「引く」、および「余りを出す」という演算をそれぞれ「+」、「*」、「/」、「-」および「%」の演算子を使って計算しています。(※「%」は変数を囲むときに使いますが、ここでは「余りを出す」という演算子として使われていることに注意して下さい。まったく別の使い方です。)
「result」の変化を「echo」コマンドで出力して確認します。バッチファイルを実行して出力が以下のようになれば成功です。
第5章のまとめ
本章では、変数の使い方と簡単な演算について学びました。これらは、少し複雑なバッチファイルを作成するときの必須機能です。
【入門講義 第5章のまとめ】
- その1 変数は「set」コマンドを使用して設定する。頻繁に変更するような文字列は変数にしておくと、後に変更する場合に便利である。
- その2 「set」コマンドを使えば、簡単な演算もできる
なにか不明な点やうまくいかない場合は、「お問い合わせフォーム」からお気軽にお問い合わせ下さい。
次章では、ファイル名に自動で日付を付けるバッチファイルを作っていきます。
バッチファイル「calculation.bat」の12行目、『set /a result=result%11』は正しくは
『set /a result=result%%11』では?
コマンドラインで実行する場合は「%」
バッチファイルで実行する場合は「%%」
ご指摘ありがとうございます。おっしゃるとおりです。
コマンドラインで実行する場合は「%」、バッチファイルの場合は「%%」でした。
後日、修正いたします。
ありがとうございました。
変数はどようなときに役に立つのでしょうか?前章で紹介した「copy」コマンドを使って、「変数」が役に立つ例を紹介します。
というところ、『変数はどようなとき』ではなく、『変数はどのようなとき』ではないですか?