2009-06-15 unk
PowerShellでファイルを自動リネーム (ハッシュマップ)
名前順だとfuga hoge piyoと並んでしまうけど、表示上hoge fyga piyoにしたいので、頭に連番を振ってみました。
hoge.txt→01_hoge.txt, fuga.txt→02_fuga.txt みたいな感じで。
$map = @{hoge="01"; fuga="02"; piyo="03";}
ls |
foreach {
if($_.GetType().Name -ne "FileInfo"){
continue #ファイル以外はスキップ
}
if( ($_.Name -match "^(\w+)\.txt") -and $map[ $Matches[1] ]){ #マッチかつ$mapにあるか
ren $_.Name -newName ( $map[ $Matches[1] ] + "_" + $_.Name ) #頭に$map[$1]つけてリネーム
}
}
ls(=Get-ChildItem)の結果をforeach(=ForEach-Object)に渡して、個々のファイルについて名前を調べて頭に番号を付けている。
ハッシュの書き方は
$hash = @{ key = "value"; key2 = "value2"; }
比較演算子は
-eq とか -ne
-and -or 等