• ベストアンサー
  • すぐに回答を!

特定ディレクトリ以下の複数のフォルダ名とファイル名を一括で連番にするバッチの作成

特定のフォルダ(ディレクトリ)以下の複数のフォルダ名とファイル名を 一括で連番にしてくれる方法(連番+拡張子のリネーム)を教えてください。 ソフトでは簡単ですが*.bat ファイルで実行するスクリプトを 知りたいので宜しくお願い致します 例えば フォルダ0 ├フォルダ1 │ ├ a.txt │ ├ b.jpg │ └ フォルダ2 │    └c.exe └ フォルダ3   └ d.exe という構造があったとして 000000 ├000001 │ ├ 000000.txt │ ├ 000001.txt │ └ 000000 │    └000000.txt └ 000002   └ 000000.txt この様に特定ディレクトリ以下の複数のフォルダ名とファイル名を連番 (上記は6桁ですが001,002…など3桁などに対応できる)にしたいのです 以下の方法で特定のフォルダ内のファイルを.txtに変更まではできましたが、 特定のフォルダより下層のファイルを.txtに変更はできませんでした。 REN E:\フォルダ\フォルダ\*.* *.txt 上記のスクリプトは特定フォルダにあるファイルは拡張子の変更が出来ますが、 そのフォルダより下層の複数のフォルダ名とファイル名の拡張子の変更をできないので、 *.batファイルで連番+拡張子のリネームを一括でするスクリプトの明記をお願い致します。 ご存知の方、どの様なご意見でも構いませんので ご回答頂けると幸いです。宜しくお願い致します。

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • notnot
  • ベストアンサー率47% (4744/9999)

バッチでも再帰呼び出しできますよ。 元々ファイル名に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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

たまにできないフォルダがあるのですが、ほとんどの場合 #5と組み合わせることでできました。 この度は質問に答えて下さり有難う御座いました。

質問者からの補足

ご回答有難う御座います。 たとえば、「E:フォルダ\フォルダ」以下のフォルダとファイルを 一括で連番&拡張子にリネームしたい時はどういうスクリプトになりますか? 「E:フォルダ\フォルダ」のパスを入力する場所が分かりません。 宜しくお願い致します。

その他の回答 (4)

  • 回答No.5
  • notnot
  • ベストアンサー率47% (4744/9999)

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スクリプトと全く変更なく同じ というスクリプトですよね

  • 回答No.4
  • notnot
  • ベストアンサー率47% (4744/9999)

#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箇所にしたいのです。 もし宜しければご教授ください。宜しくお願い致します。

  • 回答No.3
  • notnot
  • ベストアンサー率47% (4744/9999)

#2です。 >「E:フォルダ\フォルダ」のパスを入力する場所が分かりません。 バッチの引数にディレクトリを指定してください。 C:\>foo.bat E:\qwer\asdf みたいに。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

調べても全く分かりませんし、できません…。 分かる方誰でも良いのでご存知の方は 「E:フォルダ\フォルダ」のパスを入力したスクリプト を教えてください。宜しくお願い致します。

質問者からの補足

バッチの引数はこのスクリプトでいうとどれになりますか? 「E:フォルダ\フォルダ」のパスを入力してスクリプトを 示して頂けるとわかるので宜しくお願い致します。

  • 回答No.1
  • rivoisu
  • ベストアンサー率36% (97/264)

ディレクトリの深さが不明の場合batで処理できるのでしょうか? VBSのほうがこの処理に向いていると思います。(再帰呼び出しが可能だから)

共感・感謝の気持ちを伝えよう!

質問者からの補足

特定フォルダ以下の下層のファイルサイズを変えることは ディレクトリの深さが不明の場合でも処理できました。 ですから、リーネームや拡張子の変更の場合も*.bat(バッチ)で 処理できるのではないかと思い質問してみました。

関連するQ&A

  • 特定のファイル名に一括リネームできるソフトを探しています。

    みなさんこんばんは。 例えば 001.txt、002.txt、003.txt、004.txt、005.txt・・・ というファイルを 羅生門.txt、鼻.txt、芋粥.txt、煙管.txt、さまよえる猶太人.txt・・・ という特定のファイル名に一括でリネームできるソフトを探しています。 多くの特定の単語をコピー&ペーストで簡単に変換できないものかと考えています。 今はファイルを選択し右クリックで名前の変更から コピー&ペーストでファイル名を一つ一つリネームしているところです。 連番等のリネームソフトは見つけましたが、上記にありますように、 多くのファイルをそれぞれ異なった単語に簡単にリネームできるソフトが なかなか見つけられません。 『ファイルを選択し右クリックで名前の変更』の手間を 省くことができたら現在の作業がずっと楽になるのです。 ご存知の方はどうぞよろしくお願い致します。

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

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

  • フォルダ名をファイル名の頭につけるバッチ

    お世話になります。 現在、ファイルをフォルダ単位で保存していて、保存しているフォルダは数百個あり、各フォルダに入っているファイルの数はまちまちなのですが、各フォルダの中にあるファイル(全てフォルダの直下にファイルを保存しており、サブディレクトリは作成していないはずです)の頭にフォルダ名を一括でつけたいのですが、そのようなバッチファイルは作れるでしょうか? やりたいこととしては、例えば、"6753シャープ"というフォルダ内に複数個のファイル、例えば"01.txt"、"02.txt"、"03.txt"というファイルがある場合、 それらのファイルをまとめてバッチファイルのアイコンにドラッグアンドドロップしたらファイルを"6753シャープ01.txt"、"6753シャープ02.txt"、"6753シャープ03.txt" というようにリネームさせることは可能でしょうか? 使用しているPCはWindows7 Professionalです。

  • ファイル名に親フォルダ名をつけたい

    お世話になります。 VBScriptで、下記のような動きをさせたいのですが、 私の頭では全くわかりませんので、ご知識ある方 何卒よろしくお願いします。 Scriptを実行すると、「対象のテキストファイル」の 名前を「親のフォルダ名+"_"+対象のテキストファイル名」 にしたいのです。 例えば、 hogeフォルダに、 「複数のテキストファイル(拡張子.txt)」 「batファイル」 を置いて、 batファイルを実行すると、 現在のテキストファイルの名前の前に,親のフォルダ名をつけたいという 形です。 ※元のテキストファイル名が,「1.txt」なら「hoge__1.txt」にしたい インターネットで、いろいろ調べたのですが、断片的な情報では、 私の頭ではまったくわかりませんでした。。 そこで、大変申し訳ないのですが、実際に動くソースレベルで 教えて頂きたいので、ご知識ある方、何卒よろしくお願い致します。

  • 特定ディレクトリ以下の複数のファイルのサイズを一括で0にしたい

    特定のフォルダ(ディレクトリ)以下の複数のファイルのサイズを一括で0にしてくれるツールを探しています。 例えば フォルダ0 ├フォルダ1 │ ├ a.txt (5KB) │ ├ b.jpg (1MKB) │ └ フォルダ2 │    └c.exe (20MB) └ フォルダ3   └ f.exe (500MB) という構造があったとして フォルダ0 ├フォルダ1 │ ├ a.txt (0KB) │ ├ b.jpg (0KB) │ └ フォルダ2 │    └c.exe (0KB) └ フォルダ3   └ f.exe (0KB) この様にディレクトリ以下を直接ファイルサイズを0にするようなソフトウェアを探しています。 以下の質問の中でコマンドプロンプトを利用してする方法があります。 http://okwave.jp/qa4340139.html 上記の方法で試してみましたが出来ませんでした。 例えばコマンドプロンプトを開くと C:\Documents and Settings\Owner> のようにはじめに設定されます。この語尾に C:\Documents and Settings\Owner>for /R "E:\フォルダ\フォルダ" %%F in (*) do copy /Y nul %%F のようにしてエンターを押しても「%%F の使い方が誤っています。」 と表示されディレクトリ以下を直接ファイルサイズを0にできません。 心当たりのある方、どの様なご意見でも構いませんので ご回答頂けると幸いです。宜しくお願い致します。

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

    ある複数フォルダに格納されているファイルを、フォルダ名に リネームするバッチファイルを作成したいです。 ●リネーム前 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 どうもうまくいきません。。。

  • 複数フォルダ内のファイルを一括コピーする方法

    環境はWindows7です。 下記構成のファイルを一括で特定のフォルダにコピーする方法を探しています。 C\aaa\111.txt C\aaa\112.txt ・・・ C\bbb\121.txt C\ccc\33.txt ------------------ ⇒C\ddd 配下へコピーしたい 方法(1):F3で「.txt」で検索してヒットしたものを一括でコピーする。 方法(2):.batファイルを使ってやる。 方法(2)について、下記のように書いてみました。 REM 複数フォルダーの不特定多数のファイルを特定フォルダーにコピーする pause cd %~dp0 dir /b No* >list.txt for /F %%i in ( list.txt ) do copy /y %%i\*.txt 特定フォルダー pause カレントディレクトリにある複数フォルダ名をlist.txtに出力し、 それをまた読み込んでforを使って特定フォルダーにコピーする。 これだと同名のファイルがあった場合でも問答無用でどんどん上書きされてしまいます。 「コピーするが両方のファイルを保持する」状態にしたいんですが、 何か方法はないでしょうか・・・?

  • ディレクトリ名をファイル名するバッチファイル

    ディレクトリ名を取得してその名称でフォルダを作るバッチファイルを考えています。 OSはWINDOWS XPです。 こういったディレクトリがあるとします。 111~444:名称が固定のディレクトリ bbb:名称が可変するディレクトリ mmm.bat、xxx.text:111フォルダと同じところにあるファイル 111┬222─bbb┬333─yyy.text    │        └zzz.text    │    └bbb┬333─yyy.text         └zzz.text mmm.bat xxx.text mmm.batを実行すると、111ディレクトリ以下のフォルダ名を取得し、 下記のようにフォルダを作成し、yyy.textの場所にbatファイルと同じ 所にあるxxx.textをコピーして差し替えるという動作をしたいのです。 (zzz.textは内容は違うが同じファイル名です) 444┬222─bbb┬333─xxx.text    │       └zzz.text    │    └bbb┬333─xxx.text        └zzz.text バッチコマンドで、ディレクトリ名を取得して空のフォルダを作る所までは 下記のようにできたのですが、 444┬222─bbb─333    │    └bbb─333 二つのzzz.textのコピー方法と、yyy.textの場所にxxx.textをコピーするにはbbbという可変するディレクトリを通らなければいけないのでその取得方法がわかりません。 分かる方は是非お教えください。 言葉が足りないところは補足もいたします。 よろしくお願いいたします。

  • 複数フォルダー名を一括リーネーム 2

    複数フォルダー名を一括リーネーム 下記の質問から付随の質問になります。 https://okwave.jp/qa/q9519352.html -------------------------------------------------------------------------------------- 上記で調査中に  少し調べると参考になるbatがありました。 https://qiita.com/hippocampus-coronatus/items/3e312fe89cfa4648a07c ------------- 参考batは、  hugahuga-debug.txtの末尾にある文字列の"-debug"を削除し、"hugahuga.txt"のようなファイル名に変更する。   ですが、対象がファイル名なのでこのままでは利用できません。 フォルダーを対象にする場合は、どのように変更したら良いですか?

  • フォルダ内のファイル名を一括変更したい

    windows10を使っています。 指定したフォルダ内のファイル名を一括変更したいです。 具体的には、以下のようにファイル名内の空白を「_」に置換したいです。 変更前:スクリーンショット 2021-01-01 104535.jpg ↓ 変更後:スクリーンショット_2021-01-01_104535.jpg バッチファイルで手軽に実行できるとうれしいです。 やりたいことの具体例: 空白置換.batを実行したら、空白置換.batが置いてあるフォルダ内のファイル名が一括変更できる。 空白置換.bat内で、変更対象とする拡張子を指定できる。 よろしくお願いいたします。