Le fichier batch n'exécute pas complètement le script WinSCP

1

Je travaille sur un fichier bat dans lequel je dois me connecter à un serveur de suppression via SFTP avec WinSCP, exécuter un script shell et obtenir un fichier sur le système à partir du serveur distant.

Ci-dessous le code.

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

Cependant, lors de l'exécution de ce fichier, l'exécution s'arrête après la deuxième ligne. Je suis nouveau à cela, s'il vous plaît laissez-moi savoir où je me trompe. Merci d'avance pour toute l'aide.

Preeti Maurya
la source
Vous devez placer vos commandes winscp dans un fichier de script
DavidPostill

Réponses:

2

Votre fichier de commandes est interprété par l'interpréteur de commandes Windows, le cmd.exe, ligne par ligne.

Donc, une fois que la winscp.comligne est atteinte, l'interprète s'exécute winscp.comet attend qu'elle sorte (ce qu'il ne fait jamais seul). Si cela s'était terminé, l'interprète continuerait à exécuter les autres commandes qui échouaient le plus (car ce ne sont pas des commandes Windows valides).

Les lignes qui sont en réalité des commandes WinSCP, et non des commandes Windows, doivent être alimentées vers WinSCP, et non vers cmd.exe.

Voir aussi FAQ WinSCP Pourquoi certaines commandes de script WinSCP spécifiées dans un fichier de commandes ne sont-elles pas exécutées / en échec?


Avant de continuer, permettez-moi de corriger votre mauvaise syntaxe WinSCP. Pour l'automatisation, vous n'utilisez pas l' URL de session sur la ligne de commande WinSCP, vous utilisez à la place opencommande . Mes exemples suivants l'utiliseront à la place.


Il y a deux manières:

  • Séparez les commandes WinSCP dans un fichier de script WinSCP distinct , par exemple script.txt:

    open sftp://userid:password@hostname
    cd /var/tmp
    call ./script.sh 
    get /var/tmp/log.txt C:\Preeti\log.txt
    exit
    

    Et lancez le comme:

    cd C:\Program Files\WinSCP
    winscp.com /script=c:\path\to\script.txt
    
  • En utilisant le commutateur de ligne de commande WinSCP/command , vous pouvez tout conserver dans un seul fichier (le fichier de commandes) avec une syntaxe comme celle-ci:

    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"
    

Vous devriez lire le guide WinSCP sur l’automatisation des transferts de fichiers sur un serveur SFTP .

Martin Prikryl
la source
Merci @Martin Prikryl. J'apprécie vraiment votre aide.
Preeti Maurya