Как загрузить файл на FTP-сервер с помощью пакетного скрипта?

Как загрузить файл на FTP-сервер с помощью пакетного скрипта?

Я создал пакетный файл под названием FTP_automation.bat, содержащий приведенный ниже код.

SET MyPath=E\PGP\test_pg
ftp
open 142.245.30.165 21
TESTA9MS
test11
binary
put %MyPath%
quit
Pause

При запуске FTP_automation.batне загружается файл, который я передаю в качестве параметра.

Скрипт останавливается после ftpтого, как указано в пакетном файле, и не подключается к IP-адресу и номеру порта, которые я передал в пакетном файле.

Если я вручную ввел эти команды, то все работало отлично. Какую коррекцию мне следует сделать в этом коде?

решение1

Вам нужно поместить ftpкоманды в отдельный файл. Вы не можете поместить строки, которые вы в противном случае набираете на терминале, в .batфайл и ожидать, что он будет вести себя идентично. .batФайл может включать только команды Windows. Когда вы запускаете ftpкоманду из пакетного файла, он ждет ее команд. Он не знает о файле .bat, поэтому он не может прочитать команды оттуда.

Поэтому поместите ваши команды в отдельный текстовый файл (например ftp.txt, ).

open 142.245.30.165 21
TESTA9MS
test11
binary
put E\PGP\test_pg
quit

И запустите его из .batфайла следующим образом:

ftp -s:ftp.txt
pause

Если вам действительно нужно использовать динамическое имя файла (из переменной среды), вам нужно создать текстовый файл на лету. Не ftpподдерживает переменные.


Если вы используете более совершенный FTP-клиент, вы, возможно, сможете и иметь команды в пакетном файле, и использовать переменные среды.

Например сWinSCP:

set MyPath=E\PGP\test_pg

winscp.com /command ^
    "open ftp://TESTA9MS:[email protected]" ^
    "put ""%MyPath%""" ^
    "exit"

pause

Для введения в скриптинг с WinSCP см.:
https://winscp.net/eng/docs/guide_automation

Также есть руководство поПреобразование скрипта Windows FTP в скрипт WinSCP. Вы даже можете иметь WinSCP GUIсгенерировать пакетный файлдля тебя.

(Я автор WinSCP)

Связанный контент