rename-files on win32 with cmd.exe

:help rename-files に書いてあること ( 複数の file を一気に rename する ) を cmd.exe を 'shell' にしている win32 環境でやろうというアレ。件の page に書いてある例の通りにやるとするととりあえず正解は以下のようになる。

:read !dir /b *.c
%s/\v^(.+)\.c/rename & \1.bla/
:write ++enc=cp932 ++ff=dos !cmd

それぞれ以下が注意点。

  1. filename のみを引っ張ってくるには "dir" に /b option ( 多分 "bare" 「裸の」の b ) を指定する ( :read !dir /? 参照 ) 。
  2. "mv" の代わりに "rename" を使う。
  3. 'fileencoding' と 'fileformat' を指定して書き出したものを "cmd.exe" に喰わせてやる ( :help :write_c ) 。
    • 'encoding' と 'fileformats' を変更していなければ多分この指定はいらないと思うんだけどここを指定しておくといつでもどこでも使えるので覚えておいた方がいいかもしれない。
    • 'fileencoding' は言語に依るんだけど日本語版なら "cp932" で。他は知らない。 'fileformat' は "dos" 固定で問題なし。