Подтвердить что ты не робот

Пакетный файл Скопируйте файлы с определенными расширениями из нескольких каталогов в один каталог

Я новичок, так что медведь со мной...

Я пытаюсь скопировать все файлы .doc, которые я разбросал по нескольким подкаталогам одного основного каталога в другой каталог, используя командный файл. Мне удалось получить filelist.txt всех файлов (сотни) из этих каталогов, которые я хочу скопировать, используя:

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

Что script использовать для xcopy в один каталог? Могу ли я использовать некоторый код, который фактически захватывает эти имена файлов из filelist.txt и xcopies them?

Для справки я рассмотрел вопрос ниже, потому что он выглядел так, как будто я делаю то, что хочу, но это не сработало для меня.

Использование xcopy для копирования файлов из нескольких каталогов в один каталог

Кроме того, мне бы очень хотелось понять эту концепцию, поэтому, пожалуйста, сложите код для меня, чтобы рассказать мне, что делает каждый элемент, или, по крайней мере, включить ссылку, которая объяснит это.

4b9b3361

Ответ 1

В решении пакетного файла

for /R c:\source %%f in (*.xml) do copy %%f x:\destination\

Код работает как таковой;

для каждого файла for в каталоге c:\source и подкаталогах /R, соответствующих шаблону (\*.xml), поместите имя файла в переменную %%f, затем для каждого файла do скопировать файл copy %%f в пункт назначения x:\\destination\\

Просто протестировал его здесь на моем компьютере под управлением Windows XP, и это сработало как удовольствие для меня. Но я набрал его в командной строке, поэтому я использовал единственную версию имени переменной %f, как описано в связанном вопросе выше.

Ответ 2

Просто используйте команду XCOPY с рекурсивной опцией

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

/s сделает его "рекурсивным"

Ответ 3

Такие вещи, почему я переключился на Powershell. Попробуйте, это весело:

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

Ответ 4

Брэндон, короткий и сладкий. Также гибкий.

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..)

Ответ 5

вы также можете использовать 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