Windows起動時に当日日付でファイル/フォルダを作成する方法（バッチファイルで自動化）

## 目次
- [はじめに](#はじめに)
- [設定手順](#設定手順)
    - [1.バッチファイルの作成](#1バッチファイルの作成)
    - [2.動作確認](#2動作確認)
    - [3.ファイルを配置](#3-ファイルを配置)
- [おわりに](#おわりに)

## はじめに
その日やったこと、明日やることをログに残したい時ないですか？
タスクをメモ帳などのテキストエディタに書いてコメントして、日付ごとにファイル作ったり、
その日ダウンロードしたファイルを日付フォルダに保存したかったり。

私は日次報告書をテキストファイルに記載して日付ごとに整理してます。
前職ではその日の作業で行った作業ログやエラー出力をフォルダにまとめて見返せるようにしてました。
毎日ファイル作るのもフォルダ作るのも面倒なのでどうにか自動化できないか、と試したのでここに記載します。

本記事はIT初心者向け・事務作業者向けのものになります。  
結構泥臭いというか極めて単純な構造なのでIT熟練者の方々から見ればもっと効率的な方法があると思われるかもしれませんが、あくまでこんなことできるんだな～程度でとらえてもらえれば幸いです。

### 完成イメージ
以下のような状態を作成できます。

![MonthlyFolder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3501284/85c620c1-0e64-b4db-e8fc-ed608e9c0214.png)  
月が変わるたびに自動的に当月のフォルダが作成されます。

![DailyFolder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3501284/e08bb1cb-b6bc-c996-9299-30f647ba082a.png)  
当月のフォルダの配下に当日日付のファイルが作成されます。(フォルダに変更することも可能)  
**※なお、このファイルはひな型をコピーして作成されています。**

## 設定手順
### 1.バッチファイルの作成

フォルダ等の作成はバッチファイルを参照することで実行します。
次の通り作業を行ってください。
1. メモ帳を開く
1. メモ帳に次のコードをコピー＆ペースト
    ```
    @echo off
    REM "今日の日付を取得します"
    for /F "tokens=1-3 delims=/ " %%a in ("%date%") do (
        set "year=%%a"
        set "month=%%b"
        set "day=%%c"
    )

    REM "フォルダのパスを作成します"
    set "BASEFolder=${作成したいファイル/フォルダを設置する場所}"
    set "ThisMonthfolder=%BASEFolder%\%year%%month%"
    pause

    REM "当月フォルダが存在しない場合は作成します"
    if not exist "%ThisMonthfolder%" (
        mkdir "%ThisMonthfolder%"
    )
    pause

    REM "ひな型ファイルのパス作成・当日ファイルとしてコピーします"
    set "Template=${ひな型ファイルのパス}"
    copy "%Template%" "%ThisMonthfolder%\%month%%day%.txt" > nul
    pause
    ```
    **変更箇所**
    * 作成したいファイル/フォルダを設置する場所を絶対パスで記載してください
        ```diff
        (例)
        - set "BASEFolder=${作成したいファイル/フォルダを設置する場所}"
        + set "BASEFolder=C:\Users\TEST"
       ```
    * コピーしたいひな型のファイルを絶対パスで記載してください
        ```diff
        (例)
        - set "Template=${ひな型ファイルのパス}"
        + set "Template=%BASEFolder%\Template.txt"
                            ↑ 
                        変数を使用して参照しています
       ```

1. ファイルを任意の場所に一時的に保存  
【注意点】  
    * 必ず拡張子を `.bat` にしてください
    * ファイルを保存するときは文字コードを「ANSI」あるいは「Shift-JIS」形式とすること


### 2.動作確認

1. 作成したバッチファイルをダブルクリック
1. コマンドプロンプトが起動されることを確認  
![コマンドプロンプト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3501284/546cc6cc-2181-1ac0-233d-43855607e5f0.png)

1. `pause` の状態で停止しているので `Enter`を押下し　**任意の場所に当月フォルダが作成されたことを確認**
![MonthlyFoder-Done.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3501284/e017f3ca-7973-9c48-c19e-1f75758d266f.png)

1. `pause` の状態で停止しているので `Enter`を押下し **任意の場所にひな型をもとにしたファイルが作成されたことを確認**
![DailyFile-Done.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3501284/d2f0de1b-0660-0f43-0a66-2fa208f9bb7d.png)


1. `pause` の状態で停止しているので `Enter`を押下し **コマンドプロンプトを閉じる**

1. 動作に問題がなければ再度バッチファイルを開き、`pause`　の記載を削除してください
    ```diff
    REM "フォルダのパスを作成します"
    set "BASEFolder=${作成したいファイル/フォルダを設置する場所}"
    set "ThisMonthfolder=%BASEFolder%\%year%%month%"
    -pause

    REM "当月フォルダが存在しない場合は作成します"
    if not exist "%ThisMonthfolder%" (
        mkdir "%ThisMonthfolder%"
    )
    -pause

    REM "ひな型ファイルのパス作成・当日ファイルとしてコピーします"
    set "Template=${ひな型ファイルのパス}"
    copy "%Template%" "%ThisMonthfolder%\%month%%day%.txt" > nul
    -pause
    ```

### 3. ファイルを配置

1. PCの起動時(Windowsの起動時)に上記処理が自動的に行われるよう、
以下の場所にファイルを配置してください。
    ```
    C:\ユーザー\ユーザー名\AppData\Roaming\Microsoft\Windows\スタートメニュー\プログラム\スタートアップ
    ```
    あるいは
    ```
    C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    ```

1. PCを再起動し、フォルダおよびファイルが作成できているか確認してください  
**※動作確認時に作成したものを削除してから実施してください**

1. 問題なく作成が確認出来たらOK


## おわりに

いかがでしたでしょうか。  
やっていることは極めて単純ですが、地味に役に立つ内容ではないかなと思います。  

バッチファイルを使用しての自動化を行う際の基本的かつ簡易的な内容となるので、  
ファイル内にて色々なコマンドで試してみてはいかがでしょうか。
ここまで読んでくださりありがとうございました。