#はじめに
芸のない投稿ばかりですまない。
フォルダを指定し、フォルダ内のファイルについて、ファイルの更新日時を取得し、ファイル名に追記するスクリプトです。
現ファイル名の頭かケツかをユーザーが選択できるようになってます。
#環境
- 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
差し支えない感じ。
偉い人はいちいちファイル並び順を更新日時でソートしてくれないので、
このようにわかりやすい状態で渡してあげると説明がスマートになる(当社調べ)