- 締切済み
ファイル名の特定の一文字のみリネームしたい
思い出集 ∟タケル ∟誕生会 ∟メッセージ ∟マイコ ∟旅行 ∟メッセージ ∟靖子 ∟クリスマス ∟メッセージ 上記のようなフォルダ構造があり、各「メッセージ」フォルダ内に、txtファイル、もしくはcsvファイルが保存されています。 このファイル名は「○○○○-○○○○.txt」もしくは「○○○○-○○○○.csv」となっています。 ○○は全角文字(ひらがな・カタカナ・漢字)が複数。それらの間に挟まれるように「-」(半角ハイフン)が入力されています。 この「-」を「_」にリネームしたいと考えています。「バッチファイル」で一括変更したいです。 我流で下記のコードをバッチ化して実行しましたが、うまくいきませんでした;; set char=- set char2=_ set ext=csv|txt for %%f in ( *%char%*.%ext% ) do ( ren %%f *%char2%*.%ext% ) 環境はwindowsです。なにとぞよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- davidfox
- ベストアンサー率58% (21/36)
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)
一発でやるには中々難しいです。 「思い出集」から .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
- kmee
- ベストアンサー率55% (1857/3366)
バッチファイルでやる積極的な理由が無いのなら、ファイル名一括変更ツールを使うのがいいのでは?
補足
今回はどうしてもバッチファイルで処理したいと考えています。
お礼
ご教示いただいたコードを元に、下記のように編集してみました。 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 すると、うまくできました! これでもコード上問題はありませんでしょうか?