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

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

検証用にファイルをいくつか用意したとき、日時がバラバラだと何かと不便なことってありますよね。

サンプルデータを作っていたら日付が今日になってしまっていたり、古いファイルをコピーしたら日時がちぐはぐになってしまったり……。

プロパティ画面から1ファイルずつ変更するのは現実的ではないので、PowerShellでまとめてタイムスタンプを変えてしまいましょう。

この記事では、フォルダー内のファイルの「作成日時」「更新日時」「アクセス日時」をPowerShellでまとめて変更する方法を紹介します。

目次

この記事でわかること

  • PowerShellで変更できるファイルの日時プロパティの種類
  • カレントディレクトリ配下のファイルをまとめて変更するコマンド
  • サブフォルダーなし・フォルダー自体・特定拡張子など用途別のバリエーション
  • 実行時に気をつけておきたい注意点

変更できるタイムスタンプの種類

PowerShellでは以下の3種類のタイムスタンプを変更できます。

項目PowerShellのプロパティ
作成日時CreationTimeMicrosoft Learn
更新日時LastWriteTimeMicrosoft Learn
アクセス日時LastAccessTimeMicrosoft Learn

それぞれ個別に変更することも、まとめて同じ日時に揃えることもできます。

なお、CreationTimeLastWriteTimeLastAccessTime は .NET の FileSystemInfo が持つ日時プロパティです。PowerShellでは、これらのプロパティに日時を代入することでファイルやフォルダーのタイムスタンプを変更できます。

カレントディレクトリ配下のファイルをまとめて変更する

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

対象フォルダーで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を「管理者として実行」しないと変更できない場合があります。

日時を変更できない場合に確認すること

コマンドを実行しても日時が変わらない場合は以下を確認してみてください。

確認点確認内容
ファイルが使用中ではないかなんらかのアプリで開いているファイルは変更できない場合があります。
読み取り専用になっていないかファイルの属性によって変更できないことがあります。
管理者権限が必要な場所ではないかC:\Windows配下などは管理者権限が必要になる場合があります。
OneDriveなど同期中ではないか一旦は日時が変わったものの同期処理により日時が再更新される場合があります。

特にシステムフォルダーや他のアプリが使用中のファイルではPowerShell側の書き換えが失敗することがあります。

ファイルの変更を検知して自動処理につなげたい場合はFileSystemWatcherを使った監視方法もあります。

Q&A

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

できます。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を使うと、フォルダー内のファイルのタイムスタンプをまとめて変更できます。

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

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

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