Показать полную графическую версию : [решено] Выбор определенного типа файлов при копировании
Aleksander.Ruban@fb
22-08-2012, 00:23
Есть папка с большим количеством подпапок. Хочу скопировать эту папку на другой диск, но в ее подпапках должны остаться только 2 типа файлов: один с расширением - nfo, другой - cso. Остальные файлы (архивы релиза, например) из этих подпапок копироваться не должны.
Как это сваять в батнике?
Если в папках не будет в результате никаких файлов — они всё равно должны создаваться, даже пустые? Так?
Aleksander.Ruban@fb
22-08-2012, 08:56
Нет в папках будут в любом случае искомые файлы. Возможно отсутствие nfo. Но мысль верная, если файлов нет, то создавать папку стоит, главное чтобы был лог этой операции и я знал, что она пустая.
Вот такой вариант на 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC