【PowerShell】ファイルの更新日時・作成日時を変更するコマンド(一括変更も対応)

  • URLをコピーしました!
目次

はじめに

システム運用やテストデータの作成をしていると、「ファイルの更新日時を過去の日付に戻したい」「特定の日時に揃えたい」という場面によく遭遇します。 フリーソフトを使う方法もありますが、Windows 標準の PowerShell を使えば、追加のインストール不要で、コマンド一つで自由に日時を操作できます。

本記事では、単体のファイル変更から、フォルダ内の大量ファイルを一括置換する応用テクニックまで、コピペで使えるコマンドを紹介します。

この記事でわかること
  • 特定のファイルの「作成日時」「更新日時」「アクセス日時」を変更する方法
  • フォルダ内の全ファイルを一括で変更する方法(サブフォルダ含む)
  • Linux の touch コマンドのように、現在時刻(今の時間)に更新する方法

基本: ファイルのタイムスタンプを変更するコマンド

PowerShell でファイルの日時を変更するには、アイテムのプロパティを設定するコマンドレット Set-ItemProperty を使用するのが基本です。構文は以下の通りです。

Set-ItemProperty [ファイルパス] -Name [変更したい項目] -Value "[日時]"

更新日時(LastWriteTime)を変更する

最も利用頻度が高いのが、ファイルの「更新日時」の変更です。 プロパティ名には LastWriteTime を指定します。

実行コマンド例

Set-ItemProperty "./test.txt" -Name LastWriteTime -Value "2025/01/01 12:00:00"

上記を実行すると、test.txt の更新日時が「2025年1月1日 12時00分」に変更されます。

作成日時(CreationTime)を変更する

ファイルが作成された日(作成日時)を変更したい場合は、プロパティ名に CreationTime を指定します。

実行コマンド例

Set-ItemProperty "./test.txt" -Name CreationTime -Value "2020/04/01 09:00:00"

アクセス日時(LastAccessTime)を変更する

あまり頻繁には使いませんが、ファイルを最後に開いた日時(アクセス日時)も変更可能です。 プロパティ名には LastAccessTime を指定します。

実行コマンド例

Set-ItemProperty "./test.txt" -Name LastAccessTime -Value "2025/02/05 18:30:00"

応用: フォルダ内のファイルを一括で変更する方法

1つ1つファイル名を指定するのは大変です。 Get-ChildItem(ファイル一覧を取得するコマンド)とパイプライン | を組み合わせることで、フォルダ内の全ファイルをまとめて処理できます。

フォルダ直下のファイルをすべて変更する

指定したフォルダの「直下」にあるファイル全ての日時を変更します。構文は以下の通りです。

Get-ChildItem [フォルダパス] | ForEach-Object { Set-ItemProperty $_.FullName -Name [項目] -Value "[日時]" }

実行コマンド例(C:\Data 内の全ファイルの更新日時を変更)

Get-ChildItem -Path "C:\Data" | ForEach-Object { Set-ItemProperty $_.FullName -Name LastWriteTime -Value "2025/12/31 23:59:59" }
💡 解説
  • Get-ChildItem: ファイルの一覧を取得します。
  • | (パイプライン): 左側の結果(ファイル一覧)を、右側のコマンドに渡します。
  • ForEach-Object: 渡されたファイルを1つずつ順番に処理します。
  • $_: 「現在処理しているファイル」を表す特殊な変数です。

【便利】サブフォルダも含めて再帰的に変更する

実務で最も使うのがこちらです。 フォルダの中にさらにフォルダがある場合(階層構造)、その奥深くにあるファイルまですべて一括で変更したいですよね。

そんな時は、Get-ChildItem-Recurse オプションを付けます。

実行コマンド例(サブフォルダ内も含む全て)

Get-ChildItem -Path "C:\Data" -Recurse | ForEach-Object { Set-ItemProperty $_.FullName -Name LastWriteTime -Value "2025/12/31 23:59:59" }
💡 解説
  • -Recurse をつけるだけで、指定フォルダ配下の「全階層」を探索して処理してくれます。
  • もし「ファイルだけ変更して、フォルダ自体の更新日時は変えたくない」場合は、コマンドに -File オプションを追加してください。
  • 例: Get-ChildItem -Path "C:\Data" -Recurse -File | ...

Tips: 今の時間(現在時刻)に変更したい場合

Linux の touch コマンドのように、「とりあえずファイルの更新日時を 『今』 にしたい」というケースも多いでしょう。 いちいち "2025/02/05 12:34:56" のように現在時刻を手打ちする必要はありません。

PowerShell の Get-Date コマンドレットを組み合わせることで、自動的にシステム時刻を設定できます。

現在時刻に更新するコマンド

-Value の部分に、(Get-Date) と記述します。

実行コマンド例(更新日時を「今」にする)

Set-ItemProperty "./test.txt" -Name LastWriteTime -Value (Get-Date)
💡 解説
  • (Get-Date) のようにカッコで囲むことで、「先に Get-Date を実行して、その結果(今の時間)を -Value に渡す」という動作になります。
  • これを使えば、バッチ処理などで「処理が完了した時刻」を記録する際にも便利です。

変更結果を確認する方法

日時が正しく変更されたかどうかは、エクスプローラーの「更新日時」列を見ても確認できますが、PowerShell 上でそのまま確認するほうが効率的です。

Get-ItemProperty コマンドを使い、表示したいプロパティを選択(Select)することで、作成日時や更新日時を一覧で確認できます。

実行コマンド例(ファイル名、作成日時、更新日時を表示)

Get-ItemProperty "./test.txt" | Select-Object Name, CreationTime, LastWriteTime

実行結果イメージ

Name       CreationTime           LastWriteTime
----       ------------           -------------
test.txt   2020/04/01 9:00:00     2025/12/31 23:59:59

このように、変更した結果が一目で確認できれば作業完了です。

まとめ

本記事では、PowerShell を使ってファイルのタイムスタンプ(作成・更新・アクセス日時)を変更する方法を紹介しました。

最後に、よく使う構文をまとめておきます。作業時のコピペ用としてご活用ください。

▼ 基本: 単体ファイルの変更

# 更新日時を変更
Set-ItemProperty "ファイルパス" -Name LastWriteTime -Value "2025/01/01 12:00:00"

# 作成日時を変更
Set-ItemProperty "ファイルパス" -Name CreationTime -Value "2025/01/01 12:00:00"

# 現在時刻(今)に変更
Set-ItemProperty "ファイルパス" -Name LastWriteTime -Value (Get-Date)

▼ 応用: 一括変更(サブフォルダ含む)

# フォルダ内の全ファイル(サブフォルダ含む)を一括変更
Get-ChildItem -Path "フォルダパス" -Recurse | ForEach-Object { Set-ItemProperty $_.FullName -Name LastWriteTime -Value "2025/01/01 12:00:00" }

以上、最後までお読みいただきありがとうございました。

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

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次