意図せずにファイルの作成日時が過去になったことはないでしょうか。各ファイルの日時は作成したデバイスの設定時間に左右されます。
以下は,使っていないカメラを引っ張り出しで何も設定せずに撮影したファイルです。
これではファイル管理上で正しく判別できずに困ることになりますので,今回はPowerShellを使用して,フォルダ内すべてのファイルの日時を操作するスクリプトを紹介し,詳しく解説します。
目次
指定した日付で作成日時,更新日時を上書きする場合
$folderPath = "C:\path\to\your\folder" # 変更したいフォルダのパス
$newCreatedDate = Get-Date "2024-05-03 10:00:00" # 新しい作成日時
$newModifiedDate = Get-Date "2024-05-03 12:00:00" # 新しい更新日時
Get-ChildItem -Path $folderPath -File | ForEach-Object {
$_.CreationTime = $newCreatedDate
$_.LastWriteTime = $newModifiedDate
}
スクリプトの処理内容
- フォルダ内のファイルを取得
Get-ChildItem -Path $folderPath -File
で,指定フォルダ内のすべてのファイルを取得します。
- 各ファイルの日時を変更:
ForEach-Object
にて,取得した各ファイルに対して以下の処理をします。$_.CreationTime = $newCreatedDate
で,作成日時を$newCreatedDate
変数の値に設定します。$_.LastWriteTime = $newModifiedDate
で,更新日時を$newModifiedDate
変数の値に設定します。
アクセス日時の情報で作成日時,更新日時を上書きする場合
$folderPath = "C:\path\to\your\folder" # 変更したいフォルダのパス
Get-ChildItem -Path $folderPath -File | ForEach-Object {
$accessTime = $_.LastAccessTime
$_.CreationTime = $accessTime
$_.LastWriteTime = $accessTime
}
スクリプトの処理内容
- フォルダ内のファイルを取得:
Get-ChildItem -Path $folderPath -File
で,指定フォルダ内のすべてのファイルを取得します。
- 各ファイルの日時を変更:
ForEach-Object
にて,取得した各ファイルに対して以下の処理をします。$accessTime = $_.LastAccessTime
で,最終アクセス日時を$accessTime
変数に格納します。$_.CreationTime = $accessTime
で,ファイルの作成日時を$accessTime
の値に設定します。$_.LastWriteTime = $accessTime
で,ファイルの更新日時を$accessTime
の値に設定します。
各コマンドレットの詳細
- Get-ChildItem: 指定されたパス内のアイテム(ファイルやフォルダ)を取得します。
-Path
パラメータ: 検索対象のパスを指定します。-File
パラメータ: ファイルのみを対象として検索します。
- ForEach-Object: コレクション内の各オブジェクトに対してスクリプトブロック内のコマンドを実行します。
$_
: 現在のオブジェクトを表します。
- Get-Date: 指定された文字列または現在のシステム日時を表す
DateTime
オブジェクトを取得します。 - $_.LastAccessTime: ファイルが最後にアクセスされた日時を取得するプロパティです。
注意点
- データの消失: ファイル自身の情報を書き換えています。変更前に必ずバックアップを取っておくことを推奨します。
コメント