• ベストアンサー

ファイル名の一部を変更するバッチファイル

フォルダ内にある複数ファイルを、バッチファイルで一括ファイル名変更をしようとしています。 元ファイル名は、 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になってしまう・・・ 現状のファイル名の一部を取得して、改名後のファイル名につける ということはできるのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

日付の部分を?に ren ??_ABCA_K.txt ??_件数表.txt ワイルドカードの?は1文字何でも良いとなりますので 23日と24日があれば両方変更されます それと、件数表と合否のファイル名が同じですよ

kanpai0501
質問者

お礼

この方法でできました。 ワイルドカード”?”の使い方が頭にありませんでした・・・ たいへん助かりました。ありがとうございます!

その他の回答 (3)

noname#168404
noname#168404
回答No.4

No.2です。 単純なファイルのリネームで良ければ、エディタの使い方の問題のような気がするのですが。 まず、ファイル一覧は「コマンドプロンプト(DOS窓)」から一覧を取得できます。 > DIR *.TXT > RENAME.BAT そして、そのファイルをたとえば秀丸エディタなどであればキーボードマクロが使えますから、 23_ABCA_K.txt を REN 23_ABCA_K.txt 23_件数表.txt というバッチファイルを作るのはそんなに難しくないと思います。 (但し、「件数表」など漢字の部分に関しては手入力になるとは思いますが) あるいは、Excelなどでも列の文字列を連結することでできるとは思いますが。

  • uneuneQ
  • ベストアンサー率58% (38/65)
回答No.3

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に変えました。

kanpai0501
質問者

お礼

変数に入れる という発想までは出たのですが それを記述するスキルがありませんでした。 他の件でも参考にできそうです。 ありがとうございます。

noname#168404
noname#168404
回答No.2

答えになっていませんが 「Perl」を使われてはいかがでしょう。(フリーソフト) Perlと言うと、webでのCGIの代名詞のように言われていますが、元々はファイル内容やファイル名などのテキスト文字列を処理するためのものです。 失礼かも知れませんが、上記質問を読んでも明確な変換規則がよく分かりませんし、限られたところで簡潔明瞭に説明できない場合もあるでしょう。 それならば、試行錯誤しながらでも、自分で作られてみてはいかがでしょう。 ※Windowsでは、多少の制約があるかも知れませんが。

kanpai0501
質問者

お礼

会社の環境で、フリーソフトを簡単に入れられないので Perlは検討しませんでした。 分かりにくい内容にも関わらず、回答ありがとうございます。 たしかに、説明するの難しいのですよね・・・ No.1の方の方法でできました。

関連するQ&A

  • まとめてファイル名を変更したい

    あるフォルダに存在するファイル名に”RAWDATA"を含むテキストファイルを 任意のファイル名でCSVに変更したいのですが、 バッチファイルで set /p filename= rename d:\あるフォルダ\RAWDATA*.txt %filename%*.csv で簡単にできるかなと思ったのですが、 ”RAWDATA”の部分は入力した分しか変更されないようでした。 例えば”abc”と入力すると”abcDATA”となります。 入力したファイル名に置き換わるようにするには どのようにしたら良いのでしょうか? バッチ初心者ですがよろしくお願いします。

  • 【バッチファイル】ホスト名をファイル名につけたい【変更】

    バッチファイルで作成したファイルのファイル名(○○.txt)を 「ホスト名.txt」に変更したいのですが やり方がよくわかりません。 どなたかご存知の方、お教え願います。 宜しくお願いします。

  • 一括でファイル名の一部を置換したい

    LinuxのFedora Core 10, シェルにtcshを使用しています。よろしくお願いします。 ======================================================================= 複数のディレクトリ内に、"(from home)"のような文字列を含むファイルがあり、 それらのファイル名から一括で"(from home)"という文字列を取り除きたいのですが ======================================================================= 例えば以下のように、2つのディレクトリ(Directory1,Directory2)の下に、 "(from home)"という文字列を含むファイルが2つずつある場合を考えて、 /Directory1/sample (from home).txt         sample2 (from home).txt /Directory2/ sample3 (from home).txt          sample4 (from home).txt > rename "(from home)" "" `find / -name "(from home)" -print` を試したのですが上手くいかず、 > foreach i (`find / -name "(from home)" print`) foreach? rename "(from home)" "" $i foreach? end でも上手くいきませんでした。 もしかしたらfindコマンドで見つけたファイル名をrenameコマンドに 上手く渡せていないのかと思うのですが、どのようにすれば良いのでしょうか? また別の方法でも、一括でファイル名の一部を変更する方法があれば、 ご教授お願い致します。

  • ファイル名による移動

    ファイル名に4桁のキーをつけています。 このキーの上2桁に合致するフォルダに ファイルを移動するバッチを組みたいのですが、 可能でしょうか? たとえば、ファイル名「0101.txt」「0102.txt」「0201.txt」があった場合、 「0101.txt」「0102.txt」⇒01フォルダへ 「0201.txt」⇒02フォルダへ 頭が固くてすみません・・・ よろしくお願いいたします。

  • CSVファイルを読み込み、ファイル名を変更。

    CSVファイルを読み込み、ファイル名を変更。 使用言語はperlです。perlは初心者です。 アルゴリズムが、 CSVファイルを読み込み→2次元配列に格納→ファイル名変更 という流れになっているプログラムを作成中です。 CSVファイルの中身は あ.txt , a.txt い.txt , b.txt う.txt , c.txt です。 CSVファイルを読み込み2次元配列に格納するプログラムは以下のようにしました。 ----------------------------------- $i= 0; open IN, "sample.csv"; while (<IN>) { my @data = (); @data = split (/,/); for (0..@data) {$jdata[$i][$_] = "$data[$_]";} $i++; } close IN; ---------------------------------------- 「あ.txt」を「a.txt」に変更しようとして、この中に rename $jdata[0][0] , $jdata[0][1] ; と書いてみましたが、変換されません。 どう書けばよいのでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • バッチファイルにて指定ファイルの移動について

    初心者の為バッチファイルの御教授お願いします。 D:\tempフォルダ直下に下記のようなファイルがあります。 000008000120160224180000MAIL.TXT 000008000120160225180000MAIL.TXT 000008000120160226180000MAIL.TXT 000008000120160227180000MAIL.TXT みていただくと分かると思いますが日付を含んだファイル名となっております。 このファイル名から日付を取得し、指定した日数より古い日付を持ったファイルをD:\temp\errフォルダへ移動したいと思っています。 例えば日数を1とするとD:\tempに下記のみが残るようにしたいと思っています。 000008000120160227180000MAIL.TXT 残りはD:\temp\errへ移動

  • バッチ(win系)内でのファイル名の取得方法

    こんにちは。 バッチ内で日々動的に変わるファイル名の取得で困っています。 動的に変わるファイル名というのは日付付のファイル名です。 例) 041208_sample.txt 例えば、とあるフォルダ(a)には 041206_sample.txt 041207_sample.txt 041208_sample.txt と複数ファイルがあり、あるシステムから送付されるファイル(date.txt)の内容が"20041208"だった場合に041208_sample.txt(注 20041208_sample.txtでない)を 別なフォルダ(b)に複写するという事を行いたいのです。 仮にファイル名の日付の桁数が「041208」でなく20041206_sample.txtだった場合のバッチコーディング例は for /F %%i in ( date.txt ) do set TXTDATE=%%i copy a\%TXTDATE%_sample.txt b とできるのですが、、、、どのようなテクニックが必要でしょうか? ちなみに動作環境はwindowsNTを使用しております。 よろしくお願いします。

  • Powershell で []付ファイル名を変更する方法

    PowerShell で []付のファイル名を変更しようとしているのですが、 ワイルドカードのエスケープの仕様がよくわからず困っています。 以下のTest-Pathを使ったコマンドはすべて True でしたが Rename-Item (ren) では"オブジェクトは存在しませんという"エラーが出ます。うまくリネームする方法はないでしょうか? ファイル名 [].txt test-path '`[`].txt' →TRUE test-path '``[].txt' →TRUE test-path '[[]].txt' →TRUE ren '`[`].txt' 'a' →エラー ren '``[].txt' 'a' →エラー ren '[[]].txt' 'a' →エラー

  • バッチファイルでファイル名をリネームのコマンド

    お世話になります。 バッチファイルのコマンドについて質問させていただきます。 【やりたいこと】 AAA.batというバッチファイルと”MU_日付.txt”というテキストがあります。 このテキストの日付部分は毎回変わります。例)MU_111226.txt このバッチファイルとMU_日付.txtは同じ階層にあります。 まず、このAAA.batをクリックしたら、この”MU_111226.txt” を ”読み込み.txt” という名前にリネームします。このリネーム処理の時、テキスト名が”MU”で始まるファイル以外は対象にしないようにしたいのです。 次にある処理を行って、その処理が済んだら”読み込み.txt”を”END_MU_111226.txt”といった元のファイル名に”END_”を付けた形でリネームして、同じ階層にある「処理済み」フォルダへ移動させたいのです。 ”END_” + ”元のファイル名”が無理であれば、”MU_111226.txt”を「処理済み」フォルダへ移動させるだけでも構いません。 このような処理は可能でしょうか? どなたかご教授いただけますでしょうか。よろしくお願い致します。

  • 特定ディレクトリ以下の複数のフォルダ名とファイル名を一括で連番にするバッチの作成

    特定のフォルダ(ディレクトリ)以下の複数のフォルダ名とファイル名を 一括で連番にしてくれる方法(連番+拡張子のリネーム)を教えてください。 ソフトでは簡単ですが*.bat ファイルで実行するスクリプトを 知りたいので宜しくお願い致します 例えば フォルダ0 ├フォルダ1 │ ├ a.txt │ ├ b.jpg │ └ フォルダ2 │    └c.exe └ フォルダ3   └ d.exe という構造があったとして 000000 ├000001 │ ├ 000000.txt │ ├ 000001.txt │ └ 000000 │    └000000.txt └ 000002   └ 000000.txt この様に特定ディレクトリ以下の複数のフォルダ名とファイル名を連番 (上記は6桁ですが001,002…など3桁などに対応できる)にしたいのです 以下の方法で特定のフォルダ内のファイルを.txtに変更まではできましたが、 特定のフォルダより下層のファイルを.txtに変更はできませんでした。 REN E:\フォルダ\フォルダ\*.* *.txt 上記のスクリプトは特定フォルダにあるファイルは拡張子の変更が出来ますが、 そのフォルダより下層の複数のフォルダ名とファイル名の拡張子の変更をできないので、 *.batファイルで連番+拡張子のリネームを一括でするスクリプトの明記をお願い致します。 ご存知の方、どの様なご意見でも構いませんので ご回答頂けると幸いです。宜しくお願い致します。