Решил я автоматизировать процесс скачки архива с "FTP" и распаковки его в нужну папку.
Точно помню, что распаковывать архивы из "CMD" без дополнительных программ нельзя... и вроде как помню, что из "Powershell" тоже нельзя...
Но годы идут, в "Microsoft" программистов ебут, и вуаля, с версии "Powershell 5.0" появилась поддержка распаковки "из коробки".
Ну, что же, значит объединим две технологии и у-перёд!
В статье используются программы:
GreenShot v1.2.10.6 Программа для создания скриншотов оф. сайт
AkelPad v4.9.8 Текстовый редактор оф. сайт
Для начало нужно убедиться, что версия установленного "Powershell" больше 5.0, запускаем "Powershell" и пишем "Get-host" - будет указана версия.
Если мало, то можно качнуть обновление, с сайта "Microsoft". Так как ебут их всё же недостаточно, обновление "PowerShell" будет называться "Windows Management Framework"
Теперь всё готово.
Нужно будет создать два файла, один ".TXT" (текстовик в кодировке OEM/DOS) второй ".PS1" (можно в кодировке ANSI (Windows)).
Текстовик-текстовик будет содержать команды для "FTP-клиента", а текстовый скрипт всё остальное.
Содержимое скрипта "Powershell":
<# Скрипт для скачивания с FTP сервера ftp.moex.com архивов с шаблонами для XML и распаковки их на диск (C) (:Pro:) 14:55 24.05.2018 #> #Создаём временный каталог для скачивания New-Item -Path "c:\micex" -Name "temp" -ItemType "directory" -force #Скачиваем файлы ftp -s:c:\micex\moex_ftp.txt #Распаковываем файлы Get-ChildItem c:\micex\temp\Currency_xsd.zip | Expand-Archive -DestinationPath c:\MICEX\XSD\ -Force #Удаляем временную папку Remove-Item -Path C:\micex\temp -Recurse
Содержимое текстовика (moex_ftp.txt):
open ftp.moex.com anonymous admin@fafofu.ru binary prompt lcd c:\MICEX\TEMP cd "/pub/Reports/Currency/xsd" get allfiles.zip Currency_xsd.zip close bye
"FTP CMD" умеет работать только в АКТИВНОМ режиме! На локальном брандмауэре должны быть разрешены входящие подключения с порта "TCP 20" на любой локальный порт.
Так, что же происходит то:
Скрипт создаёт временную папку, по указанному пути, после чего вызывает программу ftp, с передачей ей чего надо делать,
в файле для ftp, написано, что нужно перейти в другой локальный каталог, так как при скачке всё качается в активный каталог, и скачать файл, переименовав его,
попрощаться и выйти из программы ftp, после чего скрипт работает дальше, распаковывает скачанный архив, и удаляет временную папке. Красота =)
Так можно скачать много разных файлов, из той же директории на FTP-сервере:
get allfiles1.zip Currency_xsd1.zip
get allfiles2.zip Currency_xsd2.zip
get allfiles3.zip Currency_xsd3.zip
или из разных директорий, не забывая переходить в них:
cd "/pub/Reports/Currency1/xsd1"
get allfiles1.zip Currency_xsd1.zip
cd "/pub/Reports/Currency2/xsd2"
get allfiles2.zip Currency_xsd2.zip
cd "/pub/Reports/Currency3/xsd3"
get allfiles3.zip Currency_xsd3.zip
Помни! Всё будет складываться по пути, указанном в текстовике, вот тут (lcd c:\MICEX\TEMP).
Если нужно раскладывать в разные папки не забывай менять локальный путь (lcd) перед скачиванием:
lcd c:\MICEX\TEMP1
get allfiles1.zip Currency_xsd1.zip
lcd c:\MICEX\TEMP2
get allfiles2.zip Currency_xsd2.zip
lcd c:\MICEX\TEMP3
get allfiles3.zip Currency_xsd3.zip
По файлам вроде всё понятно. Описание команд "FTP" я выложу позже... они есть в интернете ;-)
ЗЫ. Бывает скачка подвисает (плохая связь/тормозной сервер), и ничего не происходит (повисает на этапе: get: путь/имя файла, я просто крестиком закрываю окошко... оно само не закроется никогда :(.