xlogI125’s blog

パソコン作業を効率化したい

Excelでファイル名を変更したい 2

メモ

下記の動作を行うPowerShellスクリプトです。

  • Get-ChildItemのBaseName、Extension、NameプロパティをExcelシートに書き出す
  • ExcelシートでRename-Itemの文字列を生成する

セキュリティソフトによっては、日本語のファイル名を対象に多くのRename-Itemを実行しようとすると、ランサムウェアとしてブロックされるようです。

使い捨てスクリプト

# PowerShell 5.1
# Windows 10, Excel 2019

# このスクリプトをメモ帳で保存する際は、
# 文字コードを UTF-8(BOM付き) としてください。

# Excelがバックグラウンド プロセスとして残るので、
# タスク マネージャーからタスクを終了させてください。

# エラー処理などは考慮していません

Set-StrictMode -Version Latest

$xlWBATWorksheet = -4167

$xlApp = New-Object -COMObject "Excel.Application"
$xlApp.Visible = $true
$xlApp.ScreenUpdating = $false
$xlWb = $xlApp.Workbooks.Add($xlWBATWorksheet)
$xlWs = $xlWb.Worksheets("Sheet1")
$xlRng = $xlWs.Cells()
$xlRng.Columns("A:C").NumberFormatLocal = "@"
$getChildItem = Get-ChildItem
$baseName = $getChildItem.BaseName
$extension = $getChildItem.Extension
$fileName = $getChildItem.Name
for ($i=0; $i -lt $fileName.Length; $i++) {
    $xlRow = $i + 1
    $xlRng.cells($xlRow, 1).Value = $baseName[$i]
    $xlRng.cells($xlRow, 2).value = $extension[$i]
    $xlRng.cells($xlRow, 3).value = $fileName[$i]
    $xlRng.cells($xlRow, 4).Value = "NEW_" + $fileName[$i]
    $xlRng.Cells($xlRow, 5).Formula = `
        "=`"Rename-Item " `
        + "-Path `"`"`" & C" + $xlRow + " & `"`"`" " `
        + "-NewName `"`"`" & D" + $xlRow + " & `"`"`"`"" 
}
$xlApp.ScreenUpdating = $true