我正在尝试在 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
但是我无法让它回显实际输入的值。我已经尝试了回声线上的所有变化。
谁能告诉我我做错了什么?
我正在尝试在 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
但是我无法让它回显实际输入的值。我已经尝试了回声线上的所有变化。
谁能告诉我我做错了什么?
要获得输出,您可以使用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