启用setlocal enabledelayedexpansion后批处理变量abc为空的原因
批处理变量
abc始终为空的原因及修复方案 嘿,我来帮你拆解下这个问题——你的批处理里变量abc为空主要有两个关键问题,咱们一个个说:
变量赋值时的空格陷阱
批处理的set命令对空格极其敏感!你写的set abc = ZZZ.bat,等号两边的空格会被纳入变量名和值的范围——也就是说你实际创建的变量是**abc(变量名末尾带空格)**,而不是你期望的abc。这时候用%abc%自然取不到任何值,因为这个变量根本不存在。代码块内的延迟扩展未正确使用
你虽然开启了enabledelayedexpansion,但在if的代码块(括号包裹的内容)里,还是用了%abc%来输出变量。批处理有个预解析机制:它会在执行整个代码块之前,就把所有%变量%替换成它们当前的初始值(这时候abc还没被赋值,所以是空字符串)。要让变量在代码块内的赋值即时生效,得把echo %abc%改成echo !abc!,用感叹号来调用延迟扩展的变量。
修正后的代码
setlocal enabledelayedexpansion If "%computername%"=="USER-PC" ( set abc=ZZZ.bat :: 去掉等号两边的空格 echo !abc! :: 用!代替%调用延迟变量 pause )
内容的提问来源于stack exchange,提问作者Lalatendu Bag
相关产品推荐
相关产品推荐

