[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理变量的最大长度是多少个字符?

如题。
我打算给变量一个累加的值。
  1. for /l %%a in (1,1,30) do (
  2. set a=!a! -i akaka
  3. )
  4. echo !a!
复制代码
我担心会超出cmd单行输入的最大值
对于超出最大值,有什么解决方法吗

自己做的测试:
1、命令行中,一行代码究竟可以写多长?
(win10环境)经过测试,一行代码最多可以输入8192个字符。(8K大)
2、命令行中,一行代码究竟可以使用多少个变量?
(win10环境)经过测试,一行代码最多可以使用1024个变量。(与一行可以使用的最大数值有关)
测试方式:用ffmpeg进行MP3合成。以成功执行代码的代码长度计算。
测试代码:
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,1024) do (
  4. echo %%a
  5. set mp3list=!mp3list!^|%%a.mp3
  6. echo !mp3list! >c:\test\ttt.txt
  7. )
  8. c:
  9. cd \test
  10. set mp3list=!mp3list:~1!
  11. echo !mp3list!>n
  12. echo c:\run\ffmpeg\bin\ffmpeg.exe -y -i concat:^"!mp3list!^" -acodec  libmp3lame -ar 48000 -ab 1>m
  13. c:\run\ffmpeg\bin\ffmpeg.exe -y -i concat:^"!mp3list!^" -acodec  libmp3lame -ar 48000 -ab 128k -vol 100 -vn c:\test\mp3.mp3
  14. pause
复制代码
其中
  1. echo c:\run\ffmpeg\bin\ffmpeg.exe -y -i concat:^"!mp3list!^" -acodec  libmp3lame -ar 48000 -ab >m
复制代码
这行代码正好是8192个字符。
测试中有把
  1. for /l %%a in (1,1,1024) do (
复制代码
改为1025
  1. echo !mp3list! >c:\test\ttt.txt
复制代码
段正常输出。
综上所述,cmd的最大命令行长度是8K。当然,仅限win10系统。

我想麻烦大家在其它版本的系统中进行下测试。看看各个windows版本有什么不同。

TOP

::与参数个数无关,8192是命令(如上面的set、echo)之后的所有字符(当然包含空格)
::所以,set至少后面有【一个空格】【变量名最短是1】【等号】三个字符,其后最多只剩8089(8192-3)个位置
::同理...
  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%i in (1,1,10000) do (
  3. if not defined x set a=!a!1||set x=!n!
  4. set /a n+=1
  5. )
  6. echo;变量最长!x!
  7. for /l %%i in (1,1,10) do (
  8. set e=!e!1
  9. if not defined y echo;!a!!e!>nul||set y=!x!
  10. set /a x+=1
  11. )
  12. echo;参数最长!y!
  13. pause & exit /b
复制代码
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

返回列表