1

Вот команды, которые я ввожу в командной строке Windows:

> set /P myvalue="Enter a value: " && echo "Here is what you entered: %myvalue%"

Я ожидал, что этот сценарий назначит пользовательский ввод %myvalue% и (после успешного выхода из первой команды) выведет %myvalue% согласно команде echo. Оператор echo не выводит текущее значение %myvalue% .

Если я запускаю команды отдельно и последовательно, я получаю ожидаемое поведение.

Зачем?

2 ответа2

2

Переменные раскрываются по одной строке за раз. https://ss64.com/nt/syntax-conditional.html

Я играл с ним некоторое время и не мог придумать способ, чтобы он проходил по одной линии. Это работает, когда команды выполняются одновременно, как вы говорите.

0

Как упоминалось в CodeSampleNotFound, расширение является виновником здесь. Мне удалось найти обходной путь для вашего примера:

set /P myvalue="Enter a value: " & echo. | echo "Here is what you entered: %myvalue%"

Один только символ канала не ждет, пока команда set получит свой ввод, перед обработкой команды echo , поэтому было необходимо добавить несущественную команду между ними. echo. обычно печатает пустую строку, но в этом случае это не так, поэтому вы получите вывод:

>set /P myvalue="Enter a value: " & echo. | echo "Here is what you entered: %myvalue%"
Enter a value: Test
"Here is what you entered: Test"

В этом случае у вас нет такой же проверки ошибок, но если вы устанавливаете новую переменную, вы можете проверить, что она была установлена с помощью:

set /P myvalue="Enter a value: " & echo. | IF NOT "%myvalue%"=="" echo "Here is what you entered: %myvalue%"

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