PDA

Показать полную графическую версию : [решено] Выбор определенного типа файлов при копировании


Aleksander.Ruban@fb
22-08-2012, 00:23
Есть папка с большим количеством подпапок. Хочу скопировать эту папку на другой диск, но в ее подпапках должны остаться только 2 типа файлов: один с расширением - nfo, другой - cso. Остальные файлы (архивы релиза, например) из этих подпапок копироваться не должны.
Как это сваять в батнике?

Iska
22-08-2012, 03:33
Если в папках не будет в результате никаких файлов — они всё равно должны создаваться, даже пустые? Так?

Aleksander.Ruban@fb
22-08-2012, 08:56
Нет в папках будут в любом случае искомые файлы. Возможно отсутствие nfo. Но мысль верная, если файлов нет, то создавать папку стоит, главное чтобы был лог этой операции и я знал, что она пустая.

lchou
24-08-2012, 18:26
Вот такой вариант на VBS:

Dim fso, vLogStream

Const FILE_LOG = "E:\copy.log"

Const FOLDER_SRC = "C:\Folder1" 'откуда (должна сущест-ть)
Const FOLDER_DEST = "D:\Folder2" 'куда (должна сущест-ть)

Const MY_EXTENSION = "nfo,cso" 'типы файлов

Function CopyFoldersAndFiles(strFolderSrc, strFolderDest)
Dim vFile, vFolder, vSubFolder
Set vFolder = fso.GetFolder(strFolderSrc)
strFolderSrc = strFolderSrc & "\"
strFolderDest = strFolderDest & "\"
For Each vFile In vFolder.Files
If InStr(1, MY_EXTENSION, fso.GetExtensionName(vFile.Path), vbTextCompare) Then
vLogStream.WriteLine "copying file " & vFile.Path & " to " & strFolderDest
vFile.Copy strFolderDest
End If
Next
For Each vSubFolder In vFolder.SubFolders
vLogStream.WriteLine "create folder " & strFolderDest & vSubFolder.Name
fso.CreateFolder strFolderDest & vSubFolder.Name
CopyFoldersAndFiles strFolderSrc & vSubFolder.Name, strFolderDest & vSubFolder.Name
Next
End Function

Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Set vLogStream = fso.OpenTextFile(FILE_LOG, 2, True)

CopyFoldersAndFiles FOLDER_SRC, FOLDER_DEST

vLogStream.Close

MsgBox "OK"

megaloman
25-08-2012, 10:21
Как это сваять в батнике?Читаем описание команды xcopy /? и решаем задачу в две строки
@Echo Off
xcopy /E "D:\Копируемая Папка\*.nfo" "E:\Копируемая Папка\" >"E:\Копируемая Папка.log"
xcopy /E "D:\Копируемая Папка\*.cso" "E:\Копируемая Папка\" >>"E:\Копируемая Папка.log"
Разве что в лог-файле не видно что создались пустые папки (но в постановке этого и не было). По видимому, можно выдать список пустых папок, а зачем они нужны? Я бы их вообще не создавал. (/S в команде Xcopy вместо /E)




© OSzone.net 2001-2012