Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Выбор определенного типа файлов при копировании (http://forum.oszone.net/showthread.php?t=241084)

Aleksander.Ruban@fb 22-08-2012 00:23 1974359

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

Iska 22-08-2012 03:33 1974405

Если в папках не будет в результате никаких файлов — они всё равно должны создаваться, даже пустые? Так?

Aleksander.Ruban@fb 22-08-2012 08:56 1974459

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

lchou 24-08-2012 18:26 1976356

Вот такой вариант на 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 1976645

Цитата:

Как это сваять в батнике?
Читаем описание команды xcopy /? и решаем задачу в две строки
Код:

@Echo Off
xcopy /E "D:\Копируемая Папка\*.nfo" "E:\Копируемая Папка\" >"E:\Копируемая Папка.log"
xcopy /E "D:\Копируемая Папка\*.cso" "E:\Копируемая Папка\" >>"E:\Копируемая Папка.log"

Разве что в лог-файле не видно что создались пустые папки (но в постановке этого и не было). По видимому, можно выдать список пустых папок, а зачем они нужны? Я бы их вообще не создавал. (/S в команде Xcopy вместо /E)


Время: 19:04.

Время: 19:04.
© OSzone.net 2001-