LoginSignup
1
1

More than 5 years have passed since last update.

PowerShellでファイル名に更新日時を付与する

Posted at

はじめに

芸のない投稿ばかりですまない。
フォルダを指定し、フォルダ内のファイルについて、ファイルの更新日時を取得し、ファイル名に追記するスクリプトです。
現ファイル名の頭かケツかをユーザーが選択できるようになってます。

環境

  • Windows10 Pro Ver.1703
  • PowerShell

ソースコード

FileRenamer.ps1
# 更新日時追加装置
# フォルダ内のファイルすべてに更新日時を追加する

# ダイアログを使えるようにする
[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
$process = [System.Diagnostics.Process]::GetCurrentProcess()
$window = New-Object Windows.Forms.NativeWindow
$window.AssignHandle($process.MainWindowHandle)

# ダイアログを表示
$dialog = New-Object System.Windows.Forms.FolderBrowserDialog
$dialog.Description = "フォルダを選択してください"
$dialog.SelectedPath = $PWD
$ret = $dialog.ShowDialog($window)
if($ret -eq [System.Windows.Forms.DialogResult]::OK){
    $Path = $dialog.SelectedPath
} else {
    Read-Host "キャンセルされました。ENTERキーを押してください。"
    return
}

# 追加位置の指定
$pos = Read-Host "付与する位置を、ファイル名の先頭(f)か末尾(r)か選択してください。(f/r)"

# 実処理
foreach($file in Get-ChildItem $Path | Where-Object {-not $_.PSisContainer}){
    $LastTime = ($file.LastWriteTime).ToString("yyyyMMdd")
    $oldname = [System.IO.Path]::GetFileNameWithoutExtension($file)
    switch($pos){
        "f"{
            $newname = $LastTime +"_"+$oldname
        }
        "r"{
            $newname = $oldname+"_"+$LastTime
        }
        default{
            Read-Host "キャンセルされました。ENTERキーを押してください。"
            return
        }
    }
    $file | Rename-Item -NewName {$_.name -replace "$oldname","$newname"}
}
Write-Host "完了しました"

あとは汎用化と普及のために、普段使わない人でも起動しやすくするアレを用意。
スクリプトと同フォルダに入れておいて、「こっちを起動してね」的なReadme.txtと一緒に入れておけばOK

Run.bat
@echo off
powershell -NoProfile -ExecutionPolicy Unrestricted .\FileRenamer.ps1
exit

結果

入力はf

before
Mode                LastWriteTime         Length Name                                                                                            
----                -------------         ------ ----                                                                                            
-a----       2018/06/15      9:17              0 aaa.a                                                                                           
-a----       2018/06/15      9:17              0 aaa.b                                                                                           
-a----       2018/06/15      9:17              0 aaa.jx                                                                                          
-a----       2018/06/15      9:17              0 aaa.m       
after
Mode                LastWriteTime         Length Name                                                                                            
----                -------------         ------ ----                                                                                            
-a----       2018/06/15      9:17              0 20180615_aaa.a                                                                                  
-a----       2018/06/15      9:17              0 20180615_aaa.b                                                                                  
-a----       2018/06/15      9:17              0 20180615_aaa.jx                                                                                 
-a----       2018/06/15      9:17              0 20180615_aaa.m       

差し支えない感じ。
偉い人はいちいちファイル並び順を更新日時でソートしてくれないので、
このようにわかりやすい状態で渡してあげると説明がスマートになる(当社調べ)

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1