Скрипт: копирование папки.

После выхода поста о рассылке файлов, от читателей поступило предложение немного его усовершенствовать и добавить возможность полного копирования содержимого указанной папки (включая все файлы, папки и подпапки). В начале я пошел по ложному пути, подумав (почему-то :) ) о использовании процедур и о рутинном переборе всех подлежащих копированию подпапок. Оказалось все намного проще и так, если Вы не забыли, то просто скопируйте код скрипта в текстовый файл и измените его расширение на VBS. Не забудьте поменять названия папок, которые собираетесь копировать :)
Уже сегодня утром, поступило еще одна просьба – перед копированием файлов, проверять доступность папки, в которую мы хотим произвести копирование. Пришлось оперативно доделать скрипт и выложить сразу с двумя исправлениями.

Листинг (copy_folder.vbs):


'скрипт копирования содержимого папки

StartFolder = “\\server\data” ‘ откуда копируем

aEndFolder = array(“\\user1\1\”,”\\user2\1\”) ‘ куда копируем

‘***********************************************

Set StartFiles = CreateObject(“Scripting.FileSystemObject”)

Set WSNetwork = CreateObject(“WScript.Network”)

‘задаем дополнительно объект файловой системы
‘будем использовать его для проверки доступности папок

Set oEndFolder = CreateObject(“Scripting.FileSystemObject”)

‘задаем дополнительно объект файловой системы
‘будем использовать его для работы с папками

Set oFolder = CreateObject(“Scripting.FileSystemObject”)

For i=0 to UBound (aEndFolder)

‘Проверяем доступность папки, в которую хотим произвести копирование
‘Если она существует, то работа скрипта продолжится, иначе выйдет сообщение о ошибке

If oEndFolder.FolderExists ( aEndFolder(i) ) Then

num = 0

‘копируем файлы

For Each File in StartFiles.GetFolder(StartFolder).Files

StartFiles.CopyFile File, aEndFolder(i) & File.Name, True

num = num+1

Next

‘сообщаем о результатах копирования

If Err.Number Then
WScript.Echo “Обновление прошло с ошибками. Сообщите об этом администратору. (адресс с ошибкой ” & aEndFolder(i) & “)”
End if

Err.Clear

‘копируем папки

For Each Folder In oFolder.GetFolder(StartFolder).SubFolders

oFolder.CopyFolder Folder, aEndFolder(i) , True

Next

If Err.Number Then
WScript.Echo “Обновление прошло с ошибками. Сообщите об этом администратору. (адресс с ошибкой ” & aEndFolder(i) & “)”
End if

Err.Clear

else

WScript.Echo “Папка ” & aEndFolder(i) & ” в настоящий момент не доступна. Работа с ней прекращена.”
End if

Next

WScript.Echo “Выполнение скрипта завершено.”

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

Обратите внимание на наличие слеша в конце адреса к папке приемнику файлов, его наличие обязательно!!!

Вышла новая доработанная версия скрипта, поэтому все пожелания и вопросы просьба оставлять на этой странице – Скрипт: копирование файлов.

P.S. Не пропусти новые статьи – подпишись на обновление блога и ты всегда сможешь оперативно решить любую неисправность своего компьютера.

14 Responses to“Скрипт: копирование папки.”

  1. Александр
    27/03/2012 at 14:06 #

    Добрый день, спасибо большое скрипт работает, а не подскажите как сделать чтоб он при копировании удалял исходную папку и из корзины тоже?

  2. 30/03/2012 at 9:52 #

    Александр, в цикле копирования папок и файлов if.. достаточно воткнуть строчку удаления, например:
    StartFiles.Delete
    oFolder.Delete
    Помоему должны удалиться совсем.

  3. 13/07/2012 at 14:32 #

    А какую строку прописать, чтоб скрипт работал самостояетельно, и каждые 2 часа копирвал папку и его вложимое

  4. 24/07/2012 at 13:31 #

    RDSN, проще прописать его в планировщике задач

  5. Art4Es
    27/07/2012 at 16:51 #

    Можно как то дополнить чтобы при повторном запуске скрипта копирование шло только вновь созданных или обновленных файлов? ибо объем текстовых документов в размере 30 гб…и новые файлы добавляются каджые 3-5 минут, не хочется постоянно копировать одни и те же файлы по несколько раз…к тому же это не быстро…

  6. 02/08/2012 at 15:34 #

    Попробую сделать, в ближайшее время напишу.

  7. 10/08/2012 at 11:13 #

    Art4Es, скоро будет. Уже почти готов – тестирую.

  8. Art4Es
    10/08/2012 at 12:41 #

    MasterLin, благодарю вас=) надеюсь все пройдет успешно=)

  9. Art4Es
    10/08/2012 at 12:42 #

    MasterLin, благодарю Вас Мастер=) надеюсь все пройдет успешно=)

  10. 14/08/2012 at 14:36 #

    Art4Es, готово – Скрипт:копирование файлов.

  11. Art4Es
    14/08/2012 at 15:29 #

    MasterLin, Спасибо! в ближайшее время кину денежку в поддержку вашего проекта=)

  12. 14/08/2012 at 15:56 #

    Огромное спасибо!!! :)

  13. Armen
    01/03/2015 at 17:21 #

    Скажите, пожалуйста, можно сделать так, чтобы этот скрипт копировал только последнюю изменённую подпапку исходной папке?

Pingbacks/Trackbacks

  1. MasterLin - 13/02/2012

    Скрипт: копирование папки.: После выхода поста о рассылке файлов, от читателей поступило предложение немного его… http://t.co/JxO8x5CL

Оставить комментарий

Your email address will not be published. Required fields are marked *

(Required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>