- ベストアンサー
ファイル名の一部を変更するバッチファイル
フォルダ内にある複数ファイルを、バッチファイルで一括ファイル名変更をしようとしています。 元ファイル名は、 23_ABCA_K.txt 23_ABCL_K.txt 23_ABCL_E.txt 23_ABCA_K.txt というように、頭2桁(日付)は共通で4ファイルあります。 これを、頭2桁を維持して、アルファベットのところを変更したいのです。 23_ABCA_K.txt→23_件数表.txt 23_ABCL_K.txt→23_集計表.txt 23_ABCL_E.txt→23_エラー数.txt 23_ABCA_K.txt→23_合否.txt という具合です。 rename 23_ABCA_K.txt 23_件数表.txt とすると、頭2桁が変化したときに対応できないし、 %date: などでシステム日付を取得すると、 23_ABCA_k.txtを24日に改名すると、23が保持されず24になってしまう・・・ 現状のファイル名の一部を取得して、改名後のファイル名につける ということはできるのでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
日付の部分を?に ren ??_ABCA_K.txt ??_件数表.txt ワイルドカードの?は1文字何でも良いとなりますので 23日と24日があれば両方変更されます それと、件数表と合否のファイル名が同じですよ
その他の回答 (3)
No.2です。 単純なファイルのリネームで良ければ、エディタの使い方の問題のような気がするのですが。 まず、ファイル一覧は「コマンドプロンプト(DOS窓)」から一覧を取得できます。 > DIR *.TXT > RENAME.BAT そして、そのファイルをたとえば秀丸エディタなどであればキーボードマクロが使えますから、 23_ABCA_K.txt を REN 23_ABCA_K.txt 23_件数表.txt というバッチファイルを作るのはそんなに難しくないと思います。 (但し、「件数表」など漢字の部分に関しては手入力になるとは思いますが) あるいは、Excelなどでも列の文字列を連結することでできるとは思いますが。
- uneuneQ
- ベストアンサー率58% (38/65)
REM カレントフォルダの全txtを対象にforループ for %%f in (*.txt) do call :sub %%f REM 終わり exit REM サブルーチン :sub REM moji0にファイル名セット set moji0=%1% REM moji1にファイル名先頭3文字をセット(アンダーバー含む) set moji1=%moji0:~0,3% REM moji2にファイル名先頭4文字以降をセット set moji2=%moji0:~3% REM IF処理でリネーム if %moji2%==ABCA_K.txt ren %1 %moji1%件数表.txt if %moji2%==ABCL_K.txt ren %1 %moji1%集計表.txt if %moji2%==ABCL_E.txt ren %1 %moji1%エラー数.txt if %moji2%==ABCB_K.txt ren %1 %moji1%合否.txt REM 責任は持てないので対象フォルダをコピーしてから試してください。 REM 対象フォルダへバッチファイルを入れて実行してください。 REM echo命令は適当に入れてください。 REM ファイル名がだぶっているので、ABCB_K→合否.txtに変えました。
お礼
変数に入れる という発想までは出たのですが それを記述するスキルがありませんでした。 他の件でも参考にできそうです。 ありがとうございます。
答えになっていませんが 「Perl」を使われてはいかがでしょう。(フリーソフト) Perlと言うと、webでのCGIの代名詞のように言われていますが、元々はファイル内容やファイル名などのテキスト文字列を処理するためのものです。 失礼かも知れませんが、上記質問を読んでも明確な変換規則がよく分かりませんし、限られたところで簡潔明瞭に説明できない場合もあるでしょう。 それならば、試行錯誤しながらでも、自分で作られてみてはいかがでしょう。 ※Windowsでは、多少の制約があるかも知れませんが。
お礼
会社の環境で、フリーソフトを簡単に入れられないので Perlは検討しませんでした。 分かりにくい内容にも関わらず、回答ありがとうございます。 たしかに、説明するの難しいのですよね・・・ No.1の方の方法でできました。
お礼
この方法でできました。 ワイルドカード”?”の使い方が頭にありませんでした・・・ たいへん助かりました。ありがとうございます!