我可以在批处理文件中使用多少变量

时间:2016-12-23 09:42:09

标签: batch-file variables cmd

我对批量文件中可以设置多少变量感到有点好奇。

我这里有一个小脚本

@ECHO OFF
SETLOCAL EnableDelayedExpansion
FOR /L %%P IN (1,1,2147483647) DO (
    SET Foo[%%P]=%%P
    ECHO !Foo[%%P]!
)

但是这个脚本需要永远运行。那么,有没有办法找出可变数额限制? (当然,批处理文件中可以使用多少变量。)

编辑:

由于下面的评论说var。金额可能因操作系统不同而有所不同。因此,如果您要回答,请使用Windows 7 64bit w/ 4 GB RAM作为指导。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

那么真正的答案是它取决于您的机器的限制,如RAM,尤其是硬盘空间等等。但是,我相当肯定你在寻找理论答案,而不是实际答案(我也会这样!)。

所以,对于理论上的答案,让我们在这里假设以下(抱歉,如果我听起来很讽刺,但这些是真正的要求,而且它们不太现实):

  • 您的计算机体系结构是64位(最好是Itanium类)。
  • 你有128 TB的NTFS硬盘
  • 你有一个流线型的32核4THz(太赫兹)处理器,所以你可以在你老去之前看到它完成。
  • 您至少拥有至少384GB的RAM(如果您压缩名称并使用空字符串作为值)
  • 只有最初带有sp1的Windows 7专业版加上65807 files以及硬盘上的1个批处理文件。
  • 只有96783 registry索引最初与Windows 7专业版一起使用,并且硬盘上有sp1。

因此,我们遇到的大限制器是如何存储批处理变量。它们使用签名的int在数组中进行寻址。这允许存储器中存储最多2,147,483,647个变量。现在,对于硬盘发挥作用的地方。如果您允许将硬盘用于批处理变量,那么您将需要2个批处理变量来将硬盘文件用作批处理变量:一个用于缓存,一个用于for循环。而且,现在我们有4,294,967,295个可以使用的额外批量变量。现在对于注册表,假设Windows使用有符号整数来索引注册表,这将允许总共2,147,483,647个注册表索引。现在,总计,(2,147,483,647 - 2)+(4,294,967,295 - (65807 + 1))+(2,147,483,647 - 96783)=

8589771996

(假设没有c ++编码作弊的公平竞争)