質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
86.02%
Spring Batch

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

Q&A

解決済

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

jiiiko
jiiiko

総合スコア1

Spring Batch

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

2回答

0グッド

0クリップ

1521閲覧

投稿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

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

cleaner

2021/01/09 19:17

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

回答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

総合スコア805

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

jiiiko

2021/01/16 05:45

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Spring Batch

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