Выполнение нескольких команд через последовательный порт с PuTTY с файлом .bat с задержкой между отдельными командами

1147
yong.cheng

send.bat:

plink -load test < commands.txt 

(тест - это сохраненный сеанс в замазке)

enter image description here

Commands.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 

Когда я запускаю send.bat, он может безопасно открыть putty, но не может вводить команды, которые я пишу в command.txt.

enter image description here

Я положил эти файлы в один каталог. enter image description here

1
К чему подключается последовательный порт? Что вы пытаетесь достичь? Пожалуйста, не отвечайте в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным и полным. Scott 5 лет назад 2

2 ответа на вопрос

1
Appleoddity

Согласно документации правильное использование:

plink -load test -m commands.txt

-m = Чтение удаленных команд из файла.

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

Хотя я задаюсь вопросом, для чего используются эти команды. Похоже, что содержимое commands.txtфайла - это другой пакетный файл, и вы, вероятно, ожидаете, что этот файл будет выполнен, а выходные данные будут поданы на последовательный порт.

Это не так, как это работает. Литеральное содержимое commands.txtотправляется на последовательный порт, что может привести к ошибкам всех недопустимых команд.

Если вы хотите выполнить содержимое commands.txtи отправить вывод на последовательный порт, вы должны переименовать commands.txtего и направить commands.batвывод в plink, используя следующую команду: commands.bat | plink -load test

@ yong.cheng тогда лучшее, что нужно сделать, это попробовать по одной команде за раз. Упростите вещи и разбивайте их на части, пока не получите одну базовую команду для запуска. Appleoddity 5 лет назад 0
`-m` не работает с последовательным портом, только с SSH. Martin Prikryl 5 лет назад 1
1
Martin Prikryl

Ваш commands.txtфайл просто беспорядок.

Я предполагаю, что вы хотите отправить set_zeroкоманду, а не echo set_zeroкоманду, поэтому положите set_zeroв файл, а не echo set_zero.

Хотя, если вам нужно сделать паузу между командами, простое перенаправление ввода не поможет, так как вы не можете использовать timeoutкоманду тогда. Вы хотите выполнить timeoutкоманду локально, пока вы отправляете ее на последовательный порт. Ваш код на самом деле правильный, если бы вы использовали его как скрипт, который генерирует входные данные для plink. Но для этого вам нужно |не использовать <.

Это может делать то, что вы хотите:

( 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 

Тем не менее, вы можете перейти pauseтолько после plink:

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

Alternativelly как @Appleodity уже предложили переименовать commands.txtв commands.batи использовать его как:

commands.bat | plink -load test 

Опять же, может быть, это нравится (после переезда pauseиз commands.bat):

commands.bat | plink -load test  pause >nul 2>&1 
спасибо за вашу любезную помощь! yong.cheng 5 лет назад 0
вы думаете, я помещаю эти файлы в одну и ту же директорию правильно? putty.exe совместим с plink? Вы можете увидеть картинку в строке вопроса. yong.cheng 5 лет назад 0
Да, тот же каталог будет делать (и этот каталог должен быть рабочим каталогом). - Я не знаю, что вы подразумеваете под * «putty.exe совместим с plink?» * - Я вижу картинку, но не понимаю, о чем вы просите. Martin Prikryl 5 лет назад 0
Я имею в виду, я не знаю, зачем использовать plink, но не putty в send.bat, теперь я могу успешно отправлять команды с помощью bat, и я могу видеть полученные команды в другом последовательном порту, но команды не могут быть точными, и есть нет ответа с моими командами, это нормально. yong.cheng 5 лет назад 0
Я имею в виду, я не знаю, зачем использовать plink, но не putty в send.bat, теперь я могу успешно отправлять команды с помощью bat, и я могу видеть полученные команды в другом последовательном порту, но команды не могут быть точными, и есть нет ответа с моими командами, это нормально. yong.cheng 5 лет назад 0
Нет способа передать команды PuTTY. PuTTY предназначен для интерактивного использования, а не для автоматизации выполнения команд. Martin Prikryl 5 лет назад 0
Что значит * «команды не могут оправдать» * - Как это проявляется? Martin Prikryl 5 лет назад 0
получил! Обычно при вводе команд выводится некоторая информация с напряжением, и светодиод соответствующего индикатора загорается или гаснет, но после запуска летучей мыши отклика нет. yong.cheng 5 лет назад 0
ОК, для чего вам нужна команда `timeout`? Martin Prikryl 5 лет назад 0
теперь я не использовал команду timeout, я просто отправил одну команду "set_a 65535". yong.cheng 5 лет назад 0
использовать тайм-аут - просто убедиться, что последняя команда полностью выполнена, а затем запустить следующую команду, чтобы найти причину сбоя, я просто отправляю одну команду за раз. yong.cheng 5 лет назад 0
Итак, если вы отправите только одну команду, она работает или нет? С помощью одной команды вы также можете попробовать более простой `plink ... <command.txt` с` command.txt`, содержащим только `set_a 65535` (не` echo set_a 65535`). Martin Prikryl 5 лет назад 0
да, формат такой же, как вы упомянули выше, но он по-прежнему выводит недопустимые команды и не отвечает на мои команды ввода. yong.cheng 5 лет назад 0
Итак, вы не можете автоматизировать выполнение даже одной команды. Поэтому, возможно, вам следует задать отдельный вопрос для этого. И как только вы решите выполнение одной команды, мы можем вернуться сюда, чтобы разрешить выполнение нескольких команд. Martin Prikryl 5 лет назад 0