在Windows 7中丢弃CALL批处理文件环境变量

lit*_*lit 4 windows cmd batch-file environment-variables windows-7

我已成功使用CALL机制允许一个批处理文件调用另一个批处理文件来设置环境变量.这段代码在Windows XP上运行了一年多.

但是,它在Windows 7上似乎没有以相同的方式工作.变量存在于EXIT/B语句之前的第二个批处理文件中.但是,它们在返回第一批文件时不存在.

一些简单的例子似乎按预期工作,但大批量脚本没有.

有没有人遇到过这方面的困难或知道任何变通方法?

dbe*_*ham 6

在多年的先进的批量脚本,我从来没有见过一个CALL失败,除非调用的脚本(或标签)设置的变量时SETLOCAL还在积极地保护环境变量.在CALL终止时,来自CALL内的每个活动SETLOCAL都有一个隐式ENDLOCAL.

听起来您在EXIT/B之前输入了诊断消息,以确认您的变量已定义.我会更进一步,在诊断消息之前添加多个ENDLOCAL语句.我怀疑你会在EXIT/B之前看到你的值消失.您可以根据需要添加任意数量的ENDLOCAL.ENDLOCAL永远不会影响CALL之前发生的SETLOCAL.

最可能的解释是,要么你的脚本莫名其妙地从XP变更为Win 7的,要不然有你的Win 7的环境方面的一些变化是行使尚未被曝光前的代码的某些方面.