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()で、コンソールアプリを非表示で実行するラッパー »