PowerShellフォルダ内のファイル名を作成日時に変更するバッチスクリプト

PoweShell コンピュータ
PowerShell

はじめに

わたしは、作成した画像データのファイル名を日付時刻(yyyyMMddHHmmss)形式で保存しています。
もっぱら画像データをペイントソフトで加工して保存する際のファイル名を日付時刻形式にしていますが、たまたま画像を未加工でファイル名のみ変更したい案件がありましたので、一括でファイル名を変更するスクリプトを作りました。
タイムスタンプの書き込み日時でファイル名を変更します。

スクリプト

#
# フォルダ内のファイル名を当日日付時刻に変更する
#
# ファイル名:RenameFileDateTime.ps1
#
param(
    [string]
    $TargetDir =  (Join-Path $env:USERPROFILE "Pictures\Input")
)

$ErrorActionPreference = "stop"

$count = 0
Get-ChildItem -LiteralPath $TargetDir -Recurse | ? {
    -not ($_.PSIsContainer)
} | % {
    $in = $_.FullName
    $base = ($_.LastWriteTime).ToString("yyyyMMddHHmmss")
    $out = Join-Path $_.DirectoryName ($base + $_.Extension)


    $count = $count + 1
    
    echo "${count} ${in} ${out}"
    move $in $out
}

実行

実行前

実行後

注意事項

同一ファイル名の処理がされていませんので更新日時が同じファイルがある場合エラーとなります。
重複ファイル名の処理を追加してください。
Powershell重複しないファイル名の生成
はじめにWindowsのエクスプローラでフォルダを作成すると「新しいフォルダー」が出来上がります。続けてフォルダを作成すると「新しいフォルダー(2)」というフォルダが出来ます。2回目のフォルダ作成時「新しいフォルダー」が既に存在しているので...

コメント