Windows 10で、ファイルやフォルダーの作成日時や更新日時といったタイムスタンプ(時刻情報)を変更したい場合、タイムスタンプを変更できるツールが必要と思われがちですが、実はWindowsに標準搭載されているPowerShellだけで変更することができます。
そこでここでは、WindowsのPowerShellを使ってファイルやフォルダーのタイムスタンプを変更する方法を実行例を交えて紹介します。
目次
指定した日時に変更する
PowerShellでファイルやフォルダーのタイムスタンプ(作成日時/更新日時)を指定した日時に変更するには、Set-ItemPropertyコマンドレットを利用します。
基本的な書式は次のとおりです。
PS> Set-ItemProperty <ファイルやフォルダーのパス> -Name <プロパティ名> -Value <日時>
オプション「-Name」では、ファイルやフォルダーのどのタイムスタンプを変更するかを指定し、主に使用するのは「CreationTime(作成日時)」と「LastWriteTime(更新日時)」です。
オプション「-Value」には、日時を"2020/07/14 05:30:00"というように指定します。
実行例
たとえば、ファイル「E:¥test\sample.txt」の作成日時を「2020/07/14 05:30:00」に設定する場合は、次のように実行します。
PS> Set-ItemProperty E:\test\sample.txt -Name CreationTime -Value "2020/07/14 05:30:00"
同じように、フォルダー「E:¥test」の作成日時を「2020/07/14 05:30:00」に設定する場合は、次のように実行します。
PS> Set-ItemProperty E:\test -Name CreationTime -Value "2020/07/14 05:30:00"
ファイルの更新日時を現在の日時に設定する場合は、次のように実行します。
PS> Set-ItemProperty E:\test\sample.txt -Name LastWriteTime -Value $(Get-Date)
特定のフォルダー配下のファイルに対して、更新日時を一括変更する場合は、次のように実行します。
PS> Get-ChildItem E:\test | ForEach-Object {Set-ItemProperty $_.FullName -Name LastWriteTime -Value "2020/07/14 05:30:00"
日付だけを変更して時刻は変更したくない場合は、次のように実行します。
PS> Get-ChildItem E:\test\sample.txt | ForEach-Object {Set-ItemProperty $_.FullName -Name CreationTime -Value ("2020/03/03" + " " + $_.CreationTime.ToString("HH:mm:ss"))}
逆に、時刻だけを変更して日付は変更しない場合は、次のように実行します。
PS> Get-ChildItem E:\test\sample.txt | ForEach-Object {Set-ItemProperty $_.FullName -Name LastWriteTime -Value ($_.LastWriteTime.ToString("yyyy/MM/dd") + " " + "03:00:00")}
現在の日時に変更する
フォルダーやファイルのタイムスタンプを現在日時に更新したい場合は、PowerShellを使った方法以外にも、copyコマンドを使った方法や、WSL(Windows Subsystem for Linux)を導入してlinuxのtouchコマンドを使った方法もあります。
copyコマンドを使って変更する場合は、コマンドプロンプトなどで「copy <ファイル名>+」と実行して、ファイルに空データを追加することで、ファイルの更新日時を現在日時に更新できます。
WSLのtouchコマンドを利用する場合は、コマンドプロンプトなどで「wsl touch <ファイル名>」と実行することで、ファイルの更新日時を現在日時に更新できます。
あとがき
複数のファイルに時刻情報を設定したい場合や、ファイルの時刻情報を特定の日時に設定したい場合に重宝します。