CMD/Batch: for循环中的用户输入



我试图在for循环中输入。但是输入不赋值给输入变量。

@echo off
echo Enter something for 3 times
for %%i in ( 1 2 3 ) do ( 
set /p usr=""
echo "You entered %usr%"
)
pause

echo "You entered %usr%"

只是打印"You Entered"。我哪里做错了?

它们是赋值的。是显示不正常

这里有一个带括号的命令块,它是循环体:

… ( 
set /p usr=""
echo "You entered %usr%"
)

括号内的块在块开始执行之前被完全解析。因此,%usr%表达式在块执行之前被求值(替换为当前的值)。在执行echo命令时,已经没有%usr%了,只有一个空字符串,其中是解析时 usr的值。

所以,你需要的是延迟展开
SETLOCAL EnableDelayedExpansion

,它一直有效,直到到达批处理或ENDLOCAL命令的末尾。

同样,对于延迟展开,你必须使用不同的语法:用!usr!代替%usr%

下面是修改后的脚本,以便使用延迟扩展:

@echo off
echo Enter something for 3 times
for %%i in ( 1 2 3 ) do ( 
set /p usr=""
setlocal EnableDelayedExpansion
echo "You entered !usr!"
endlocal
)
pause

还有一件事要记住:因为模式是与SETLOCAL命令的变体一起引入的,这意味着对环境变量的所有更改都是在SETLOCAL命令范围内的本地更改(即直到执行ENDLOCAL或直到脚本结束)。或者,您可以简单地在脚本开始时启用该模式,直到脚本结束时才将其关闭,但在这种情况下,您将不得不担心用户输入中可能出现的任何!

相关内容

  • 没有找到相关文章

最新更新