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

问题描述 投票:0回答:2

我有点好奇我可以在批处理文件中设置多少个变量。

我这里有一个小脚本

@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
作为您的指南。

任何帮助将不胜感激!

batch-file variables cmd
2个回答
4
投票

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

因此,对于理论答案,我们假设以下内容(抱歉,如果我听起来很讽刺,但这些是真正的要求,而且它们不太现实可能):

  • 您的计算机架构是 64 位(最好是 Itanium 级)。
  • 您有一个 NTFS 的 128 TB 硬盘
  • 您拥有一个精简的 32 核 4THz(太赫兹)处理器,因此您可以在老死之前看到它的完成。
  • 您至少拥有 384GB RAM(如果您压缩名称并使用空字符串作为值)
  • 硬盘上只有 Windows 7 Professional SP1 附带的 65807 个文件 加上你的 1 个批处理文件。
  • 您的硬盘上只有 96783 注册表索引,最初是 Windows 7 Professional SP1 附带的。

因此,我们遇到的最大限制是批处理变量的存储方式。它们使用有符号整数在数组中寻址。这允许内存中最多存储 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) =

8,589,771,996

(假设公平竞争,没有 C++ 编码作弊)


0
投票

如果这是真的,那么这是一个美丽的数字。这意味着地球上的每个人(包括新生儿)都有 1 个变量。 :)

© www.soinside.com 2019 - 2024. All rights reserved.