1

Я работаю над файлом bat, в котором мне нужно войти на удаленный сервер через SFTP с WinSCP, выполнить сценарий оболочки и получить файл в систему с удаленного сервера.

Ниже приведен код.

cd C:\Program Files\WinSCP
winscp.com sftp://userid:password@hostname
cd /var/tmp
call ./script.sh 
get /var/tmp/log.txt C:\Preeti\log.txt
exit

Однако при выполнении этого файла он останавливается после второй строки. Я новичок в этом, пожалуйста, дайте мне знать, где я иду не так. Заранее спасибо за помощь.

1 ответ1

2

Ваш пакетный файл интерпретируется командным интерпретатором 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-сервер.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .