找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14372|回复: 1

BAT中同时有call 和 !!时预处理是怎么样的?

[复制链接]
发表于 2012-12-18 22:44:43 | 显示全部楼层 |阅读模式
  1. @echo off & setlocal enabledelayedexpansion

  2.    set "k=qdj"
  3.    set sqdj=ok
  4.    echo %k%
  5.    call call echo %%%%k%%%%m%%%%%%%%
  6.    call echo %%s!k!%%

  7. )
复制代码
 楼主| 发表于 2012-12-19 21:05:33 | 显示全部楼层
我是这样认为在 call call echo %%%%k%%%%m%%%%%%%% 里
第一次call后,变成 call echo %%k%%m%%%% ,为什么k 和 m 没有被替换,是因为他们两边的%都是偶数。
第二次call后,变成 echo %k%m%%
最后一步替换变量 代码变成 echo qdjm%,因为%号是第一个和第二个配对的,一次类推。所以后面的m并不是变量,而是普通字符,最后的%%则被处理成%,这样就输出 qdjm% 了。
由于call的存在,变量被表示成%%变量%% 的形式,这样就无法在预处理时直接进行扩展,只有到解释call后,将 %%变量% % 还原成%变量%,然后再扩展,这就相当于使用了变量延迟扩展。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 00:39 , Processed in 0.014745 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表