Pull to refresh

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

Reading time2 min
Views2.3K
Наверное некоторые из коллег- администраторов сталкивались с такой проблемой, когда из-за нехватки системных ресурсов платформа 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

Надеюсь мой опыт поможет коллегам в их ежедневной работе.
Tags:
Hubs:
+2
Comments5

Articles