Board logo

标题: [文本处理] 批处理call变量延迟的的一些疑问 [打印本页]

作者: 悬崖之树    时间: 2012-7-11 21:03     标题: 批处理call变量延迟的的一些疑问

本帖最后由 canyuexiaolang 于 2012-7-11 22:13 编辑

代码1:
  1. @echo off
  2. set str=abcdefg
  3. call echo %%str:~-3%%
  4. pause
复制代码
为什么显示 efg
而代码2:
  1. @echo off
  2. set str=abcdefg
  3. call echo %%%%str:~-3%%%%
  4. pause
复制代码
则显示 %str:~-3%
为什么呢?
作者: canyuexiaolang    时间: 2012-7-11 22:45

  1. @echo off
  2. set str=abcdefg
  3. for /f "tokens=* delims=" %%i in ('call echo %%%%str:~-3%%%%') do echo %%i
  4. pause
复制代码
有趣。
作者: garyng    时间: 2012-7-11 22:58

应该是叫做 命令嵌套吧 跟变量延迟是两回事呢。
作者: CrLf    时间: 2012-7-12 00:15

call 具备二次扩展特性,会对 % 进行额外的扩展解释
作者: 悬崖之树    时间: 2012-12-5 21:02

本帖最后由 悬崖之树 于 2012-12-5 21:16 编辑

回复 2# canyuexiaolang
你的代码后怎么是 %def% 啊?
而下面的就正常:
  1. @echo off
  2. set str=abcdef
  3. call call echo %%%%str:~-3%%%%
  4. pause
复制代码
但是把上面的 call call echo %%%%str:~-3%%%%放到你的代码里就不行了,仍旧是显示 %def%




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2