以下是我在 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
我玩了一会儿,但没能想出一种方法让它沿着同一条线传递。当命令像你说的那样同时运行时,它确实有效。