PowerShellでファイルの作成日時・更新日時・アクセス日時を一括変更する方法

当ページのリンクには広告が含まれています。
PowerShellのコマンドでファイルの作成日時、更新日時、アクセス日時を任意の日付に変更する方法を解説するアイキャッチ画像

PowerShellではCreationTime、LastWriteTime、LastAccessTimeを書き換えることでファイルの作成日時・更新日時・アクセス日時を変更できます。

フォルダー内のファイルをまとめて変更する場合はGet-ChildItemとForEach-Objectを組み合わせれば一括処理できます。

検証用のファイルをいくつか用意したときに日時がバラバラだと地味に扱いづらいんですよね。この記事では複数ファイルを同じ日時へ揃える方法から、1ファイルだけ変更する方法、サブフォルダーや拡張子を絞る方法までまとめます。

検証環境(確認日:2026年6月)

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を対象のフォルダーで開きます。あとは以下のコマンドを実行するだけです。

このページのコマンドはWindows 11 / PowerShell 7 / NTFS環境で動作を確認しています。PowerShellやファイルシステムの種類によって日時の扱いが異なる場合があります。

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の部分を変更したい日時に書き換えてください。これでカレントディレクトリ配下にあるすべてのファイルの作成日時・更新日時・アクセス日時が一括で変わります。

Windowsのcheck.txtプロパティ画面で、作成日時が2025年10月5日22:26:55、更新日時とアクセス日時が2026年4月17日13:06:51になっている状態
変更前は作成日時と更新・アクセス日時が異なる状態です

→

↓

Windowsのcheck.txtプロパティ画面で、作成日時・更新日時・アクセス日時がすべて2026年6月8日12:00:00に変更されている状態
PowerShellで3種類のタイムスタンプを同じ日時に変更した結果

対象フォルダーで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つの日時プロパティを書き換えています。

変更後の日時を確認する

変更できたか確認したい場合は、以下のコマンドでファイルの日時を一覧表示できます。

PowerShell
Get-ChildItem . -File -Recurse | Select-Object FullName, CreationTime, LastWriteTime, LastAccessTime

ファイルやフォルダーの日時を条件別に変更する

1ファイルだけ変更したい場合

特定の1ファイルだけ日時を変更したい場合はGet-Itemを使います。

PowerShell
$dt = Get-Date "2026/06/08 12:00:00"; $file = Get-Item ".\sample.txt"; $file.CreationTime = $dt; $file.LastWriteTime = $dt; $file.LastAccessTime = $dt

sample.txtの部分を対象ファイル名に変更してください。フォルダー内の全ファイルではなく特定ファイルだけ変更したい場合はこちらの方が安全です。

サブフォルダーを対象にしない場合

カレントディレクトリ直下のファイルだけ変更したい場合は-Recurseを外します。

PowerShell
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -File | ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }

フォルダー自体の日時も変更したい場合

ファイルだけでなくフォルダーの日時も変えたいときは-Fileを外します。

PowerShell
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -Recurse | ForEach-Object { $_.CreationTime = $dt; $_.LastWriteTime = $dt; $_.LastAccessTime = $dt }

注意: このコマンドではカレントディレクトリ自身は対象に含まれません。

カレントディレクトリ自身も一緒に変更したい場合は以下のようにします。

PowerShell
$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"のようになります。

PowerShell
$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を使った監視方法もあります。

よくある質問

作成日時だけ変更できる?

できます。CreationTimeだけを書き換えれば作成日時のみ変更できます。

PowerShell
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -File -Recurse | ForEach-Object { $_.CreationTime = $dt }

更新日時だけ変更できる?

できます。LastWriteTimeだけを書き換えれば更新日時のみ変更できます。

PowerShell
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -File -Recurse | ForEach-Object { $_.LastWriteTime = $dt }

アクセス日時だけ変更できる?

できます。LastAccessTimeだけを書き換えます。

PowerShell
$dt = Get-Date "2026/06/08 12:00:00"; Get-ChildItem . -File -Recurse | ForEach-Object { $_.LastAccessTime = $dt }

変更した後から元の日時に戻せる?

PowerShellだけでは変更前の日時を自動で復元できません。元に戻す可能性がある場合は、事前にバックアップを取るか、変更前の日時を控えておいてください。

まとめ

PowerShellを使うと、フォルダー内のファイルのタイムスタンプをまとめて変更できます。

  • 変更できるのは「作成日時(CreationTime)」「更新日時(LastWriteTime)」「アクセス日時(LastAccessTime)」の3種類だよ。
  • -Recurseでサブフォルダーも含められるよ。
  • -Fileを外すとフォルダー自体も対象にできるよ。
  • -Filterで拡張子を絞り込めるよ。
  • 元の日時は自動では復元できないので大事なファイルは先にバックアップするか変更前の日時を控えておいてね。

対象フォルダーに移動してからコマンドを実行するとパス指定も不要でシンプルに使えます。検証用データやサンプルファイルのタイムスタンプをそろえたいときにぜひ活用してみてください。


ファイル操作以外のPowerShellコマンドも確認したい場合は用途別のまとめページから探せます。

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