Рубріки: Софт

Как автоматизировать копирование файлов

Дмитрий Придатко

На многих проектах есть необходимость копирования огромных файлов — размером 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

В процессе работы скрипта в дополнение к сообщениям, которые выдают команды, цветом будет показано наличие ошибок: красный означает, что ошибки есть, зеленый — выполнение завершено успешно.

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Останні статті

Токсичные коллеги. Как не стать одним из них и прекратить ныть

В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…

07.12.2023

Делать что-то впервые всегда очень трудно. Две истории о начале карьеры PM

Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…

04.12.2023

«Тыжпрограммист». Как люди не из ІТ-отрасли обесценивают профессию

«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…

15.11.2023

Почему чат GitHub Copilot лучше для разработчиков, чем ChatGPT

Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…

13.11.2023

Как мы используем ИИ и Low-Code технологии для разработки IT-продукта

Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…

07.11.2023

Университет или курсы. Что лучше для получения IT-образования

Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…

19.10.2023