- ベストアンサー
バッチファイルで複数フォルダのファイルを結合する方法
- バッチファイルを使用して、複数のフォルダ内にあるlist.txtというテキストファイルを結合する方法を詳しく教えてください。
- Windows10で、バッチファイルを作成して複数のフォルダ内のlist.txtファイルを結合する方法を教えてください。
- 複数のフォルダに分かれているlist.txtファイルを一つに結合するためのバッチファイルの作成方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
動作確認してないのだけど、私も調べて作ってみました。 自信は、あまり無い。 C:\testにlist.txtとalllist.txtがあったら、それらの中身は消える。 @echo off cd C:\test c: dir /b /s list.txt > list.txt echo alllist.txt >alllist.txt for /f %%F in (list.txt) do ( type "%%F" >> alllist.txt ) 参考URL 「入門講義【第15章】 いろんなフォルダからファイルを集める」 https://jj-blues.com/cms/kogi15/
その他の回答 (2)
- NuboChan
- ベストアンサー率47% (785/1650)
以下では、どうですか ? c:\testに以下のバッチを作成して保存、 ダブルクリックで実施ではどうですか ? for /d %%i in (*) do ( pushd . cd %%i for %%j in (*) do ren "%%j" "%%i_%%j" move * ../ popd rd "%%i" ) copy *.txt merge.txt
お礼
教えて頂きました上記のコードを実行してみました。 生成されたmerge.txtには、 各フォルダの中のlist.txtファイルの内容が結合された 内容が入っていましたが、 各フォルダが削除されて、 各フォルダの中のファイルが、 c:\testフォルダの中に展開(移動)されてしまいました。 No2の回答様の回答で解決しました。 ありがとうございまた。
- NuboChan
- ベストアンサー率47% (785/1650)
バッチでは無く、WSHでは以下参考 testフォルダの中身のサブディレクトリも含めた中にある txtファイルを任意のディレクトリ[test2]にコピー. その際、txtファイルが重複しても大丈夫なように、 「そこまでのパス + ファイル名」とリネームした後で結合 Option Explicit Dim Sour, Dest, Ext, Fso, Win Dim Msg Sour = "C:\test" :'コピー元フォルダ Dest = "C:\test2" :'コピー先フォルダ Ext = "txt" :'コピー対象の拡張子 Set Fso = CreateObject("Scripting.FileSystemObject") Set Win = Wscript.CreateObject("Shell.Application") '--再帰呼び出しでコピーを実行 Sub copyFiles(parent, sour, dest) Dim folder, fi, fname Set folder = Win.NameSpace(sour) For Each fi In folder.Items If fi.IsFolder Then copyFiles fi.Name, sour & "\" & fi.Name, dest ElseIf fso.GetExtensionName(fi.Name) = Ext Then '--コピー先にファイルが存在する If Fso.FileExists(Dest & "\" & fi.Name) Then fname = Dest & "\" & parent & fi.Name '--存在しない Else fname = Dest & "\" & fi.Name End If Fso.CopyFile sour & "\" & fi.Name, fname :'コピー実行 End If Next End Sub '--コピー先フォルダがなければ作成 If Fso.FolderExists(Dest) Then Else Fso.CreateFolder(Dest) End If '--コピー実行 copyFiles "", Sour, Dest cd C:\test2 type *.txt > C:\ /test2/all.txt
お礼
回答ありがとうございます。 C:\testというフォルダを作成して このフォルダの中に、 20000101,20210425,20210426の3つのフォルダを作成して、 各フォルダの中にlist.txtを入れて、 教えていただいたコード全体を入力したファイル(test.vbs)を C:\においてtest.vbsをダブルクリックして実行しましたが、 Windows Script Hostというタイトルのダイアログが表示されて、 スクリプト: C:\test.vbs 行: 39 文字: 6 エラー:ステートメントがありません。 コード:800A0400 ソース: Microsoft VBScript コンパイルエラー というエラーが発生します。 test.vbsの39行目は、 cd C:\test2 で、C:\test2というフォルダはできていません。 念のため、C:\test2というフォルダを作成して、 実行してみましたが、同じエラーが発生します。 また、コマンドプロンプトを管理者として実行で開いて、 C:\test.vbsを実行してみましたが、 同じエラーが発生します。 よろしくお願いします。
お礼
教えて頂きましたコードでうまくいきました。 なかなかよいやり方だと感心しました。 なお、 dir /b /s list.txt > list.txt を実行すると、同じファイル名のため、 C:\test\list.txtが含まれてしまうため、 dir /b /s list.txt > list2.txt for /f %%F in (list2.txt) do ( のように別ファイル名にしました。 echo alllist.txt > alllist.txt は、前回のalllist.txtが残っていた場合に、 空白にするために入れてあると思いますが、 alllist.txtという文字列が入ってしまうので、 type null > alllist.txt としました。 また、教えて頂きました「参考URL」の情報も、 分かりやすくて、とても参考になりました。 ありがとうございました。 ---test.bat----------------------- @echo off cd C:\test c: dir /b /s list.txt > list2.txt type nul > alllist.txt for /f %%F in (list2.txt) do ( type "%%F" >> alllist.txt ) ----------------------------------