1313471419 ■複数階層にあるtxtファイルを任意のフォルダにまとめてコピーしたい。


Windowsのコマンドプロンプト(バッチ処理?)で上記のようなコマンドは可能でしょうか?

例えば、添付画像のような構成のディレクトリで、dataフォルダの中身のサブディレクトリも含めた中にあるtxtファイルを任意のディレクトリ[data2]にコピーしたいです。

その際、txtファイルが重複しても大丈夫なように、「そこまでのパス + ファイル名」とリネームもしたいです。

このような事を実現する、バッチコマンドを教えてください。

宜しくお願いいたします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/08/16 18:22:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:km1981 No.1

回答回数429ベストアンサー獲得回数49

ポイント300pt

バッチ処理だけでは難しいところがあるので

WSH(VBScript)で書いてみました


このファイルを "hoge.vbs" のように拡張子 vbs で保存して

コマンドラインから実行してください

パラメータは最初の3つの変数を適当に変更してください

Option Explicit

Dim Sour, Dest, Ext, Fso, Win
Dim Msg
Sour = "C:\data"        :'コピー元フォルダ
Dest = "C:\data2"       :'コピー先フォルダ
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
id:ruijio

回答ありがとうございます。

VBScriptというのは初めて使ってみましたが、無事に出来ました!

とても助かりました。ありがとうございました。

2011/08/16 18:24:36
  • id:H-H-H
    多少カスタマイズが必要ですが、バッチファイルにすると

    setlocal enabledelayedexpansion
    C:
    cd \data
    set Destination=C:\data2
    for /f %%i in ('dir /b /s /a:-d *.txt') do (
    set FileName=%%i
    set FileName=!FileName:\=_!
    set FileName=!FileName:~3!
    copy "%%i" "%Destination%\!FileName!"
    )

    こんな感じで、可能かと 思います。
  • id:ruijio
    H-H-Hさん、こんにちは。

    No1さんのご回答にて解決いたしました。
    コメントありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません