fc2ブログ

PREV | PAGE-SELECT | NEXT

≫ EDIT

【PowerShell】指定フォルダからファイル名を取得しリネームする

EDCBの自動エンコードで必要そうな感じだったので、
PowerShellでリネームのスクリプトを書きました。
スポンサーリンク




単純にスクリプトを実行すれば機能します。今までbatにts投げてエンコードしてましたが、
EDCB用にはディレクトリ指定で実行しようかなと。
PowerShellの簡単な使用方法をエントリに書きましたので見てください。
PowerShellを使ってみた Firefoxは情弱のたしなみ

スクリプト内のコメントにもあるように、
指定したフォルダにあるファイルの名前を指定した文字に置き換えてリネームします。
恐らくどんな文字でもリネームできるのではないかと。

$Beforeと$Afterに置換したい文字を追加すれば適用されます。
置換文字は正直横長すぎるとは思うのですが、縦は縦で行使いすぎる気が・・・

$Oldpath = @((Get-ChildItem $Save).FullName)
Get-ChildItemで$Saveフォルダ内のファイルのフルパスを$Oldpathに配列として格納
@()で囲めば強制的に配列にできます。


$Oldname = @(Split-Path $Oldpath -Leaf)
上のフルパスをSplit-Pathのパラメータ-Leafでファイル名のみにします。
-Parentであれば$Oldpathの親ディレクトリのみ

$Newname += $Oldname[$i].Replace($Before[$j],$After[$j])
$iの初期値は0。カウンタなので処理が終わると+1加算されていきます。
これは
.Replaceで$Oldname[$i]に含まれる$Before[$j]を$After[$j]置換しています。

$Newpath += Join-Path $Parent[$i] $Newname[$i]
これはJoin-Pathで$Parent[$i]と$Newname[$i]をパスとして結合しています。
「\」は自動的に補ってくれるので便利です。


 Move-item -LiteralPath $Oldpath[$i] $Newpath[$i]
Move-itemを使って$Oldpath[$i]を$Newpath[$i]に移動して結果的にリネームしています。
パラメータには-LiteralPathを使用しているので、
ワイルドカードなどを単純な文字として扱えます。


最初はサイト参考ににRename-Itemを使っていましたが、
どうやら角括弧[]をリネームできないようです。

Windows PowerShell を使って複数のファイル名を変更する
programming logbook: ファイル名に角括弧[]がついてるとRename-Itemで失敗する


$Newpath[$i] = Join-Path $Parent[$i] $Newname[$i]
PowerShellよくわかっていないもんで、
上の様な感じに配列の指定位置に代入しようとしてエラーよくだしていました。^^;



ではでは
関連記事
スポンサーリンク

| powershell | 23:40 | comments:0 | trackbacks:0 | TOP↑















非公開コメント

http://higitune.blog106.fc2.com/tb.php/127-796acdf5

PREV | PAGE-SELECT | NEXT