我不确定为什么从提示符运行此命令不起作用,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%)…打印您想要打印的内容。
进一步阅读
答案2
答案其实很简单!
对于/l %i在(1,1,3)中执行(调用设置文本=%i&echo Hello%text%)