【问题标题】:How many variable can I use in Batch File我可以在批处理文件中使用多少个变量
【发布时间】:2016-12-23 09:42:09
【问题描述】:

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

我这里有一个小脚本

@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 作为您的指导方针。

任何帮助将不胜感激!

【问题讨论】:

  • 我认为变量的数量没有硬性限制(至少从 Windows Vista 开始),唯一的限制是 RAM 的数量; environment variables 存储为一个以空字符结尾的字符串列表,由变量名称、等号和变量值组成,因此变量名称越长,值越长,可以定义的变量就越少。 .
  • Win XP Pro(可能还有所有后续版本)环境的最大空间为 64 MB。请参阅this page(在“设置环境变量,注意”下方)。
  • @Ken White 我对此有点好奇。但是你正确地指出了问题。
  • @aschipfl 这将是一个更好的解决方案,但我还不知道。也许你可以为我做更多的演示,谢谢
  • @aschipfl 现在我明白了您的意思,感谢您的帮助。

标签: batch-file variables cmd


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您提供的超级棒的答案,但我似乎发现了一个错字。你回答的第一个词应该是“Well”而不是“We'll”。无论如何,感谢您勇敢地回答! -史蒂夫
  • 我所说的 'cheatzies' 的意思是使用大约 23 行 c++ 来计算理论极限,因为 c++ 不是这个问题的主题
  • 您提供的链接似乎已失效,请更新。
猜你喜欢
  • 2018-03-25
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多