2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

« システム標準のVBSファイルをCMD化する。 | トップページ | WScript.ShellのExec()で、コンソールアプリを非表示で実行するラッパー »

2008年8月22日 (金)

renameコマンドのワイルドカードの怪?

renameコマンドのワイルドカードの「仕様」が「正しく」書いてあるところがないようです。

ren 旧ファイル名 新ファイル名

旧ファイル名のワイルドカードは、普通の解釈のとおり。

新ファイル名のワイルドカードは、普通の解釈と異なる!

基本形1

abc*

左から3文字(3バイトではなく)をabcに変えて、4文字目以降は元ファイル名を変えない。

基本形2

*xyz

元ファイル名を右から探して最初のxを見つけて、そこから右をxyzに変える。
元ファイル名にxがないときは末尾に追加。

応用形1

abc*xyz

基本形1と基本形2の組み合わせ。つまり、
左から3文字(3バイトではなく)をabcに変えて、
元ファイル名の4文字目以降を右から探して最初のxを見つけて、そこから右をxyzに変える。
元ファイル名の4文字目以降にxがないときは末尾に追加。

応用形2

*xyz*

基本形2と基本形1の組み合わせ。つまり、
元ファイル名を右から探して最初のxを見つけて、そこから右をxyzに変え、それ以降は元ファイル名を変えない。
元ファイル名にxがないときは末尾に追加。

応用形3

*.xyz

とすれば拡張子をxyzに変更する。

応用形4

*.

とすれば拡張子を削除する。

ワイルドカードの仕様としては、.に普通の文字以上の特別な意味はない。
ファイル名の仕様として、最後の.は削除される。

このように、新ファイル名のワイルドカードと、旧ファイル名のワイルドカードは無関係です。
なので、旧ファイル名にワイルドカードを使わなくても、新ファイル名だけにワイルドカードが使えます。

結局、renameコマンドでは、ワイルドカードを使って文字位置の変更はできません。文字の削除や追加が可能なのは末尾だけです。
そういう場合は、for文とfor変数や環境変数の編集機能を使います。

« システム標準のVBSファイルをCMD化する。 | トップページ | WScript.ShellのExec()で、コンソールアプリを非表示で実行するラッパー »