TVアニメ「極黒のブリュンヒルデ」プロモーション映像
アニメ『極黒のブリュンヒルデ』(2014)
幼馴染と再会したと思ったら、その子は首の後ろに自爆スイッチがついてる「魔法使い」に改造されてて、なんだか切ない話。一日一日を大切に生きないといけないですね。「魔法使い」の能力は、様々でしたが、カズミのコンピュータを使う能力とか、小鳥の自分と他人を入れ替える「転位」の魔法が気にいりました。面白かったので、漫画も購入する予定。
さてWindowsのコマンドプロンプトで複数ファイルの名前を入れ替えたいときに、重宝するコマンドrenameってのがあります。
ちょっと使ってみます。
まずはテンポラリディレクトリを作成。
C:\Users\takk>mkdir tmp C:\Users\takk>cd tmp C:\Users\takk\tmp>
適当にファイルを作ります。
C:\Users\takk\tmp>for /l %i in (1,1,6);do @echo HELLO>file_%i.txt
6ファイルできました。
C:\Users\takk\tmp>dir /b/s C:\Users\takk\tmp\file_1.txt C:\Users\takk\tmp\file_2.txt C:\Users\takk\tmp\file_3.txt C:\Users\takk\tmp\file_4.txt C:\Users\takk\tmp\file_5.txt C:\Users\takk\tmp\file_6.txt C:\Users\takk\tmp>
では、renameします。拡張子のtxtをbinに変更。
C:\Users\takk\tmp>rename file*.txt file*.bin C:\Users\takk\tmp>dir/b/s C:\Users\takk\tmp\file_1.bin C:\Users\takk\tmp\file_2.bin C:\Users\takk\tmp\file_3.bin C:\Users\takk\tmp\file_4.bin C:\Users\takk\tmp\file_5.bin C:\Users\takk\tmp\file_6.bin C:\Users\takk\tmp>
次は、ファイル名のfile_をtest_に変更。
C:\Users\takk\tmp>rename file*.bin test*.bin C:\Users\takk\tmp>dir /b/s C:\Users\takk\tmp\test_1.bin C:\Users\takk\tmp\test_2.bin C:\Users\takk\tmp\test_3.bin C:\Users\takk\tmp\test_4.bin C:\Users\takk\tmp\test_5.bin C:\Users\takk\tmp\test_6.bin C:\Users\takk\tmp>
このようにrenameは一見簡単に使えるのですが、ディレクトリ構成が複雑な場合に、対応できません。
次はPowerShellでファイル名置換してみます。
ファイルを削除した後、 以下のようにランダムにディレクトリ作成します。
C:\Users\takk\tmp>powershell "1..6 | %{$n=1}{$r=random; $dir=$r -replace('(..)','$&\\'); mkdir $dir | out-null; 1..4 | %{echo $_' '$r >> $dir/file_$n.txt}; $n++ }"
ディレクトリの深い階層にfile_1.txt~6.txtまで作りました。
C:\Users\takk\tmp>powershell "gci -r -n -include *.txt" 14\06\78\26\71\file_4.txt 14\55\90\38\9\file_5.txt 19\51\76\09\09\file_2.txt 20\65\59\82\30\file_3.txt 51\55\94\62\2\file_1.txt 61\41\04\04\8\file_6.txt
さて、ファイル名を変更してみます。file_1.txt~3.txtをtmp.binというファイル名に変更します。
C:\Users\takk\tmp>powershell "gci -r -n -include *[123].txt | %{ren $_ tmp.bin}"
確認してみましょう。
C:\Users\takk\tmp>powershell "gci -r -n -include *.txt,*.bin" 14\06\78\26\71\file_4.txt 14\55\90\38\9\file_5.txt 19\51\76\09\09\tmp.bin 20\65\59\82\30\tmp.bin 51\55\94\62\2\tmp.bin 61\41\04\04\8\file_6.txt C:\Users\takk\tmp>
3ファイルがtmp.binになりました。
次は、拡張子txtをcに変更します。
C:\Users\takk\tmp>powershell "gci -r -n -include *.txt | % {ren $_ $($(split-path -leaf $_) -replace 'txt','c')}"
確認します。
C:\Users\takk\tmp>powershell "gci -r -n -include *.*" 14\06\78\26\71\file_4.c 14\55\90\38\9\file_5.c 19\51\76\09\09\tmp.bin 20\65\59\82\30\tmp.bin 51\55\94\62\2\tmp.bin 61\41\04\04\8\file_6.c C:\Users\takk\tmp>
簡単ですね。
正規表現を使って置換もできます。
C:\Users\takk\tmp>powershell "gci -r -n -include *.* | % { ren $_ $($(split-path -leaf $_) -replace '[56]','[$&]')}" C:\Users\takk\tmp>powershell "gci -r -n -include *.*" 14\06\78\26\71\file_4.c 14\55\90\38\9\file_[5].c 19\51\76\09\09\tmp.bin 20\65\59\82\30\tmp.bin 51\55\94\62\2\tmp.bin 61\41\04\04\8\file_[6].c C:\Users\takk\tmp>
5または6の一文字が、$&に格納されるので、両脇に[]がつけた形に変更されました。
コメント