|
我猜,你应该没有认真看set帮助
- 终于添加了延迟环境变量扩充的支持。
- 该支持总是按默认值被停用,但也可以
- 通过 CMD.EXE 的 /V 命令行开关而被启用/停用。请参阅 CMD /?
- 考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境
- 变量扩充是很有用的,而不是执行的时候。
- 以下例子
- 说明直接变量扩充的问题:
- set VAR=before
- if "%VAR%" == "before" (
- set VAR=after
- if "%VAR%" == "after" @echo If you see this, it worked )
- 不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中的 %VAR% 会被代替;
- 原因是: 它包含 IF 的文体
- ,IF 是一个复合语句。所以,
- 复合语句中的 IF 实际上是在比较 "before"
- 和"after",这两者永远不会相等。同样,以下这个例子
- 也不会达到预期效果:
- set LIST=
- for% i in (*) do set LIST=%LIST%%i
- echo%LIST%
- 原因是,它不会在目前的目录中建立一个文件列表,
- 而只是将LIST 变量设成找到的最后一个文件。
- 这也是因为 %LIST% 在
- FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量是空的。
- 因此,我们真正执行的 FOR 循环是:
- for% i in (*) do set LIST= %i
- 这个循环继续将 LIST 设成找到的最后一个文件。
- 延迟环境变量扩充允许你使用一个不同的
- 字符(惊叹号)在
- 执行时间扩充环境变量。如果延迟的变量扩充被启用,
- 可以将上面例子写成以下所示,以达到预期效果:
- set VAR=before
- if "%VAR%" == "before" (
- set VAR=after
- if "!VAR!" == "after" @echo If you see this, it worked
- )
- set LIST=
- for% i in (*) do set LIST=!LIST! %i
- echo %LIST%
- 如果命令扩展被启用,有几个动态环境变量可以被扩展,但不会出现在 SET 显示的变
- 量列表中。每次变量数值被扩展时,这些变量数值都会被动态计算。如果用户用这些
- 名称中任何一个明确定义变量,那个定义会替代下面描述的动态定义:
复制代码 |
|