Ваш пакетный файл интерпретируется командным интерпретатором Windows, cmd.exe
, построчно.
Таким образом, как только строка winscp.com
достигнут, интерпретатор запускает winscp.com
и ожидает его выхода (что он никогда не делает самостоятельно). Если бы он вышел, интерпретатор продолжил бы выполнение других команд, терпящих неудачу больше всего (поскольку они не являются действительными командами Windows).
Строки, которые на самом деле являются командами WinSCP, а не командами Windows, должны передаваться в WinSCP, а не в cmd.exe
.
См. Также FAQ по WinSCP. Почему некоторые команды сценариев WinSCP, указанные в командном файле, не выполняются / не выполняются?
Прежде чем продолжить, позвольте мне исправить ваш неправильный синтаксис WinSCP. Для автоматизации вы не используете URL-адрес сеанса в командной строке WinSCP, вместо этого вы используете команду open
. Мои следующие примеры будут использовать это вместо.
Есть два способа:
Разделите команды WinSCP в отдельный файл сценария WinSCP, скажем, script.txt
:
open sftp://userid:password@hostname
cd /var/tmp
call ./script.sh
get /var/tmp/log.txt C:\Preeti\log.txt
exit
И запустить его как:
cd C:\Program Files\WinSCP
winscp.com /script=c:\path\to\script.txt
Используя переключатель командной строки WinSCP /command
, вы можете хранить все в одном файле (командном файле) с использованием следующего синтаксиса:
cd C:\Program Files\WinSCP
winscp.com /command ^
"open sftp://userid:password@hostname" ^
"cd /var/tmp" ^
"call ./script.sh" ^
"get /var/tmp/log.txt C:\Preeti\log.txt" ^
"exit"
Вам следует прочитать руководство WinSCP по автоматизации передачи файлов на SFTP-сервер.