PowerShellでファイル名をもとにファイルの更新日時を変更する
フォルダ・ファイル一覧を出力する (この場合は a.txt)
code:カレントディレクトリ以下のファイル一覧出力.ps1
Get-ChildItem -Recurse | foreach {$_.FullName} > a.txt
正規表現置換する
元ファイル名が Screenshot_20201015-180402.png の場合
code:正規表現例_置換前.txt
^(.*?Screenshot_(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})\.png)$
code:正規表現例_置換後.txt
Set-ItemProperty "$1" -name LastWriteTime "$2/$3/$4 $5:$6:$7"
code:PowerShellで置換、変更対象以外は除外.ps1
Get-Content -Path a.txt | foreach {$_ -replace "^(.*?Screenshot_(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})\.png)$","Set-ItemProperty "$1" -name LastWriteTime "$2/$3/$4 $5:$6:$7"" -replace "^(?!Set-ItemProperty ").+?$",""} > a.ps1
.ps1 ファイルの中身を確認し、よさげなら実行する
code:run.ps1
.\a.ps1
注意
PowerShell では ` がエスケープ文字
多分もっといい方法ある
もう少し頑張れば .ps1 ファイルを経由せずにパイプだけでいけると思う
Windows PowerShell 5.1.22000.282 (Windows 11), PowerShell Core 7.1.5 で確認
参考 (このページ書ききってから見つけた)
もう少し頑張った例
日付だけ変えて時刻はそのままにする方法とか更新日時の代わりに作成日時を変更する方法とか載ってる
作成日時は CreationTime