🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Spring Batch

Spring Batchは、バッチ処理向けに定義されたオープンソースのフレームワーク。エンタープライズシステムで避けて通れないバッチ処理を可能にします。設定ファイルに別定義することで効率よく開発することがで可能です。

Q&A

解決済

2回答

2766閲覧

batで特定の文字をファイル名から削除したい(サブディレクトリ込)

jiiiko

総合スコア1

Spring Batch

Spring Batchは、バッチ処理向けに定義されたオープンソースのフレームワーク。エンタープライズシステムで避けて通れないバッチ処理を可能にします。設定ファイルに別定義することで効率よく開発することがで可能です。

0グッド

0クリップ

投稿2021/01/09 18:11

前提・実現したいこと

batでカレントディレクトリと、サブディレクトリの特定の文字をファイル名から削除したい。


削除したいワード:あいうえお-

before
¥あいうえお-フォルダ
¥あいうえお-フォルダ¥あいうえお-かきくけこ.zip

after
¥フォルダ
¥フォルダ¥かきくけこ.zip

試したこと

※1 このサイトを参考に、カレントディレクト内の特定文字を削除することはできました。

サブディレクトリも一括で削除しようと以下のことを試したが実現できませんでした。
・for /r でサブディレクトリのパスを取得し、さらにfor /f "tokens="を回す。 ※2
・"for /R %target_dir% %%i in (
.txt) do ren %%i %%~ni"のような拡張子変更のrenを改変た

4時間ぐらい格闘したのですが実現できませんでした。
分かる方いましたら、ご教授お願い致します。

カレントディレクトリのみのソースコード ※1

@echo off setlocal enabledelayedexpansion echo ============================================= echo リネームを開始します。 echo ============================================= pushd %~dp0 :: リネームしたファイル数 set /a FILE_NUM=0 ::削除するキーワード set keyword=asdfg for /f "tokens=*" %%i in (!s!) do ( set a=%%i echo s=!s! ::リネーム ren "!a!" "!a:%keyword%=!" echo a=!a! ::リネーム名出力 echo !a:%keyword%=! set /a FILE_NUM+=1 ) echo ============================================= echo %FILE_NUM%個のファイルをリネームしました。 echo ============================================= pause

試したソースコード ※2

@echo off setlocal enabledelayedexpansion echo ============================================= echo リネームを開始します。 echo ============================================= pushd %~dp0 :: リネームしたファイル数 set /a FILE_NUM=0 ::削除するキーワード set keyword=asdfg for /r %%f in (*) do ( set s=%%f for /f "tokens=*" %%i in (!s!) do ( set a=%%i echo s=!s! ::リネーム ren "!a!" "!a:%keyword%=!" echo a=!a! ::リネーム名出力 echo !a:%keyword%=! set /a FILE_NUM+=1 ) ) echo ============================================= echo %FILE_NUM%個のファイルをリネームしました。 echo ============================================= pause

環境

・Windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cleaner

2021/01/09 19:17

どこで躓いているのでしょうか?コードをよく読めば回答はできるかもしれませんが時間がかかってしまします。 具体的にどんな状態なのか追記してもらえますか?(エラーで止まる、流れるけど思った通りにならない等)
guest

回答2

0

ren はカレントフォルダのファイル名しか変更できません。
カレントフォルダをForループの中で変更してもいいですが、めんどくさいのでmoveを使います。
また、ファイル名の変更とフォルダ名の変更は別々に行います。

@echo off set /a FILE_NUM=0 setlocal enabledelayedexpansion set KEYWORD=aaa :: ファイル名を変更するループ for /r /d %%d in (*.*) do ( echo %%d for %%f in (%%d*!KEYWORD!*.*) do ( :: ファイルのパスの表示 echo %%f :: ファイル名を表示, %%f に ~nx をつけるとファイル名を取り出す echo %%~nxf :: ファイル名を変数にセット set VAR=%%~nxf :: 変更後のファイル名を表示 echo "!VAR:%KEYWORD%=!" :: ファイル名変更 move "%%f" "%%d\!VAR:%KEYWORD%=!" set /a FILE_NUM+=1 ) ) :: フォルダ名を変更するループ for /r /d %%d in (*!KEYWORD!*.*) do ( echo %%d :: フォルダ名を変数にセット set VAR=%%d :: フォルダ名変更 move "%%d" "!VAR:%KEYWORD%=!" ) pause

以上の内容は次のサイトを参考に調べて作成しました。お気に入りに登録することをお勧めします。
https://www.pg-fl.jp/program/dos/doscmd/
あとはお好みでアレンジしてください。

投稿2021/01/09 20:03

cleaner

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

カレントとサブの直下のみです。階層を掘っていくのはキツイです。。

::削除するキーワード(例:aaa-hoge.txt) set keyword=aaa- echo ============================================= echo ディレクトリ変更 echo ============================================= for /d /r . %%N in (%keyword%*) do ( set hoge=%%N echo !hoge! move !hoge! !hoge:%keyword%=! ) echo ============================================= echo ファイル変更 echo ============================================= for /r . %%N in (%keyword%*) do ( set fuga=%%N echo !fuga! move !fuga! !fuga:%keyword%=! )

投稿2021/01/09 19:41

umau

総合スコア831

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jiiiko

2021/01/16 05:45

一部改変はしましたが、目的の動きをすることができました。有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問