バッチファイル作成について

# バッチファイルとは
拡張子が「.bat」となっているファイルのこと。
コマンドプロンプトで実行できるコマンドをバッチファイルにまとめることで
バッチファイルを1クリックするだけで**コマンドをまとめて実行する**ことができます。

# どういうときに使うか
**決まった作業を毎回やるような場面**で作業効率を良くするのに活躍します。
私はGitの処理を自動化するのに役立てています。

# バッチファイルの作成方法

1. 拡張子「.bat」でファイルを作成
下記のようにファイルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/c1d74856-17d6-9174-185d-cb013c20e479.png)
　
2. 作成したファイルにコマンドを入力する
先ほど作成したファイルをメモ帳等のエディタで開き、コマンドを入力します。
```
@echo off
echo ■■■■■■■■■■■■■
echo Hello World
echo ■■■■■■■■■■■■■
echo.
echo.本日は%year%%month%%date% です
echo.
pause
```
※文字コードはANSIもしくはShift-JISにしないと文字化けします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/69c59460-8d03-7926-94e5-087eca70b9c5.png)<br>
文字コードは「ファイル」→「名前を付けて保存」のエンコードで変更できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/42d033df-842c-6f9a-2001-247bfa2151a7.png)
　
3. 作成したバッチを実行する
作成したバッチをクリックすると、先ほど書いたコマンドが実行されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/1577bc2a-c0af-e146-61f2-982a43331aff.png)


# 良く使うコマンド例
### 基本コマンド
コマンド例
```
@echo off
rem @echo off にすると入力したコマンドが表示されなくなります
rem ←コメントアウトするときに使います

rem echoのあとに書かれたものが表示されます
echo この部分だけ表示されます

rem pauseは処理を中断し、何かのキーが入力されると処理が次に進みます
pause

rem pause以降は処理がないのでキーが入力されるとバッチが終了します
```
実行時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/62f71039-a8be-f6f4-a0e1-39e1dfa8e096.png)

### ファイルの読み書き
ファイル書き込みのコマンド例
```
@echo off

rem setで変数を設定できます
rem ここではstr1にHello、str2にWorldを設定
set str1=Hello
set str2=World

rem ファイル出力先を設定
set out=C:\bat\testbat.txt

rem %変数%で変数に設定したものを出力することができます
rem echo 〇〇>ファイル名で〇〇をファイルに書き込みしたものを新規で作成することができます
echo %str1%>%out%

rem echo 〇〇>>ファイル名で〇〇をファイルに追加で書き込み、なければ新規作成できます
echo %str2%>>%out%

echo %out%を作成しました

pause
```
実行時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/6590e171-35f3-cb98-6e20-15cc25347dc5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/d7c092cf-d94d-e804-af0d-e5a7eac653bd.png)

ファイル読み込みの実行例
```
@echo off

rem ファイル読み込み先を設定
set input=C:\bat\testbat.txt

rem テキストファイルを1行ずつ読み込む
for /f "delims=" %%a in (%input%) do (
  rem %%aには1行ずつ読み込んだ文字が設定されます
  echo %%a
)

pause
```
実行結果（読み込みファイルは先ほど作ったもの）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/546c475e-ad69-2333-5702-1b5e2ec4ab4d.png)

### ループ・条件分岐処理
ループ・条件分岐処理コマンド例
※ループ・条件分岐処理は通常だとバッチ処理内で変数を変更できないので、**遅延環境変数展開**を使って変更するよう注意が必要
```
@echo off

rem 変数はコマンドが実行されるタイミングで展開されるように変更
rem 変更しない場合はループ内での変数の変更が直ちに反映されない
setlocal enabledelayedexpansion

rem C:\bat配下に移動する
cd C:\bat

rem 変数numに数字0を設定
set /a num=0

rem C:\bat配下のファイル数だけ繰り返し処理を行う
for %%a in (*) do (
  rem ファイル名を出力
  echo %%a

　rem numに1を追加
　rem ここで変数は%変数%ではなく、遅延展開を用いた!変数!にする
  set /a num=!num!+1

  rem numの数字を出力
  echo !num!
  
  rem if 条件式　()で条件に満たした処理が実行できます
　if !num! lss 2 (
    echo 現在ファイル数は2個より少ないです
  ) else (
    rem elseは条件式を満たさない場合の処理を行います
    echo 現在ファイル数は2個以上です
  )
)

echo ファイル数は%num%個です

pause
```
実行時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/fb949cf4-1852-4ec9-49fe-1cc11e053570.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/d92385ef-d2de-ac94-2a93-cf84d9e8e974.png)

# 応用例
- Git自動プル
```
@echo off

rem Gitのあるフォルダへ移動
cd C:\git\git-practice

rem gitプルコマンド実行
git pull origin main

pause

exit
```
実行時（管理者実行）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/7a6ffefd-3e05-4632-f59b-745ec006663d.png)
　
タスクスケジューラーで定期実行
windowsの標準機能の「タスクスケジューラ」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/f6f3995b-8cbb-4eda-29ad-be32788cf8c3.png)

 操作のタスクの作成を選択し、名前を入力
 ※今回は管理者権限が必要なため、最上位の特権で実行するにチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/50a5d747-bd2f-7c60-9448-fbeafe5ec3b2.png)

トリガーを任意で選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/9720a53d-c1ff-811c-1de4-b260875945ab.png)

操作→新規のプログラムでGit自動プルバッチを参照にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/f763bca9-5787-83b4-4597-fc6ccdc556d4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/8e36193a-329e-5d0d-70c3-730ae0a081ef.png)

操作内容を設定したらOKを押してタスクを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2970805/c00a0287-013a-383c-8758-1803339d731b.png)

あとはトリガーで設定したタイミングに自動でGitをプルしてくれるようになります

# まとめ
このようにバッチではいろんなことが1クリックもしくは定期実行できるようになります。
今回紹介したことは基礎的な部分ですが、他にもいろんなコマンドが使用できますので
自分に合った使い方をして作業効率UPに繋げられればと思います。