• 締切済み

ファイル名の特定の一文字のみリネームしたい

思い出集  ∟タケル   ∟誕生会    ∟メッセージ  ∟マイコ   ∟旅行    ∟メッセージ  ∟靖子   ∟クリスマス    ∟メッセージ 上記のようなフォルダ構造があり、各「メッセージ」フォルダ内に、txtファイル、もしくはcsvファイルが保存されています。 このファイル名は「○○○○-○○○○.txt」もしくは「○○○○-○○○○.csv」となっています。 ○○は全角文字(ひらがな・カタカナ・漢字)が複数。それらの間に挟まれるように「-」(半角ハイフン)が入力されています。 この「-」を「_」にリネームしたいと考えています。「バッチファイル」で一括変更したいです。 我流で下記のコードをバッチ化して実行しましたが、うまくいきませんでした;; set char=- set char2=_ set ext=csv|txt for %%f in ( *%char%*.%ext% ) do ( ren %%f *%char2%*.%ext% ) 環境はwindowsです。なにとぞよろしくお願いいたします。

みんなの回答

  • davidfox
  • ベストアンサー率58% (21/36)
回答No.3

No,2 です。 ヘルプに書かれている以上の事は私も知らないので、動けばそれが正解、な処です。 が、改良されたコード中で for の中に for が入るのは少々意図が異なる気がするので、for は別個にした方が良い気がします。 と、ここまで書いた処で、for 内では、もう拡張子は見ていないので、それならばテンポラリ ファイルは1個にまとめる案が浮かびます。 dir *-*.txt /s /b > tmp.txt dir *-*.csv /s /b >> tmp.txt for /f "tokens=1,2 delims=-" %%i in (tmp.txt) do ( call :SUB %%i %%j ) goto :END :SUB ren %1-%2 %~n1_%2 exit /b :END 以上、机上の案なので参考として受け取ってもえらえればと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • davidfox
  • ベストアンサー率58% (21/36)
回答No.2

一発でやるには中々難しいです。 「思い出集」から .txt だけ処理するとして、 テンポラリファイルへリストを吐き、それを処理する例です。 もっと工夫すれば一発で出来るかも知れません... dir *-*.txt /s /b > tmp.txt for /f "tokens=1,2 delims=-" %%i in (tmp.txt) do ( call :SUB %%i %%j ) goto :END :SUB ren %1-%2 %~n1_%2 exit /b :END

zyaba
質問者

お礼

ご教示いただいたコードを元に、下記のように編集してみました。 dir *-*.txt /s /b > tmp.txt dir *-*.csv /s /b > tmp2.txt for /f "tokens=1,2 delims=-" %%i in (tmp.txt) do ( call :SUB %%i %%j for /f "t okens=1,2 delims=-" %%i in (tmp2.txt) do ( call :SUB %%i %%j ) goto :END :SUB ren %1-%2 %~n1_%2 exit /b :END すると、うまくできました! これでもコード上問題はありませんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

バッチファイルでやる積極的な理由が無いのなら、ファイル名一括変更ツールを使うのがいいのでは?

zyaba
質問者

補足

今回はどうしてもバッチファイルで処理したいと考えています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • バッチファイルでファイル名を連番にしたい

    たとえばフォルダの中にfirst.txt second.txt third.txtがあって、 これを11.txt 12.txt 13.txtの順の連番でバッチファイルで リネームされるようにするにはどうすればよいのでしょうか? (forth.txtがあれば14.txtになります。ForとRen等使用で可能?) ご存知の方がおられましたらご回答をよろしくお願いします。

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

    お世話になります。 バッチファイルのコマンドについて質問させていただきます。 【やりたいこと】 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”を「処理済み」フォルダへ移動させるだけでも構いません。 このような処理は可能でしょうか? どなたかご教授いただけますでしょうか。よろしくお願い致します。

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

    お世話になります。 バッチファイルのコマンドについて質問させていただきます。 【やりたいこと】 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”を「処理済み」フォルダへ移動させるだけでも構いません。 このような処理は可能でしょうか? どなたjかご教授いただけますでしょうか。よろしくお願い致します。

  • バッチファイルのfor文の使い方がわかりません。

    バッチ初心者です。 指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、 for文を使うところでつまづいてしました。 for文のin( )内にディレクトリを入れると失敗してしまいます。 失敗例↓ for %%f in (d:\aaa\*.txt) do ( set fname=%%f set fname=!fname:%1=%2! ren %%f !fname! ) for文を for %%f in (*.txt) にすると成功します。 IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか?? helpを読んでもわかりません。 試しにオプション付けて for /r d:\aaa %%f in (*.txt) do echo %%f を実行すると成功するので、 for /r d:\aaa %%f in (*.txt) do ( ・・・・ ) にしてみましたが、成功しません。。。

  • バッチファイル フォルダ名をファイル名に置き換える

    ある複数フォルダに格納されているファイルを、フォルダ名に リネームするバッチファイルを作成したいです。 ●リネーム前 C:\リネーム\あいうえお\data.txt C:\リネーム\かきくけこ\data.txt C:\リネーム\さしすせそ\data1.txt C:\リネーム\さしすせそ\data2.txt C:\リネーム\たちつてと\data1.log C:\リネーム\たちつてと\data2.log C:\リネーム\なにぬねの\data.log ↓ ●リネーム後 C:\リネーム\あいうえお\あいうえお.txt C:\リネーム\かきくけこ\かきくけこ.txt C:\リネーム\さしすせそ\さしすせそ 1.txt C:\リネーム\さしすせそ\さしすせそ 2.txt C:\リネーム\たちつてと\たちつてと 1.log C:\リネーム\たちつてと\たちつてと 2.log C:\リネーム\なにぬねの\なにぬねの.log 知識がなく申し訳ありませんが、お助け願います。。 pause cd c:\リネーム dir /s /b C:\リネーム\ > file.tmp for /f "delims=" %%F in (file.tmp) do ( for /f "delims=\ tokens=3" %%D in ("%%F") do ( REN %%F C:\リネーム\%%D\%%D%%~xF )) del file.tmp pause どうもうまくいきません。。。

  • dosでのファイルリスト取得について

    初歩的な質問ですいません。 以下のバッチファイルを作成しようと思っています。 ・特定のフォルダ配下にあるcsvファイルをバッチファイルの引数に設定したいと思っています。 例) フォルダに A.csv B.csv C.txt があるとすると バッチファイル A.csv バッチファイル B.csv を実行する。 いまいち、ファイルリストを取得してるループ処理させる方法がわかりません。

  • バッチファイルによるフォルダ名の変更

    バッチファイルによるフォルダ名の変更 あるフォルダに存在する日付(西暦)を名称としたフォルダ、例えば 2010-0530 を、バッチファイルを実行することで、和暦(元号)、例えば H220530 に名前を変え、その後に特定のアプリケーション(Picasa3)を実行したいのです。 インターネット上の情報を参考に、 @echo off cd /d K:\VIDEOPHOTO\H220401から for /d %%f in ( * ) do call :sub "%%f" start C:\"Program Files\Google\Picasa3\Picasa3.exe" exit /b :sub set dirname=%1 set dirname=%dirname:(=【% set dirname=%dirname:)=】% set dirname=%dirname:2010-=H22% ren %1 %dirname% goto :EOF というバッチファイルを作り、概ね希望どおりの結果となったのですが、既に同名のフォルダが存在していた場合(例ではH220530というフォルダが既に存在)、フォルダ名の変更はされずスルーされてしまいます。 既に同名のフォルダが存在していても、フォルダ名を変更(既存フォルダと統合)することはできますでしょうか?

  • ファイル名による移動

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

  • 【バッチファイル】for繰り返しがうまくいかない

    バッチファイルの置いてあるフォルダ内(ついでにサブフォルダ内も)の 特定の拡張子(今回は.txt)ファイル全てを対象に (1)ある行ある列n文字目から2文字を読み込む×2 (2)読み込んだ文字をそのファイル名の先頭に追加 というバッチファイルを作りたいです。 具体例 テキストの中身↓ a.txt ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○xx ○○yy ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... →ファイル名を「xxyya.txt」にしたい そこで素人ながら下記のようなバッチファイルを作成してみましたが、 フォルダ内にある1つ目のファイルに対してはうまく動くのですが 2つ目以降はリネーム出来ません。 フォルダ内すべての.txtファイルに実行するための 対処法がお分かりになれば、ご教授いただけると幸いです。 「rename.bat」 cd /d %~dp0 rem .txtファイルを列挙 for /f "usebackq tokens=*" %%i in (`dir /s /b *.txt`) do ( set name=%%~xni rem 特定の行列の文字列を抜き出して変数へ格納 for /f "skip=5 tokens=2,3" %%a in (%%i) do ( set front=%%a set back=%%b rem 7行目以降は不要なのでforから離脱 goto break ) :break rem 抜き出した文字列からさらに必要な文字を抜き出して変数へ set hed="%front:~2,2%%back:~2,2%" rem 元のファイル名へ追記 ren %name% %hed%%name% )