【コピペでOK】バッチファイルで日付名のフォルダを作成する方法!0埋め対応の決定版

batで日付フォルダを作成する方法

毎日手動で「20260429」のようなフォルダを作っていませんか?

バッチファイル1つで、その作業は0秒になります。

しかし、ネットにあるコードをそのまま使うと、1桁の月(1月〜9月)の時にエラーが出て動かないことがあります。この記事では、そんな「空白問題」を対策済みの、現場でそのまま使える決定版コードを現役エンジニアの筆者が紹介します。

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

午前9時にエラーが出る人へ初心者でも失敗しない「0埋め(1桁の月日対策)」済みのコードを紹介します。

目次

【結論】batで日付フォルダを作る今すぐ使える魔法のコード

データベース
@echo off
set DT=%date:/=%
set DT=%DT: =0%
set YMD=%DT:~0,8%

mkdir %YMD%
このコードでできること
  • 実行した瞬間に「20260429」という形式のフォルダを作成します。
  • 1桁の月日でもエラーになりません(ここが重要!)。

なぜこの書き方なのか?(技術解説)

カウンセリング

そのままフォルダを作ろうとすると、「スペースのせいでフォルダ名が途切れる」「エラーで止まる」という現象が起きます。

そのまま切り出すと、フォルダ名に勝手にスペースが混じり、コマンドが途中で切れてエラーになります。

set DT=%DT: =0% :この一行が、厄介な「空白」をすべて「0」に置き換えてくれます。これで、1月でも10月でも安定して動くようになります。

%date% の正体

コマンドプロンプトで echo %date% と打つと、多くの場合以下のような結果が返ってきます。

2026/04/29

しかし、この中身はPCの設定によって以下のように変化します:

  • 2026/04/29 (標準的な日本の設定)
  • 2026/04/29 水 (曜日が含まれる設定)
  • Wed 04/29/2026 (英語圏の設定)

つまり、「1文字目から4文字目が年」という前提が崩れる可能性があるのが、バッチファイル作成における最大の注意点です。

文字列の「切り出し」の仕組み

バッチファイルでは、%date:~開始位置,文字数% という特殊な書き方で、文字列の特定の部分だけを抽出します。

日本の標準設定(YYYY/MM/DD)の場合のインデックス

文字の位置を 0から数える のがポイントです。

文字2026/04/29
位置012

年 (YYYY): %date:~0,4% (0番目から4文字) → 2026

月 (MM): %date:~5,2% (5番目から2文字) → 04

日 (DD): %date:~8,2% (8番目から2文字) → 29

これを組み合わせて set YMD=%date:~0,4%%date:~5,2%%date:~8,2% と書くことで、スラッシュを取り除いた 20260429 という文字列が作れます。

なぜ「置換」が必要なのか?

前述の構成案で set DT=%date:/=% という処理を入れましたが、これには重要な理由があります。

スラッシュ / を消去する理由

mkdir コマンドでフォルダを作る際、名前に /(スラッシュ)が含まれていると、Windowsはそれを「フォルダの区切り」と認識してしまいます。

  • mkdir 2026/04/29 と実行すると、「2026」というフォルダの中に「04」フォルダ、その中に「29」フォルダを作ろうとしてしまいます。

空白を「0」に置換する理由

これが最も厄介な点です。環境によっては、1桁の月が 4(スペース+4)のように、10の位が空白になることがあります。

set DT=%DT: =0% と書くことで、「もし空白があったら0に置き換える」という処理を行い、常に 04 という2桁の状態を保てるようにしています。

実は %time%(現在時刻)も同様で、午前9時以前だと時間の先頭に「空白」が入ります(例: 9:15:30)。日付フォルダに時刻も入れたい場合は、時刻に対しても同様の「空白→0置換」を行うのがプロの書き方です。

【実務応用】さらに便利なカスタマイズ

日付だけじゃなくて、時間も含める

「日付だけじゃなくて、時間も入れたい」「特定の場所に入れたい」という方向けのカスタマイズ集です。

バックアップを1日に何度も取る場合に便利です。

set TM=%time::=%
set TM=%TM: =0%
mkdir %YMD%_%TM:~0,6%

結果:20260429_101530 のようなフォルダができます。

日付と同じように、時刻も %time% という変数で取得できます。しかし、そのままフォルダ名に使おうとすると100%エラーになります。

ここが落とし穴!

「:(コロン)」と「.(ドット)」が含まれている: Windowsのフォルダ名には、コロンを使うことができません。

午前中の「空白」問題: 実は、午前9時などの1桁の時間帯は 9:15:30 のように先頭に半角スペースが入ります。これが原因でバッチが動かないケースが非常に多いのです。

【決定版】日付+時刻のフォルダ作成コード

このコードは、不要な記号を取り除き、さらに「午前中の空白」を「0」に置き換える対策を施した、最も安全な書き方です。

@echo off

:: 1. 日付の取得と整形(/ を取り除く)
set DT=%date:/=%
set DT=%DT: =0%
set YMD=%DT:~0,8%

:: 2. 時刻の取得と整形(: と . を取り除き、空白を0に置換)
set TM=%time::=%
set TM=%TM:.=%
set TM=%TM: =0%

:: 3. フォルダ名の作成(YYYYMMDD_HHMMSS)
:: ※ミリ秒まで入れると長いため、頭から6文字(時分秒)を切り出し
set TARGET_NAME=%YMD%_%TM:~0,6%

:: 4. フォルダ作成
mkdir %TARGET_NAME%

echo フォルダ「%TARGET_NAME%」を作成しました。
pause

コード解説

① 時刻から記号を消す (%time::=%, %time:.=%)

バッチファイルには「特定の文字を消す(置換する)」機能があります。

  • %time::=% :すべての : を空文字に置き換えます。
  • %time:.=% :すべての . を空文字に置き換えます。 これで、10:15:30.4510153045 というただの数字の羅列になります。

② 魔の「午前9時問題」を解決する (set TM=%TM: =0%)

ここがプロのこだわりポイントです。 午前9時に実行した場合、標準では 91530 となり、先頭にスペースが残ります。このまま mkdir を使うと、「コマンドの区切り」と誤認されてエラーになります。 この一行を入れることで、091530 となり、常に安定したフォルダ名になります。

③ 必要な部分だけ切り出す (%TM:~0,6%)

時刻変数はミリ秒まで含まれていて少し長すぎるため、最初の6文字(時・分・秒)だけを切り出しています。

実務での活用例

ログファイルの整理: 実行するたびに新しいフォルダを作って、そこに実行結果を保存する。

上書き禁止のバックアップ: 日付だけのフォルダだと、1日に2回実行したときに上書きされてしまいます。時刻まで含めれば「20260429_101530」「20260429_143000」のように別々に保存できます。

特定のディレクトリに作成する

デスクトップや共有サーバーに直接作りたい場合です。

mkdir "C:\Users\YourName\Desktop\Backup_%YMD%"

まとめ

batで日付フォルダを作成する方法
batで日付フォルダを作成する方法

プロの現場では、ログ保存のためにこのコードを必ず忍ばせています

日付取得はバッチファイル自動化の第一歩。

一度作っておけば、将来的にログ管理やバックアップにも応用可能です。

batで日付フォルダを作成する方法

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次