gpt4 book ai didi

batch-file - 命令/批处理 :userinput inside a for loop

转载 作者:行者123 更新时间:2023-12-04 16:30:16 29 4
gpt4 key购买 nike

我正在尝试在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com