Мониторинг изменений на SFTP-сервере с помощью WinSCP и пакетной обработки

#windows #batch-file #cmd #sftp #winscp

Вопрос:

Я хочу отслеживать наш SFTP, чтобы отправлять нам электронное письмо, если файл будет добавлен. На данный момент я попытался создать условие с if / else с помощью пакетного сценария, но пакетная среда не принимает мое условие.

Я новичок в пакетной обработке и автоматизации, поэтому я попытался сначала синхронизировать файл SFTP с локальным файлом и запустить пакетное расписание, чтобы попытаться выполнить синхронизацию снова; если это произойдет, то он отправит электронное письмо (на данный момент я не создавал сценарий для электронной почты, и, честно говоря, я не знаю, как это сделать сейчас), если он не синхронизировался, то выйдите из сценария.

Вот мой сценарий:

 option batch on
option confirm off
open sftp://x@sftp.x/ -privatekey=privateKey.ppk -hostkey="ssh-rsa 2048 x"
option transfer binary
if synchronize local "C:UsersAdministrateurDesktopxx" "/x/x/rx" (
ECHO nouveau fichier ajouter au repertoir
)
else (ECHO aucun nouveau fichier exit
)
 

Вот в чем ошибка:

 Commande inconnue 'if'.
 

Ответ №1:

  • Добавьте -preview переключатель в свою synchronize команду, чтобы она проверяла только наличие изменений, вместо фактической синхронизации файлов.
  • Добавьте option failonnomatch on в свой сценарий, чтобы synchronize команда сообщала об отсутствии различий как об ошибке.
     option failonnomatch on
    synchronize -preview local "C:UsersAdministrateurDesktopxx" "/x/x/rx"
     
  • В фактическом пакетном файле проверьте код выхода WinSCP, чтобы определить, есть ли какие-либо различия или нет. Что-то вроде этого:
     winscp.com /script=script.txt /log=script.log
    if errorlevel 1 (
      echo Nothing to synchronize or other problem
    ) else (
      echo There are files to synchronize
    )
     

    Если вы хотите отправить электронное письмо, см. Руководство WinSCP по отправке результатов сценария по электронной почте.