Пакетный файл для автоматизации передачи файлов PuTTY/PSFTP

У меня есть пакетный файл для перемещения файла с моего локального ПК на сервер через SFTP. У меня есть PuTTY, установленный в моей системе, и следующий код пакетного файла.

cd C:\Program Files (x86)\PuTTY
psftp
open <IP>
<user>
<PW>
cd /home/irisuser/iris/integration/dls_dlsblr_dlschnn_in_msg/in
lcd d:\
put log.sh
bye

Приведенный выше код отлично работает, когда я ввожу его в командной строке. Но когда я дважды щелкаю файл .bat и запускаю его, он не работает и просит ввести имя пользователя и пароль. Моя цель состояла в том, чтобы автоматизировать все это, и мне нужно запустить его, просто щелкнув файл .bat. Но я не могу этого добиться. Любые идеи или фрагменты помогут мне.

Ответ 1

Вам нужно сохранить psftp script (строки от open до bye) в отдельный файл и передать его psftp с помощью -b:

cd "C:\Program Files (x86)\PuTTY"
psftp -b script.txt

Где script.txt предполагается, что оно находится в C:\Program Files (x86)\PuTTY. Альтернативно укажите полный путь (не забудьте указать путь к двойным кавычкам, особенно если он содержит пробелы. Вам лучше сделать это с помощью команды cd).

Справка:
https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter6.html#psftp-option-b


EDIT: для имени пользователя и пароля: поскольку вы не можете использовать команды psftp в пакетном файле, по той же причине вы не можете указать имя пользователя и пароль как команды psftp. Это вклад в команду open. Хотя вы можете указать имя пользователя с помощью команды open (open <user>@<IP>), вы не можете указать пароль таким образом. Это можно сделать только в командной строке psftp. Тогда, возможно, более чистое сделать все в командной строке:

cd "C:\Program Files (x86)\PuTTY"
psftp -b script.txt <user>@<IP> -pw <PW>

И удалите строки open, <user> и <PW> из script.txt.

Справка:
https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter6.html#psftp-starting
https://the.earth.li/~sgtatham/putty/latest/htmldoc/Chapter3.html#using-cmdline-pw


То, что вы делаете, это то, что вы запускаете psftp без каких-либо параметров или команд. Как только вы выйдете из него (например, набрав bye), ваш пакетный файл продолжает пытаться запустить команду open (и другие), что Windows shell явно не понимает.