web-dev-qa-db-ja.com

バッチファイル特定の拡張子を持つファイルを複数のディレクトリから1つのディレクトリにコピーします

私は初心者なので、我慢してください...

バッチファイルを使用して、あるメインディレクトリの複数のサブディレクトリに散らばっているすべての.docファイルを別のディレクトリにコピーしようとしています。私はこれらのディレクトリからすべてのファイル(数百個あります)のfilelist.txtを取得することに成功しました。

"C:\Main directory\sub directory" dir /b /s *.doc > "C:\Main directory\sub directory\filelist.txt"

それらを1つのディレクトリにxcopyするためにどのスクリプトを使用しますか?実際にそれらのファイル名をfilelist.txtから取得してxcopiesするコードを使用できますか?

参考のために、下の質問を見てみましたが、それは私がやりたいことをしているように見えましたが、私にはうまくいきませんでした。

xcopyを使用して複数のディレクトリから1つのディレクトリにファイルをコピーする

また、この概念を本当に理解したいので、各項目が何をするのかを説明するコードを分解するか、少なくともそれを説明するリンクを含めてください。

48
Brandon

XCOPYコマンドに再帰オプションを使用するだけです

xcopy c:\*.doc k:\mybackup /sy

/ sはそれを「再帰的」にします

45
userJT

このようなことが、Powershellに切り替えた理由です。試してみてください、楽しいです:

Get-ChildItem -Recurse -Include *.doc | % {
    Copy-Item $_.FullName -destination x:\destination
}
6
user15071

ブランドン、短くて甘い。柔軟性もあります。

set dSource=C:\Main directory\sub directory
set dTarget=D:\Documents
set fType=*.doc
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%"') do (
    copy /V "%%f" "%dTarget%\" 2>nul
)

お役に立てれば。

コピーの後に( '||'を使用して)チェックを追加しますが、エラーが発生したときに "copy/v"がどのように反応するかわかりません。

あなたはこれを試してみたいかもしれません:

copy /V "%%f" "%dTarget%\" 2>nul|| echo En error occured copying "%%F".&& exit /b 1

コピーラインとして。あなたがそれから何かを得たら教えてください(コピー失敗のATMをテストする立場にない)

4
Jay

また、vbscriptを使用することもできます

Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "c:\test"
strDestination = "c:\tmp\"
Set objFolder = objFS.GetFolder(strFolder)

Go(objFolder)

Sub Go(objDIR)
  If objDIR <> "\System Volume Information" Then
    For Each eFolder in objDIR.SubFolders       
        Go eFolder
    Next
    For Each strFile In objDIR.Files
        strFileName = strFile.Name
        strExtension = objFS.GetExtensionName(strFile)
        If strExtension = "doc" Then
            objFS.CopyFile strFile , strDestination & strFileName
        End If 
    Next    
  End If  
End Sub 

mycopy.vbsとして保存し、コマンドラインで

c:\test> cscript /nologo mycopy.vbs
1
ghostdog74