0

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

但是我无法让它回显实际输入的值。我已经尝试了回声线上的所有变化。

谁能告诉我我做错了什么?

4

1 回答 1

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
于 2012-05-09T16:18:46.360 回答