尝试在一行中的 for 循环内设置局部变量

尝试在一行中的 for 循环内设置局部变量

我不确定为什么从提示符运行此命令不起作用,setlocal 只能从批处理文件中调用吗?

setlocal EnableDelayedExpansion & for /l %i in (1,1,3) do (set text=%i & echo Hello !text!)

预期结果是:

你好 1
你好 2
你好 3

更新: 我正在使用 Windows 8.1

答案1

问题就是答案。您显然cmd在 Windows NT 中使用了 Microsoft 的命令解释器;并且setlocal当使用命令脚本之外的方式调用时,该命令解释器确实不起作用。

其他命令解释器有所不同,包括它setlocal的作用、是否可以通过命令脚本调用、是否嵌套以及是否控制您试图控制的内容。

setlocal在 Microsoft 的OS/2 版本 1 中,原始的cmd仅保存当前驱动器、目录和环境;对命令脚本之外没有任何影响;并且没有嵌套。如您所见,在过去的四分之一个世纪中,该命令已向不同的方向扩展。

此处存在差异的一个原因是 JP Software 的 TCC 在复合命令中逐步执行变量扩展,并且不需要延迟变量扩展技巧即可完成您要执行的操作。这:

对于/l %i在(1,1,3)中执行(设置文本=%i&echo Hello%text%)
…打印您想要打印的内容。

进一步阅读

  • SETLOCALWindows XP 命令行参考 A–Z。 TechNet。微软公司。
  • SETLOCAL. 采取命令/TCC 帮助。JP 软件。
  • 乔纳森·德·博因·波拉德。 SETLOCAL. 32 位命令解释器命令参考。
  • SETLOCAL. OS/2 Warp Command 参考。IBM 公司。
  • J.Emmett Beam(1988 年)。图解 OS/2. Wordware Publishing。ISBN 9781556220531。第 40 页

答案2

答案其实很简单!

对于/l %i在(1,1,3)中执行(调用设置文本=%i&echo Hello%text%)

相关内容