作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 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”。那么我在这里做错了什么?
最佳答案
他们被分配。是显示没有按预期工作。
这里有一个带括号的命令 block ,它是循环体:
… (
set /p usr=""
echo "You entered %usr%"
)
括号中的 block 在 block 开始执行之前被完全解析。因此,%usr%
表达式在 block 执行之前 被求值(此时用它的值代替)。在执行 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
被执行或直到脚本结束)。或者,您可以简单地在脚本开头启用该模式,直到结束才将其关闭,但在这种情况下,您将不得不担心用户输入中可能出现的任何 !
。
关于batch-file - 命令/批处理 :userinput inside a for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7453551/
我是一名优秀的程序员,十分优秀!