我试图在DOS CMD脚本中执行此操作:
@setlocal
@for /L %%X in (1,1,10) do @call :label1 %%X
@endlocal
@exit /b
:label1
@set I=%1
@set /P A%I%=SET A%I% to?
@echo You entered %%A%%I%%
exit /b
但是我不能让它回应实际输入的值。我已经尝试了回声线上的所有变化。
谁能告诉我我做错了什么?
答案 0 :(得分:1)
要获得输出,您可以使用call echo You entered %%A%I%%%
。
但最好使用延迟扩展,以便特殊字符如&和|永远不会给你带来问题:echo You entered !A%I%!
要使用延迟展开,您需要使用setlocal enableDelayedExpansion
启用它。
有用的提示1 - 将@echo off
放在脚本的顶部。然后,您永远不需要在以下任何命令中使用@
。
有用的提示2 - 在使用SET / P之前,您应该明确清除任何现有的变量值。您无法确定它是否已定义。如果用户只是按<Enter>
而不输入任何内容,则会保留现有值。
有用的提示3 - 您甚至不需要I
变量。只要%1
{。}},您就可以使用%I%
参数。
有用的提示4 - 更好的是,你甚至不需要调用子程序。
@echo off
setlocal enableDelayedExpansion
for /L %%X in (1,1,10) do (
set "A%%X="
set /P "A%%X=SET A%%X to? "
echo You entered !A%%X!
)
endlocal