Windows 批处理文件的文件大小和行长度限制

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

我正在生成一个 Windows 批处理文件,该文件可能会变得相当大,比如说几兆字节。我已经搜索了有关批处理文件中最大文件大小和最大行长度的可能限制,但我找不到任何内容。有什么实际经验吗?

windows batch-file
7个回答
12
投票

我认为文件大小可以是 2 GB 以内的任何大小,甚至可能更大。它是一种解释性语言,因此如果做得正确,文件大小限制应该是文件系统的文件大小限制。我从来没有遇到过批处理文件太大的错误,而且我创建的一些文件大小有几 MB。

应该有一个行长度限制,但应该超过256。这很容易测试,只需执行一些“set A=123456789012...endofline”,然后“echo %A%”,你就可以了看看你能走多远。

它适用于很长的行(大约 4K),但在 8K

echo
时会给出一条消息,“行太长”,因此 8192 字节应该是一些限制。

现在也测试了文件大小,使用“echo off”进行了测试,在“echo end”之后测试了数千条设置行,并且它适用于 11 MB 的文件(尽管需要几秒钟才能完成:) - 没有限制在这里。

110 MB 也能用。这够了吗? ;)


6
投票

CMD 中任何命令行(或变量)的最大长度为 8191 个字符


4
投票

有许多不同的限制。

文件本身没有(已知)限制,代码块似乎也是无限的。

变量的最大大小为 8191 个字符。
显然,一行的限制必须更大才能分配最大大小的变量。
甚至变量名称的长度也可以是 8191 个字符。

可以构建包含 16387 个字符的行

set <varname_8191_chars_long>=<content_8191_chars_long>

但是批处理解析器能够读取更长的行(在一行中测试了 100k)。
但要求有效长度为< ~8191 chars after the 膨胀百分比
就像在

echo %======%%=====%%======%%=====% ..... %=====%END

这是可行的,因为扩展后该行仅包含

echo END

(解析器的一个bug:解析器在每 8192 的倍数一个字符时就会丢弃)


2
投票

一些想法,不一定是相互排斥的:

  • 切换到PowerShell
  • 切换到数据驱动的应用程序,以便所有变量都保存在数据文件中(CSV,文本,等等),因此您可以拥有一个更小的样板脚本来打开数据文件并进行操作.

1
投票

它的工作内存至少应达到 2 GB。行被读取 直接从磁盘上的BAT文件(没有缓存) 涉及)。我做出此声明的原因如下:

事实上,您可以在 BAT 文件运行时对其进行编辑!还有它 即使文本编辑器可能会重命名原始内容也能工作 版本并将新版本保存在新位置 磁盘。只要你注意不要在上面插入文字 当前正在执行的命令。线路可以是 在当前执行的下面更改/插入/删除 命令和新行将被执行。我有 通常使用包含一长串的 BAT 文件来完成此操作 wget 命令,每个命令需要数十分钟才能执行。


0
投票

我制作了一个测试脚本来复制 62MB 的文件,但是当脚本完成时,没有文件被复制,哈哈,可能是什么错误?

 test script to copy file with 62MB


-1
投票

根据 Microsoft 的说法,批处理文件大小没有限制。但是,批处理文件行不应超过 127 字节,否则在执行时会被截断。

请参阅 批处理文件和 CONFIG.SYS 的最大行长度和计数

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