Hatena::ブログ(Diary)

hogeistの日記

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)に渡して、個々のファイルについて名前を調べて頭に番号を付けている。

$mapに対応がないファイルは勿論スキップ

ハッシュの書き方は

$hash = @{ key = "value"; key2 = "value2"; }

比較演算子

-eq とか -ne

論理演算子

-and -or 等

論理演算が-andはのけぞる