Вы должны поместить команды 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:test11@142.245.30.165" ^
"put ""%MyPath%""" ^
"exit"
pause
Для ознакомления со сценариями с WinSCP см .:
https://winscp.net/eng/docs/guide_automation
Также есть руководство по преобразованию Windows FTP-скрипта в WinSCP-скрипт.
(Я автор WinSCP)