为什么这个批处理命令不能按预期工作?

为什么这个批处理命令不能按预期工作?

以下是我在 Windows 命令行中输入的命令:

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

我原本期望这个脚本会将用户输入分配%myvalue%(成功退出第一个命令后)%myvalue%将按照 echo 命令输出。echo 语句不会输出 的当前值%myvalue%

如果我分别且连续地运行这些命令,我​​会得到预期的行为。

为什么?

答案1

正如 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%"

答案2

变量每次扩展一行。 https://ss64.com/nt/syntax-conditional.html

我玩了一会儿,但没能想出一种方法让它沿着同一条线传递。当命令像你说的那样同时运行时,它确实有效。

相关内容