はじめに
システム運用やテストデータの作成をしていると、「ファイルの更新日時を過去の日付に戻したい」「特定の日時に揃えたい」という場面によく遭遇します。 フリーソフトを使う方法もありますが、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" }以上、最後までお読みいただきありがとうございました。
