Ответ 1
Во-первых, убедитесь, что вы понимаете, если вам нужно использовать Secure FTP (= FTPS, согласно вашему тексту) или SFTP (в соответствии с используемым тегом).
Ни одна из них не поддерживается командной строкой Windows ftp.exe
. Как вы уже сказали, вы можете использовать WinSCP. Он поддерживает как FTPS, так и SFTP.
Используя WinSCP, ваш командный файл будет выглядеть (для SFTP):
echo open sftp://ftp_user:[email protected] -hostkey="server hostkey" >> ftpcmd.dat
echo put c:\directory\%1-export-%date%.csv >> ftpcmd.dat
echo exit >> ftpcmd.dat
winscp.com /script=ftpcmd.dat
del ftpcmd.dat
И командный файл:
winscp.com /log=ftpcmd.log /script=ftpcmd.dat /parameter %1 %date%
Хотя использование всех возможностей WinSCP (в частности, предоставление команд непосредственно в командной строке и синтаксис %TIMESTAMP%
), пакетный файл упрощает:
winscp.com /log=ftpcmd.log /command ^
"open sftp://ftp_user:[email protected] -hostkey=""server hostkey""" ^
"put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
"exit"
С целью переключения -hostkey
см. -hostkey
ключа хоста в скрипте.
Проще собрать скрипт/пакетный файл вручную - настроить и проверить параметры подключения в графическом интерфейсе WinSCP, а затем создать для него сценарий или командный файл:
Все, что вам нужно настроить, это имя исходного файла (используйте синтаксис %TIMESTAMP%
как показано выше) и путь к файлу журнала.
Для FTPS замените sftp://
в команде open
с помощью ftpes://
(явный TLS/SSL) или ftps://
(неявный TLS/SSL). Снимите переключатель -hostkey
.
winscp.com /log=ftpcmd.log /command ^
"open ftps://ftp_user:[email protected] -explicit" ^
"put c:\directory\%1-export-%%TIMESTAMP#yyyymmdd%%.csv" ^
"exit"
Возможно, вам придется добавить переключатель -certificate
, если сертификат сервера не выдается доверенным органом.
Опять же, как и в SFTP, проще настроить и проверить настройки соединения в графическом интерфейсе WinSCP, а затем создать для него сценарий или командный файл.
См. Полное руководство по конверсии из ftp.exe
в WinSCP.
Вы также должны прочитать Руководство по автоматизации передачи файлов на FTP-сервер или SFTP-сервер.
Примечание для использования %TIMESTAMP#yyyymmdd%
вместо %date%
: Формат значения переменной %date%
зависит от локали. Поэтому убедитесь, что вы протестируете скрипт в той же локали, на которой вы собираетесь использовать скрипт. Например, в моем чешском языке %date%
разрешает čt 06. 11. 2014
, что может быть проблематичным при использовании в качестве части имени файла.
По этой причине WinSCP поддерживает (локально-нейтральное) форматирование временной метки. Например, %TIMESTAMP#yyyymmdd%
разрешается до 20170515
по любой языковой программе.
(Я автор WinSCP)