批处理(.bat)中设置变量输出多行换行及赋值失效原因探究
为什么
SET nn=%n%%n%无法实现两个换行? 即时变量展开的“拆命令”问题:批处理里用
%变量%的展开是解析命令时就完成的。你先定义了SET n=^&echo(,这里的^是转义符,目的是让&变成变量n的内容(而不是用来分割命令),所以n实际存的是&echo(。当你执行SET nn=%n%%n%时,%n%会被立刻替换成&echo(,这条命令直接变成了SET nn=&echo(&echo(——系统看到&就会把它当成命令分隔符,实际执行的是三个独立操作:SET nn=(给nn赋空值)echo((输出一行空行)echo((再输出一行空行)
结果nn变量根本没存下你要的换行逻辑,后续调用自然没效果。
直接写
SET nn=^&echo(^&echo(的原理:这里的两个^分别转义了后面的&,让它们成为nn变量的存储内容,最终nn存的是&echo(&echo(。之后调用%nn%时,展开后就能触发两个echo(命令,输出两行空行。延迟扩展
SET nn=!n!!n!的作用:启用延迟扩展后,!变量!的展开是命令执行阶段才完成的。这时候&会被当作变量值的一部分,不会被提前识别为命令分隔符,所以!n!!n!展开后的&echo(&echo(会完整赋值给nn,后续调用就能正常输出换行。
内容的提问来源于stack exchange,提问作者joseville
相关产品推荐
相关产品推荐

