Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【PowerShell】1行で解決!フォーマット指定した今日の日付をコマンド内に直接埋め込むスマートな方法

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

こんにちは!Windowsの運用保守や社内インフラの自動化で、PowerShellスクリプトを書いている皆さん、お疲れ様です。

日次バッチやバックアップのスクリプトを作っていると、以下のように「ファイル名の一部に今日の日付(例:6月9日なら 609)を自動で組み込んでコピーしたい」という場面がよくありますよね。

Plaintext

コピー元:C:\work\hoge_609.txt

わざわざ事前に $date = ... のように変数を作ってから使い回すのも悪くありませんが、「1回しか使わない日付だし、コマンドの中に直接埋め込んで1行でスッキリ終わらせたい!」と思ったことはありませんか?

今回は、バッチファイル(.bat)では真似できない、PowerShell単体で日付フォーマットコマンドを別のコマンドに直埋めする裏ワザをご紹介します。

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

1. 結論:埋め込みたいコマンドを $() で囲むだけ!

PowerShellには、文字列や他のコマンドの途中で別のコマンドを実行し、その結果をその場に展開できる $()(部分式 / Subexpression) という強力な機能があります。

今回の「フォーマット指定した日付のファイル(例:hoge_609.txt)を別フォルダにコピーする」という処理は、以下のようにわずか1行で書くことができます。

➔ 実際のコマンド例

PowerShell

Copy-Item C:\work\hoge_$([DateTime]::Today.ToString('Mdd')).txt C:\work\

💡 動作の解説

  1. コマンドラインの中に $() というお馴染みのドルマークとカッコのセットを配置します。

  2. その内側に、日付をフォーマット出力するPowerShellのコマンド [DateTime]::Today.ToString('Mdd') をそのまま記述します。

  3. PowerShellがこの一行を評価するとき、まず $() の中身を最優先で実行し、その結果(例:609)を変数のようにその場にドロップしてくれます。

  4. 最終的に hoge_609.txt という文字列に綺麗に変換され、Copy-Item が実行されます。

2. よく使う日付フォーマットのバリエーション

日付の形式(フォーマット)は、実務のルールに合わせて ToString() の中身を書き換えるだけで自由自在にコントロールできます。

よく使う鉄板のフォーマットをまとめました。

  • 月日(先頭のゼロなし): Mdd609 (6月9日の場合)

  • 月日(常に2桁): MMdd0609

  • 西暦4桁+月日(定番): yyyyMMdd20260609

  • ハイフン区切り: yyyy-MM-dd2026-06-09

これらもすべて、先ほどの $() の中に組み込むだけでそのまま直埋めが可能です。

PowerShell

# 例:yyyyMMdd 形式でログファイルをバックアップフォルダへコピー
Copy-Item C:\logs\app.log C:\backup\app_$([DateTime]::Today.ToString('yyyyMMdd')).log

3. 注意点:文字列として埋め込むときは「ダブルクォーテーション」で!

今回はパスをそのまま(クォーテーションなしで)記述していますが、もしパスの途中にスペースが含まれているなどの理由で全体をクォーテーションで囲む場合は、必ず ダブルクォーテーション( " を使ってください。

  • ⭕ 成功(中身が展開される): "C:\Program Files\hoge_$([DateTime]::Today.ToString('Mdd')).txt"

  • ❌ 失敗(文字がそのまま扱われる): 'C:\Program Files\hoge_$([DateTime]::Today.ToString('Mdd')).txt' ※シングルクォーテーション( ' )で囲むと、$() が機能せず、文字通り「$([DateTime]…)」という名前のファイルを探しに行ってエラーになってしまいます。

まとめ

PowerShellスクリプト内で動的に日付入りのファイル名を扱いたいときは、以下のルールを覚えておくとスクリプトが劇的にシンプルになります。

  • 埋め込みたいコマンド全体をカッコで囲み、頭に $ をつけて $() にする

  • 今日の日付のフォーマット指定は [DateTime]::Today.ToString('フォーマット') で取得できる

  • 文字列として囲むときはダブルクォーテーション( " )を使う

変数宣言の行を減らして、スマートで読みやすい1行スクリプトを書いてみてくださいね!

タイトルとURLをコピーしました