- ベストアンサー
特定フォルダ以下のファイルを連番にリネームする方法
- 特定のフォルダ以下の複数のフォルダ名とファイル名を一括で連番にしてくれるバッチスクリプトの作成方法を教えてください。
- 特定フォルダ以下のファイルを連番にリネームするためのスクリプトを*.batファイルで作成する方法を教えてください。
- 特定ディレクトリ以下の複数のフォルダ名とファイル名を連番(3桁などに対応)に変更する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
バッチでも再帰呼び出しできますよ。 元々ファイル名に000000.txtとかあればrenが失敗するケースも出てくるでしょうけど、そこは考慮してません。 @echo off setlocal rem 引数があればそのディレクトリに移って処理 if not "%~1"=="" pushd "%~1" rem バッチファイル名を覚えておく set X="%~dpnx0" rem ファイルの処理 set F=1000000 for %%A in (*) do call :file "%%A" rem ディレクトリの処理 set D=1000000 for /d %%A in (*) do call :dir "%%A" goto :EOF :file rem バッチファイルならスキップ if %X%=="%~dpnx1" goto :EOF rem 連番下6桁にリネーム ren %1 %F:~-6%.txt set /a F+=1 goto :EOF :dir rem サブディレクトリ内部を処理 call %X% %1 rem 連番下6桁にリネーム ren %1 %D:~-6% set /a D+=1 goto :EOF
その他の回答 (4)
- notnot
- ベストアンサー率47% (4900/10358)
1ファイルに書き込んじゃうと変更が面倒だと思いますけど、まあ、前提が不明なので。 @echo off setlocal rem 引数があればそのディレクトリに移って処理 rem 引数が無ければ特定ディレクトリに移って処理 if not "%~1"=="" (pushd "%~1") else pushd "E:\abc\def" ~以下同じ
お礼
訂正 >ただ、ファイル名の連番変更ができないようです。 (正)ただ、『フォルダ名』の連番変更ができないようです。
補足
ご回答有難う御座います。 *.batを試したところ全てのファイルは連番+拡張子変更が出来ました。 ただ、ファイル名の連番変更ができないようです。 現在の状況は 例えば フォルダ ├フォルダ │ ├ a.txt │ ├ b.jpg │ └ フォルダ │ └c.exe └ フォルダ └ d.exe という構造があったとして フォルダ ├フォルダ │ ├ 000000.txt │ ├ 000001.txt │ └ フォルダ │ └000000.txt └ フォルダ └ 000000.txt 以上のようにフォルダ名が連番に変更されません。 質問にあるような 000000 ├000001 │ ├ 000000.txt │ ├ 000001.txt │ └ 000000 │ └000000.txt └ 000002 └ 000000.txt のようにフォルダ名も連番にしたいのですが、 宜しければご教授ください。宜しくお願い致します。 @echo off setlocal rem 引数があればそのディレクトリに移って処理 rem 引数が無ければ特定ディレクトリに移って処理 if not "%~1"=="" (pushd "%~1") else pushd "E:\abc\def" ~以下#2スクリプトと全く変更なく同じ というスクリプトですよね
- notnot
- ベストアンサー率47% (4900/10358)
#2です。バッチファイルの実行の仕方がわからないと言うことですかね?? 案1:目的のフォルダE:\aaa\bbbに、#2のバッチファイルを入れてクリック 案2:例えば、C:\foo.bat に#2のバッチファイルを書き込んで、もう一つC:\bar.batという名前で、 C:\foo.bat E:\aaa\bbb という一行のバッチファイルを作って、それをクリック 案3:例えば、C:\foo.bat に#2のバッチファイルを書き込んで、コマンドプロンプトを開き、 C:\foo.bat E:\aaa\bbb と打ち込んで、Enter #3では案3のつもりで書きました。 質問意図と違っていたら、何に困っているのかもうちょっと詳しく。
補足
ご回答有難う御座います。 案1や案2、案3のようにバッチファイルを移動したり、 2つファイルを用意したり、コマンドプロンプトを 立ち上げたりすると、複数のパスを指定する時に少々煩雑になります。 私の知りたいことは一つの*.batファイルに#2のスクリプトを 書き込んで、そのスクリプト内のパスを指定後、 この*.batをダブルクリックすれば実行できるという方法です。 (つまり、1つのバッチファイルのみで実行する方法です) たとえば以下の#2のスクリプトで「E:\フォルダ\フォルダ\」以下の フォルダ名とファイル名を変更する際に、上記のパスをどこに 入力すればよいかということです。私がやってみてダメだった #2のスクリプトにパスを書き足したものを表示しておきます。 @echo off setlocal rem 引数があればそのディレクトリに移って処理 if not "%~1"=="" pushd "%~1" rem バッチファイル名を覚えておく set X="%~dpnx0" rem ファイルの処理 set F=1000000 for "E:\フォルダ\フォルダ\" %%A in (*) do call :file "%%A" rem ディレクトリの処理 set D=1000000 for /d "E:\フォルダ\フォルダ\" %%A in (*) do call :dir "%%A" goto :EOF :file rem バッチファイルならスキップ if %X%=="%~dpnx1" goto :EOF rem 連番下6桁にリネーム ren "E:\フォルダ\フォルダ\" %F:~-6%.txt set /a F+=1 goto :EOF :dir rem サブディレクトリ内部を処理 call %X% %1 rem 連番下6桁にリネーム ren "E:\フォルダ\フォルダ\" %D:~-6% set /a D+=1 goto :EOF 以上のようにしましたが当然実行できませんでした。 上記の場合パスを入力した4箇所のみ修正をしていますが、 これを入力の手間を省く為1箇所にしたいのです。 もし宜しければご教授ください。宜しくお願い致します。
- notnot
- ベストアンサー率47% (4900/10358)
#2です。 >「E:フォルダ\フォルダ」のパスを入力する場所が分かりません。 バッチの引数にディレクトリを指定してください。 C:\>foo.bat E:\qwer\asdf みたいに。
お礼
調べても全く分かりませんし、できません…。 分かる方誰でも良いのでご存知の方は 「E:フォルダ\フォルダ」のパスを入力したスクリプト を教えてください。宜しくお願い致します。
補足
バッチの引数はこのスクリプトでいうとどれになりますか? 「E:フォルダ\フォルダ」のパスを入力してスクリプトを 示して頂けるとわかるので宜しくお願い致します。
- rivoisu
- ベストアンサー率36% (97/264)
ディレクトリの深さが不明の場合batで処理できるのでしょうか? VBSのほうがこの処理に向いていると思います。(再帰呼び出しが可能だから)
補足
特定フォルダ以下の下層のファイルサイズを変えることは ディレクトリの深さが不明の場合でも処理できました。 ですから、リーネームや拡張子の変更の場合も*.bat(バッチ)で 処理できるのではないかと思い質問してみました。
お礼
たまにできないフォルダがあるのですが、ほとんどの場合 #5と組み合わせることでできました。 この度は質問に答えて下さり有難う御座いました。
補足
ご回答有難う御座います。 たとえば、「E:フォルダ\フォルダ」以下のフォルダとファイルを 一括で連番&拡張子にリネームしたい時はどういうスクリプトになりますか? 「E:フォルダ\フォルダ」のパスを入力する場所が分かりません。 宜しくお願い致します。