ファイル名に作成日時のプレフィクスを追加する

ファイルやディレクトリにプレフィクス(接頭詞)として作成日時を示す文字列を付加すると、時系列ソートすることによりファイル管理の負担が減ります。

たとえば、myfile.txt というファイルの作成日時が2022年11月13日の18時53分32秒の場合

myfile.txt

というファイル名を

2022_1113_185332_myfile.txt

というファイル名に一発で変更できると非常に便利です。これを PowerShell で実現します。

ここで一発で変更するのに PowerShell のスクリプトファイルに対象のファイルをマウスでドラッグアンドドロップしてパスが取得できればいいのですが、PowerShell ではそれができません。

この記事の後半で、裏ワザをつかってドラッグアンドドロップする方法を解説します。

まずは下記の ps1 スクリプトファイルを用意してください。以降の説明の都合上、ファイル名は add_prefix.ps1 という名称にしてください。処理の実際についてはファイルのコメントを参考にしてください。

つぎに "c:\powershell_script" というディレクトリを作成して、その中に add_prefix.ps1 ファイルを配置してください。

要はフルパスで "c:\powershell_script\add_prefix.ps1" ということです。

#パワーシェルのバージョンを表示する.
Write-Host ( $host.Version )

# ドラッグアンドドロップされたファイルまたはディレクトリのパスを取得する.
$fp_src = $args[0]

# ファイルまたはディレクトリの親ディレクトリを取得する.
$the_dir = Split-Path $fp_src

# ファイルまたはディレクトリのプロパティを取得する.
$prop = Get-ItemProperty $fp_src

# プロパティのうち、生成時刻を取得する.
$dtm = $prop.CreationTime

# 年月日時分秒のそれぞれの文字列を取得する.
$y4 = $dtm.Year.ToString("0000")
$m2 = $dtm.Month.ToString("00")
$d2 = $dtm.Day.ToString("00")
$hh = $dtm.Hour.ToString("00")
$mm = $dtm.Minute.ToString("00")
$ss = $dtm.Second.ToString("00")

# ファイルに付加するプレフィクス文字列を生成する.
$prefix = "{0}_{1}{2}_{3}{4}{5}" -f $y4, $m2, $d2, $hh, $mm, $ss

# フルパスからファイルパス(拡張子つき)を取得する.
$fnm_src = Split-Path $fp_src -Leaf

# ファイル名称に年月日時分秒のプレフィクスをアンダスコアで接続して付加する.
$fnm_dst = $prefix + "_" + $fnm_src

# 親ディレクトリを示す文字列と新しいファイル名を結合してフルパスを作る.
$fp_dst = Join-Path $the_dir $fnm_dst

# 現在の変数の中身を表示する.
Write-Host $fp_src
Write-Host $the_dir
Write-Host $fnm_src
Write-Host $prefix
Write-Host $fnm_dst
Write-Host $fp_dst

# ファイルまたはディレクトリの名前を変更する.
Move-Item $fp_src $fp_dst -Force

# 終了時は適当なキー入力を要求する.
Read-Host "Push any key to quit"

以降は、PowerShell スクリプトにマウスでファイルアイコンをドラッグアンドドロップして実行する方法を、下記の手順(1)~(4)に示します。

(1) add_prefix.ps1 ファイルを右クリックしてショートカットファイルを作成し、そのショートカットファイルだけをデスクトップに移動して配置します。

(2) PowerShell実行ファイルのフルパスを調べてメモします。
( 私の環境では c:\Program Files\PowerShell\7\pwsh.exe でした )

(3) デスクトップに移動したショートカットファイル自体を右クリックしてプロパティを開く。

(4-1) プロパティのリンク先の欄に下記の文字列を入力してください。絶対パスを囲んでいるセミコロンもちゃんと記述してください。

"c:\Program Files\PowerShell\7\pwsh.exe" -ExecutionPolicy RemoteSigned -File add_prefix.ps1

要は「PowerShell実行ファイルのフルパス」 -ExecutionPolicy RemoteSigned -File 「スクリプトのファイル名」と記述するということです。

(4-2) プロパティの作業フォルダ―の欄に下記の文字列を入力してください。フォルダ(ディレクトリ)の絶対パスを囲んでいるセミコロンもちゃんと記述してください。

"c:\powershell_script"

上記の手順(1)~(4)を実施することで、ドラッグアンドドロップ実行の準備ができました。

任意のファイルをデスクトップにあるショートカットファイルにドラッグアンドドロップしてください。作成日時を示した YYYY_MMDD_hhmmss_ というプレフィクスがファイル名に付加されるはずです。