Автоматизация копирования крупных файлов.

    Наверное некоторые из коллег- администраторов сталкивались с такой проблемой, когда из-за нехватки системных ресурсов платформа windows отказывается копировать большие файлы встроенными средствами (обычно это файлы бекапа 60+Gb) скажем с одного диска на другой, не помогает тут и утилита «Robocopy» от Sysinternals. Предлагаю решить данную проблему при помощи утилиты KillCopy, а чтобы не приходилось работать руками — создадим простой скрипт, благо утилита позволяет работать с ней из коммандной строки:


    @ECHO off

    ECHO ==========================
    ECHO Keys:
    ECHO r -retry on any error
    ECHO n -start KillCopy in minimized state
    ECHO m -move files
    ECHO x -don't delete !list filelist
    ECHO u -try resume if target file exists.
    ECHO ==========================

    SET BCKP_FLDR=<папка откуда копируем>
    SET DST_FLDR=<папка куда копируем>

    rem устанавливаем путь, в котором будет создаваться список копируемых файлов, а так же задаем параметры killcopy.
    SET BCKP_LIST=C:\backuplist.txt
    SET copyParm= -rnmxu

    rem задаем путь, где хранится файл истории и лога killcopy
    SET CHECK_FILE=C:\Progra~1\KillSoft\KillCopy\history.txt
    SET CHECK_LOG=C:\Scripts\killcopycheck.txt

    echo Getting Directories list…

    dir "%BCKP_FLDR%" /b /s /a:d > "%BCKP_LIST%"

    echo Starting KillCopy %DATE% %TIME%

    echo Copying files…
    kc.exe %BCKP_LIST% %DST_FLDR% %copyParm%

    rem парсим хистори файл:
    echo Parsing Killcopy Log…
    findstr /i. "%CHECK_FILE%" >> "%CHECK_LOG%"

    echo Sending log via e-mail…
    wscript c:\scripts\Email_ME.vbs "%CHECK_LOG%" «Killcopy Check Result»

    rem echo Deleting temporary files…
    del /q "%CHECK_LOG%"
    del /q "%BCKP_LIST%"
    del /q "%CHECK_FILE%"



    Ниже прилагаю стандартный vbs-скрипт для отправки по e-mail результатов копирования:
    Dim ArgObj
    Set ArgObj = WScript.Arguments

    Dim sFileName
    Dim sMsgSubject

    sFileName = ArgObj.Item(0)
    sMsgSubject = ArgObj.Item(1)

    Function GetTxtFileContent(sFilePath)
    Dim fso, txtStream
    Dim sRes

    Set fso = CreateObject(«Scripting.FileSystemObject»)
    Set txtStream = fso.OpenTextFile(sFilePath, 1)
    sRes = txtStream.ReadAll

    GetTxtFileContent = sRes
    End Function

    Set objEmail = CreateObject(«CDO.Message»)
    objEmail.From = «от кого»
    objEmail.To = «кому»
    objEmail.BodyPart.Charset = «koi8-r»
    objEmail.Subject = sMsgSubject
    objEmail.Textbody = GetTxtFileContent(sFileName)
    objEmail.Configuration.Fields.Item _
    schemas.microsoft.com/cdo/configuration/sendusing») = 2
    objEmail.Configuration.Fields.Item _
    schemas.microsoft.com/cdo/configuration/smtpserver») = _
    «адрес smtp сервера»
    objEmail.Configuration.Fields.Item _
    schemas.microsoft.com/cdo/configuration/smtpserverport») = 25
    objEmail.Configuration.Fields.Update
    objEmail.Send

    Надеюсь мой опыт поможет коллегам в их ежедневной работе.
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 5

      0
      KillCopy отличная разработка, жаль что ее развитие остановилось. Хотя автор не против расшарить результаты своей работы толковому кодеру / команде, способной развивать продукт далее.

      Рекомендую также обратить внимание на FtpDrive этого же автора. Софт достойный, хотя, конечно, к данному хабратопику уже отношения не имеет.
        +1
        Да я вообще думаю было бы здорово, если бы MS сам находил и развивал подобные утилиты по примеру Sysinternals. Мы, конечные пользователи только выйграли бы от этого.
          +1
          MS могут только найти и купить на корню. Как Sysinternals :)
        –3
        ужос, как в венде все сложно o_O
          –1
          А вот и холиварщики подтянулись

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое