简体   繁体   中英

File-size and line-length limits for Windows batch files

I am generating a Windows batch file that might become quite large, say a few megabytes. I've searched for possible limits regarding the maximum file size and maximum length of a line in a batch file, but I couldn't find anything. Any practical experiences?

I think filesize can be anything up to 2 GB, perhaps even more. It's an interpreted language, so if this is done right, filesize limit should be the filesize limit of the file system. I never had any errors with batch files being too large, and some of those I created were several MBs in size.

There should be a line length limit, but it should be more than 256. This can easily be tested, just do some "set A=123456789012...endofline", after that "echo %A%", and you'll see how far you can go.

It works for me with very long lines (around 4K), but at 8K echo gives a message, "Line too long", so 8192 bytes should be some limit.

Now tested for filesize, too, tested with "echo off", thousands of set lines, after that "echo end", and it worked for a 11 MB file (although it took some seconds to finish :) - no limit in sight here.

110 MB worked, too. Is this enough? ;)

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

There are many different limits.

There is no (known) limit for the file itself, also code blocks seems to be unlimited.

The maximal size of a variable is 8191 characters.
Obviously the limit for a line has to be larger to assign a maximal sized variable.
Even the variable name can be 8191 chars long.

It's possible to build a line with 16387 chars

set <varname_8191_chars_long>=<content_8191_chars_long>

But the batch parser is able to read much longer lines (tested with 100k in one line).
But it's required, that the effective length is < ~8191 chars after the percent expansion .
Like in

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

This works because after the expansion the line contains only echo END .
( One bug of the parser: The parser drops at every multiple of 8192 one character)

Some ideas, not necessarily mutually exclusive:

  • Switch to PowerShell .
  • Switch to a data-driven application, so that all the variable stuff is kept in a data file ( CSV , text, whatever), and as a result you can have a smaller, boilerplate script that opens the data file and operates.

It should work at least up to 2 GB. The lines are read directly from the BAT file on the disk (there is no caching involved). I make this statement because of the following:

In fact you can edit a BAT file while it is running! And it will work even though a text editor may rename the original version and save the new version in a new location on the disk. As long as you are careful not to insert text above the currently executing command. Lines can be changed/inserted/deleted below the currently executing command and the new lines will be the ones executed. I have often done this with BAT files containing a long list of wget commands, each taking tens of minutes to execute.

According to Microsoft, there is no limit to a batch file size. However, a batch file line should not exceed 127 bytes or it will truncated at execution.

See Maximum Line Length and Count for Batch Files & CONFIG.SYS

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM