在批处理文件中设置了太多变量时会发生什么

时间:2016-12-24 05:58:08

标签: batch-file variables

last question 之后,我想知道设置了太多变量会发生什么。

我再次拥有相同的脚本,当然,它需要永远运行。

@Echo off
Setlocal EnableDelayedExpansion 
For /L %%P In (1,1,999999999999) Do (
    Set Foo[%%P]=%%P
    Echo !Foo[%%P]!
)

再说一遍,我想知道会发生什么,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

如果您按常规设置变量,那么这将适用。如果您确实获得了2,147,483,647个批处理变量,然后再设置一个,那么有符号整数将回绕到零,导致所有先前设置的变量被删除,在此过程中泄漏了大量内存并导致短暂的重量瞬间落后。但是,不,这不应该导致致命的Windows错误。

但是,如果您使用的是setx并且确实已经超过2,147,483,647个注册表项,那么整个注册表可能会被删除,永久性地将您的计算机连接起来。但是,无需担心意外执行此操作,因为随着连续注册表项的开销增加,计算机将完全滞后。但是,有理由担心的是,重启会延迟,因为每次计算机启动时注册表都会加载到ram中。所以,不,为自己测试这个并不是一个明智的想法。但是,如果您通过将注册表文件导入注册表来实现此目的,并且您有足够的RAM,并且您的计算机体系结构是64位,那么实际上这可能是......