PowerShellではCreationTime、LastWriteTime、LastAccessTimeを書き換えることでファイルの作成日時・更新日時・アクセス日時を変更できます。
フォルダー内のファイルをまとめて変更する場合はGet-ChildItemとForEach-Objectを組み合わせれば一括処理できます。
検証用のファイルをいくつか用意したときに日時がバラバラだと地味に扱いづらいんですよね。この記事では複数ファイルを同じ日時へ揃える方法から、1ファイルだけ変更する方法、サブフォルダーや拡張子を絞る方法までまとめます。
OS:Windows 11 Home 25H2
PowerShell:7.6.2
ファイルシステム:NTFS
変更できるタイムスタンプの種類
PowerShellでは以下の3種類のタイムスタンプを変更できます。
| 項目 | PowerShellのプロパティ |
|---|---|
| 作成日時 | CreationTime(Microsoft Learn) |
| 更新日時 | LastWriteTime(Microsoft Learn) |
| アクセス日時 | LastAccessTime(Microsoft Learn) |
それぞれ個別に変更することも、まとめて同じ日時に揃えることもできます。
なおCreationTime、LastWriteTime、LastAccessTimeは.NETのFileSystemInfoが持つ日時プロパティです。PowerShellでは、これらのプロパティに日時を代入することでファイルやフォルダーのタイムスタンプを変更できます。
LastAccessTimeは値を設定できますがWindows側の設定やファイルシステムによって自動更新の挙動が異なります。あとからファイルへアクセスしてもアクセス日時がすぐ更新されるとは限りません。
カレントディレクトリ配下のファイルをまとめて変更する
PowerShellを対象のフォルダーで開きます。あとは以下のコマンドを実行するだけです。
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -File -Recurse | ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }2026/06/08 12:00:00の部分を変更したい日時に書き換えてください。これでカレントディレクトリ配下にあるすべてのファイルの作成日時・更新日時・アクセス日時が一括で変わります。


→
↓


対象フォルダーでPowerShellを開く方法が不安な場合はエクスプローラーから直接起動する手順も確認しておくと安心です。


コマンドの内容を確認する
$dt = Get-Date “2026/06/08 12:00:00”
変更したい日時を$dtという変数に格納しています。
Get-ChildItem . -File -Recurse
カレントディレクトリ配下のファイルを取得します。各オプションの意味は以下のとおりです。
| 指定 | 意味 |
|---|---|
. | カレントディレクトリ |
-File | ファイルのみを対象にする |
-Recurse | サブフォルダー内も含める |
ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }
取得したファイルに対して1つずつ、3つの日時プロパティを書き換えています。
変更後の日時を確認する
変更できたか確認したい場合は、以下のコマンドでファイルの日時を一覧表示できます。
Get-ChildItem . -File -Recurse | Select-Object FullName, CreationTime, LastWriteTime, LastAccessTimeファイルやフォルダーの日時を条件別に変更する
1ファイルだけ変更したい場合
特定の1ファイルだけ日時を変更したい場合はGet-Itemを使います。
$dt = Get-Date "2026/06/08 12:00:00"; $file = Get-Item ".\sample.txt"; $file.CreationTime = $dt; $file.LastWriteTime = $dt; $file.LastAccessTime = $dtsample.txtの部分を対象ファイル名に変更してください。フォルダー内の全ファイルではなく特定ファイルだけ変更したい場合はこちらの方が安全です。
サブフォルダーを対象にしない場合
カレントディレクトリ直下のファイルだけ変更したい場合は-Recurseを外します。
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -File | ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }フォルダー自体の日時も変更したい場合
ファイルだけでなくフォルダーの日時も変えたいときは-Fileを外します。
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -Recurse | ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }注意: このコマンドではカレントディレクトリ自身は対象に含まれません。
カレントディレクトリ自身も一緒に変更したい場合は以下のようにします。
$dt = Get-Date "2026/06/08 12:00:00"; @(Get-Item .) + @(Get-ChildItem . -Recurse) | ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }特定の拡張子だけ変更したい場合
-Filterを使うと特定の拡張子だけを対象にできます。ワイルドカードで指定する形です。例えば.txtだけを対象としたい場合は-Filter "*.txt"のようになります。
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -File -Recurse -Filter "*.txt" | ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }*.txtの部分を変えるだけなので、ほかの拡張子にも応用できますね。
タイムスタンプ変更前に対象ファイルの中身も確認したい場合はSelect-Stringで複数ファイルを検索する方法も便利です。


実行時の注意点
ファイルの日時を変更すると元の日時情報は失われます。重要なファイルに対して実行する場合は事前にバックアップを取っておくと安心です。
また、システムフォルダーや管理者権限が必要なフォルダーではPowerShellを「管理者として実行」しないと変更できない場合があります。
日時を変更できない場合に確認すること
コマンドを実行しても日時が変わらない場合は以下を確認してみてください。
| 確認点 | 確認内容 |
|---|---|
| 書き込み権限があるか | 対象ファイルやフォルダーに対する権限が不足していると変更に失敗します。 |
| 対象ファイルが存在するか | パスやファイル名を間違えていないか確認します。 |
| 指定した日時が有効か | ファイルシステムで扱えない日時を指定するとエラーになる場合があります。 |
| OneDriveなどの同期対象ではないか | 変更後に同期処理や別アプリの処理で日時が再び変わる可能性があります。 |
特にシステムフォルダーや他のアプリが使用中のファイルではPowerShell側の書き換えが失敗することがあります。
ファイルの変更を検知して自動処理につなげたい場合はFileSystemWatcherを使った監視方法もあります。


よくある質問
まとめ
PowerShellを使うと、フォルダー内のファイルのタイムスタンプをまとめて変更できます。
- 変更できるのは「作成日時(CreationTime)」「更新日時(LastWriteTime)」「アクセス日時(LastAccessTime)」の3種類だよ。
-Recurseでサブフォルダーも含められるよ。-Fileを外すとフォルダー自体も対象にできるよ。-Filterで拡張子を絞り込めるよ。- 元の日時は自動では復元できないので大事なファイルは先にバックアップするか変更前の日時を控えておいてね。
対象フォルダーに移動してからコマンドを実行するとパス指定も不要でシンプルに使えます。検証用データやサンプルファイルのタイムスタンプをそろえたいときにぜひ活用してみてください。
ファイル操作以外のPowerShellコマンドも確認したい場合は用途別のまとめページから探せます。







