1

send.bat:

plink -load test < commands.txt

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

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.

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

2 ответа2

1

Файл 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
0

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

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

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