На многих проектах есть необходимость копирования огромных файлов — размером 0,5 Гб и более. Например, это может понадобиться для получения последней версии сборки разрабатываемого продукта. В процессе копирования могут возникать сбои или обрывы коннекта, и тогда копирование приходится начинать снова. Хочу поделиться с вами простым скриптом для Windows, который поможет автоматизировать этот процесс, сделать его проще, быстрее и надежнее.
Теперь немного подробностей о том, что делает скрипт:
- Подключает сетевой диск с папкой, где находятся сборки продукта (это необходимо, если для доступа нужны логин и пароль другого пользователя).
- Находит последний (по дате) архив со сборкой.
- Выполняет копирование найденного архива в текущую папку.
- Отключает сетевой диск.
- Извлекает содержимое архива в текущую папку.
Для создания скрипта можно воспользоваться приложением Windows Notepad.
Создайте файл GetBuild.cmd в папке, куда будет скачиваться сборка. Далее — текст скрипта с комментариями.
Отключаем вывод выполняемых команд:
@ECHO OFF
Объявляем переменную с путем к сборкам:
SET SOURCES="\\server\share"
Подключаем сетевой диск. Эта команда необходима только в случае, если у текущего пользователя нет доступа к shared folder и необходимы логин/пароль другого пользователя (при выполнении команды будет выведен запрос на ввод логина и пароля):
ECHO %date% %time% - Mounting shared folder %SOURCES% NET USE X: %SOURCES% /USER:
Находим последний по дате архив со сборкой в сетевой папке:
ECHO %date% %time% - Get latest build by date in %SOURCES% FOR /f %%f IN ('dir %SOURCES% /o:-d /b') DO ( SET FILE=%%f SET DIR=%%~nf GOTO NEXT ) :NEXT
Выполняем копирование с помощью утилиты RoboCopy. Это стандартная утилита, которая входит в поставку Windows, начиная с Windows Server 2003 / Windows 7.
Если файл, который требуется скопировать, доступен по FTP или HTTP/HTTPS, для копирования можно воспользоваться утилитой cURL.
Копирование утилитой RoboCopy выполняется в неколько потоков (опция /MT), что позволяет существенно повысить скорость копирования. Например, архив 2,4 Гб таким образом можно скопировать всего за 6 минут при достаточной скорости подключения.
А время ожидания при сбое перед повторной попыткой копирования составляет 5 секунд (опция /W:5).
После копирования выполняется проверка того, успешно ли завершено копирование (коды возврата утилиты RoboCopy можно посмотреть здесь):
ECHO %date% %time% - Copying of latest build: %FILE% ROBOCOPY %SOURCES% "%CD%" %FILE% /MT /W:5 IF %ERRORLEVEL% LSS 8 ( ECHO %date% %time% - Build copied successfully [exit code %ERRORLEVEL%] ) ELSE ( COLOR 4 ECHO %date% %time% - Error %ERRORLEVEL% during build copying GOTO EXIT )
Отключаем сетевой диск:
ECHO %date% %time% - Unmounting shared folder %SOURCES% NET USE X: /D /Y
Извлекаем содержимое архива в текущую папку с помощью 7-Zip и проверяем, была ли успешно завершена операция (предполагается, что утилита 7-Zip установлена по стандартному пути):
ECHO %date% %time% - Extract from archive "%CD%\%FILE%" "C:\Program Files\7-Zip\7z" x -y "%CD%\%FILE%" IF %ERRORLEVEL% EQU 0 ( COLOR 2 ECHO %date% %time% - Build is ready to install ) ELSE ( COLOR 4 ECHO %date% %time% - Error %ERRORLEVEL% during build extracting GOTO EXIT ) :EXIT PAUSE COLOR
В процессе работы скрипта в дополнение к сообщениям, которые выдают команды, цветом будет показано наличие ошибок: красный означает, что ошибки есть, зеленый — выполнение завершено успешно.
Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: