Corredor

ウェブ、プログラミングの勉強メモ。

PowerShell でファイルの作成日時・更新日時を任意の日時に変更する (指定ディレクトリ配下のファイルに一括適用する方法も)

前回、MacOS において、setfiletouch コマンドを使ってファイル作成日時と更新日時を任意の日時に書き換える技を紹介した。

neos21.hatenablog.com

同様に、Windows でファイルの作成日時・更新日時を任意の日時に変更するには、PowerShell を使うのが楽。

基本的な使い方:1つのファイルの作成日時・更新日時を変更する

まずは PowerShell 上で、カレントディレクトリ配下にある単一ファイルを指定して、作成日時と更新日時を変更してみる。

# 作成日時を変更する
> Set-ItemProperty "./MyFile.txt" -Name CreationTime -Value "2015/01/02 00:01:02"

# 更新日時を変更する
> Set-ItemProperty "./MyFile.txt" -Name LastWriteTime -Value "2016/02/03 01:02:03"

コレだけ。

複数ファイルを一気に変更する

呼び方が分かったら、あとは Get-ChildItem と併用して、指定ディレクトリ配下のファイルについて一括で作成日時や更新日時を変更してやれば良い。

# 作成日時を一括変更する
> Get-ChildItem -Path "C:\Neo\Work" | ForEach-Object { Set-ItemProperty $_.FullName -Name CreationTime -Value "2015/01/02 00:00:00" }

# 更新日時を一括変更する
> Get-ChildItem -Path "C:\Neo\Work" | ForEach-Object { Set-ItemProperty $_.FullName -Name LastWriteTime -Value "2015/01/02 00:00:00" }

# 作成日時と更新日時を一括変更する
> Get-ChildItem -Path "C:\Neo\Work" | ForEach-Object { Set-ItemProperty $_.FullName -Name CreationTime -Value "2015/01/02 00:00:00"; Set-ItemProperty $_.FullName -Name LastWriteTime -Value "2016/01/03 00:00:00" }

PowerShell スクリプトとして組む場合は、それぞれの -Value に渡す値を変数で受け取って指定するように変えれば良さそうかな。


ちなみに、Mac にも PowerShell が入れられるので使ってみたところ、Mac 上では CreationTime による変更は反映されず、LastWriteTime に、これまでの「変更日」(Finder 上の表記) より過去日を入れると、それに合わせた「作成日」に変わった。そこから再度 LastWriteTime に少し未来の日時を渡してやると、「変更日」だけを変えることができた。つまり、より古く古く「作成日」を変更することはできるが、より新しい「作成日」への変更は Mac ではできない、ということになるか。素直に setfile コマンドを使おう。

うごかして学ぶWindows PowerShell

うごかして学ぶWindows PowerShell