Ausführen mehrerer Befehle über die serielle Schnittstelle mit PuTTY mit einer .bat-Datei mit einer Verzögerung zwischen einzelnen Befehlen

1193
yong.cheng

send.bat:

plink -load test < commands.txt 

(Test ist eine gespeicherte Sitzung in Putty)

Ausführen mehrerer Befehle über die serielle Schnittstelle mit PuTTY mit einer .bat-Datei mit einer Verzögerung zwischen einzelnen Befehlen

Befehle.txt

echo set_zero timeout /t 3 /nobreak >nul 2>&1 pause >nul 2>&1 echo set_a 65535 pause >nul 2>&1 timeout /t 3 /nobreak >nul 2>&1 echo set_a 0 timeout /t 3 /nobreak >nul 2>&1 pause >nul 2>&1 

Wenn ich die send.bat starte, kann sie putty erfolgreich öffnen, aber sie kann nicht die Befehle eingeben, die ich in die Befehle.txt schreibe.

Ausführen mehrerer Befehle über die serielle Schnittstelle mit PuTTY mit einer .bat-Datei mit einer Verzögerung zwischen einzelnen Befehlen

Ich lege diese Dateien in dasselbe Verzeichnis. Ausführen mehrerer Befehle über die serielle Schnittstelle mit PuTTY mit einer .bat-Datei mit einer Verzögerung zwischen einzelnen Befehlen

1
Womit verbindet sich die serielle Schnittstelle? Was versuchst du zu erreichen? Bitte antworten Sie nicht in Kommentaren. Bearbeiten Sie Ihre Frage, um sie klarer und vollständiger zu machen. Scott vor 6 Jahren 2

2 Antworten auf die Frage

1
Martin Prikryl

Ihre commands.txtDatei ist nur ein Durcheinander.

Ich gehe davon aus, dass Sie den set_zeroBefehl senden möchten, nicht den echo set_zeroBefehl, also legen Sie set_zerodie Datei an, nicht echo set_zero.

Wenn Sie jedoch zwischen den Befehlen pausieren müssen, hilft eine einfache Eingabeumleitung nicht, da Sie den timeoutBefehl dann nicht verwenden können . Sie möchten den timeoutBefehl lokal ausführen, während Sie ihn an die serielle Schnittstelle senden. Ihr Code ist tatsächlich korrekt, wenn Sie ihn als Skript verwendet haben, das eine Eingabe für die plink. Aber dafür musst du |nicht verwenden <.

Das könnte tun, was Sie wollen:

( echo set_zero timeout /t 3 /nobreak >nul 2>&1 pause >nul 2>&1 echo set_a 65535 pause >nul 2>&1 timeout /t 3 /nobreak >nul 2>&1 echo set_a 0 timeout /t 3 /nobreak >nul 2>&1 pause >nul 2>&1 ) | plink -load test 

Vielleicht möchten Sie sich jedoch pauseerst danach bewegen plink:

( ... echo set_a 0 timeout /t 3 /nobreak >nul 2>&1 ) | plink -load test  pause >nul 2>&1 

Alternativelly, wie @Appleodity bereits vorgeschlagen, benennen Sie commands.txtzu commands.batund verwenden Sie es mögen:

commands.bat | plink -load test 

Auch hier mag vielleicht diese (nach dem Umzug pauseaus commands.bat):

commands.bat | plink -load test  pause >nul 2>&1 
Danke für deine freundliche Hilfe! yong.cheng vor 6 Jahren 0
Glaubst du, ich habe diese Dateien in dasselbe Verzeichnis geschrieben? Putty.exe ist kompatibel mit Plink? Sie können das Bild in der Fragenzeile sehen. yong.cheng vor 6 Jahren 0
Ja, dasselbe Verzeichnis wird es tun (und dieses Verzeichnis sollte das Arbeitsverzeichnis sein). - Ich weiß nicht, was Sie mit * meinen "putty.exe entspricht plink?" * - Ich sehe das Bild, verstehe aber nicht, wonach Sie fragen. Martin Prikryl vor 6 Jahren 0
Ich weiß nicht, warum plink verwendet wird, aber nicht putty in der send.bat. Ich kann die Befehle jetzt erfolgreich mit bat senden und ich kann die empfangenen Befehle an einem anderen seriellen Port sehen, aber die Befehle können nicht entschuldigen und es gibt sie Keine Antwort mit meinen Befehlen, es ist nicht normal. yong.cheng vor 6 Jahren 0
Ich weiß nicht, warum plink verwendet wird, aber nicht putty in der send.bat. Ich kann die Befehle jetzt erfolgreich mit bat senden und ich kann die empfangenen Befehle an einem anderen seriellen Port sehen, aber die Befehle können nicht entschuldigen und es gibt sie Keine Antwort mit meinen Befehlen, es ist nicht normal. yong.cheng vor 6 Jahren 0
Es gibt keine Möglichkeit, Befehle an PuTTY zu übergeben. PuTTY ist für eine interaktive Verwendung gedacht, nicht für die Automatisierung der Befehlsausführung. Martin Prikryl vor 6 Jahren 0
Was bedeutet es * "Die Befehle können nicht entschuldigen" * - Wie manifestiert sich das? Martin Prikryl vor 6 Jahren 0
got it enter Normalerweise geben Sie ein, dass die Conmands einige Informationen mit der Spannung ausgeben, und die entsprechende LED leuchtet oder ist aus, aber nachdem der Bat ausgeführt wurde, gibt es keine Antwort. yong.cheng vor 6 Jahren 0
OK, wozu brauchen Sie den `Timeout'-Befehl? Martin Prikryl vor 6 Jahren 0
Jetzt habe ich den Timeout-Befehl nicht verwendet, ich sende nur einen Befehl "set_a 65535". yong.cheng vor 6 Jahren 0
Verwenden Sie das Zeitlimit, stellen Sie sicher, dass der letzte Befehl vollständig abgeschlossen ist, und starten Sie dann den nächsten Befehl. Um die fehlerhafte Ursache zu finden, sende ich nur einen Befehl auf einmal. yong.cheng vor 6 Jahren 0
OK, wenn Sie also nur einen Befehl senden, funktioniert er oder nicht? Mit einem Befehl können Sie auch einfachere `plink ... <command.txt` mit` command.txt` versuchen, die nur `set_a 65535` enthält (nicht` echo set_a 65535`). Martin Prikryl vor 6 Jahren 0
Ja, das Format ist dasselbe wie bei Ihnen oben, aber es werden immer noch ungültige Befehle und keine Antwort mit meinen Eingabebefehlen ausgegeben. yong.cheng vor 6 Jahren 0
OK, Sie können also nicht einmal einen Befehl automatisieren. Vielleicht sollten Sie dafür eine gesonderte Frage stellen. Wenn Sie die Ausführung eines einzelnen Befehls auflösen, können Sie hierher zurückkehren, um die Ausführung mehrerer Befehle aufzulösen. Martin Prikryl vor 6 Jahren 0
0
Appleoddity

Laut Dokumentation ist die korrekte Verwendung:

plink -load test -m commands.txt

-m = Remote-Befehle aus einer Datei lesen.

https://www.ssh.com/ssh/putty/putty-manuals/0.68/Chapter7.html#plink-usage

Ich frage mich jedoch, wozu diese Befehle verwendet werden. Es sieht fast so aus, als ob der Inhalt der commands.txtDatei eine andere Batchdatei ist und Sie möglicherweise davon ausgehen, dass diese Datei ausgeführt wird und die Ausgabe an den seriellen Port gesendet wird.

So funktioniert es nicht. Der literale Inhalt von commands.txtwird an die serielle Schnittstelle gesendet, was möglicherweise zu ungültigen Befehlsfehlern führt.

Wenn Sie den Inhalt ausführen möchten commands.txtund senden die Ausgabe an die serielle Schnittstelle sollten Sie umbenennen commands.txtzu commands.batund Rohr den Ausgang plink den folgenden Befehl eingeben: commands.bat | plink -load test

@ yong.cheng dann ist es am besten, einen Befehl zu einem Zeitpunkt auszuführen. Vereinfachen Sie die Dinge und zerlegen Sie sie, bis Sie einen grundlegenden Befehl ausführen können. Appleoddity vor 6 Jahren 0
`-m` funktioniert nicht mit der seriellen Schnittstelle, nur mit SSH. Martin Prikryl vor 6 Jahren 1