[PR]

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ren コマンドでワイルドカードを使う場合の注意

コマンドプロンプトに慣れているなら当然のように使っていると思います。いまさら何の説明がいるのかというくらい基本的なものですけど、このコマンドが備えているほんの少しの便利な機能と、それを帳消しにするクソ仕様を知っていますか?

まず便利な機能というのはワイルドカードが使えることです。例えば ren *.txt *.bat と打ってみると拡張子を一括で変更できます。これはいいですね。しかし ren * *.bat と打っても同じ事が起こります。これも便利と思うかもしれませんけど、こういう勝手な自動補完がクソのもとなんです。

C:\hoge>dir /b
1.txt
2.txt
3.txt

C:\hoge>ren *.txt *.bat

C:\hoge>dir /b
1.bat
2.bat
3.bat

C:\hoge>ren * *.txt

C:\hoge>dir /b
1.txt
2.txt
3.txt

C:\hoge>

もちろん一文字のワイルドカードも使えます。例えば ren *.txt ?.txt と打つと先頭一文字だけを残してくれます。二文字なら ren *.txt ??.txt です。

ワイルドカードは便利です。でもクソ仕様の原因もワイルドカードに起因するのです。とりあえず ren *.txt *.a.b と打ってみますと、これは *.a.b になってくれます。ここまではいいです。次に ren *.a.b *.1.2 と打ってみますと *.1.2 にはなってくれません。なぜか *.a.1.2 になってしまいます。

C:\hoge>dir /b
1.txt
2.txt
3.txt

C:\hoge>ren *.txt *.a.b

C:\hoge>dir /b
1.a.b
2.a.b
3.a.b

C:\hoge>ren *.a.b *.1.2

C:\hoge>dir /b
1.a.1.2
2.a.1.2
3.a.1.2

C:\hoge>

基本的にワイルドカードの後ろに付ける文字は拡張子と解釈してしまうようです。ワイルドカード直後にドットがある場合はドットより先が拡張子と解釈されるようで、上の例では *.a.b は a.b が拡張子として txt と置換されています。一方、ワイルドカードの直後に文字がある場合はその文字が拡張子の一部と解釈されるようで、例えば ren test.txt *a.b は test.txta.b になります。 tesa.b にはなりません。

ということはワイルドカードの前に文字を付けたら先頭に文字を付加してくれるのかというと、そんなことはなく普通に置換してくれるので、結果として感覚的な統一性を欠いた処理になります。つまり ren test.txt *a と打つと test.txta にしちゃうのに ren test.txt a* と打つと aest.txt にしやがります。あ゛ー!ってなります。

C:\hoge>dir /b
test1.txt
test2.txt

C:\hoge>ren test1.txt a*

C:\hoge>ren test2.txt *a

C:\hoge>dir /b
aest1.txt
test2.txta

C:\hoge>

拡張子を変に分けないで素直に全体をファイル名として扱えば何の問題もなさそうなのに。ドットファイルとかまともに扱えるのかしら。まあ普通は Windows では扱いませんけど。

微妙な便利さがうまく使えそうだと思って調べると、大抵やっぱり使えません。いろいろ試してムキー!ってなればいいと思います。

Post a comment

Sponsored Link
Information
Menu
アンケート
Links
Mail Form

名前:
メール:
件名:
本文:

Sponsored Links
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。