PowerShellでファイルのタイムスタンプを変更する方法

PowerShellを活用しよう仕事のこと

先日 仕事で取得したスクリーンショットのファイルを納品物としてまとめる際に、いつもはそんなこと言われないのに今回に限り「更新日を同じ日時に揃えてほしい」との要望がありました。

そこでPowerShellの登場です!

以前 別の仕事でやったことですが、あらためて自分の備忘録として書いておきます。
あなたの役に立てば幸いです。

特定ファイルのタイムスタンプ変更

以下のコマンドで更新日が変更できます。

Set-ItemProperty C:\hoge.png -name LastWriteTime -value '2019/11/20 00:00:00'

ちなみに作成日を変更する場合は、LastWriteTime の代わりに CreationTime にします。

Set-ItemProperty C:\hoge.png -name CreationTime -value '2019/11/20 00:00:00'

フォルダ配下のすべてのファイルを変更

実際の仕事では、特定の1つのファイルではなくファルダ内のすべてのファイルを変更の対象にしたい場合が多いと思います。
そんな時は以下のようにします。

Get-ChildItem c:\納品物 -File | ForEach-Object { Set-ItemProperty $_ -name LastWriteTime -value '2019/11/20 00:00:00' }

これで「c:\納品物」フォルダ内のすべてのファイルに対し、更新日が変更されます。

また フォルダ内の下位フォルダについても変更対象にしたい時は、以下のように -Recurse をつけると下位フォルダ内のファイルも対象になります。

Get-ChildItem c:\納品物 -Recurse -File | ForEach-Object { Set-ItemProperty $_ -name LastWriteTime -value '2019/11/20 00:00:00' }

ファイル名で対象を絞る

さらにファルダ配下のすべてのファイルではなく、ファイル名や拡張子で対象を絞ることもできます。
以下のように -Include *.png をつけることで「c:\納品物」フォルダ配下の「.png」のファイルのみ変更の対象になります。

Get-ChildItem c:\納品物 -Recurse -File -Include *.png | ForEach-Object { Set-ItemProperty $_ -name LastWriteTime -value '2019/11/20 00:00:00' }

まとめ

探せばGUI操作でタイムスタンプを一括変更するツールもありますが、PowerShellでできたほうが楽な場合もあります。
その時の状況に合わせて使い分けるのが良いですね。

タイトルとURLをコピーしました