标题: [其他] 批处理变量的最大长度是多少个字符? [打印本页]
作者: chouxia 时间: 2015-11-15 10:21 标题: 批处理变量的最大长度是多少个字符?
如题。
我打算给变量一个累加的值。- for /l %%a in (1,1,30) do (
- set a=!a! -i akaka
- )
- echo !a!
复制代码
我担心会超出cmd单行输入的最大值
对于超出最大值,有什么解决方法吗
作者: chouxia 时间: 2015-11-19 19:09
自己做的测试:
1、命令行中,一行代码究竟可以写多长?
(win10环境)经过测试,一行代码最多可以输入8192个字符。(8K大)
2、命令行中,一行代码究竟可以使用多少个变量?
(win10环境)经过测试,一行代码最多可以使用1024个变量。(与一行可以使用的最大数值有关)
测试方式:用ffmpeg进行MP3合成。以成功执行代码的代码长度计算。
测试代码:- @echo off
- Setlocal enabledelayedexpansion
- for /l %%a in (1,1,1024) do (
- echo %%a
- set mp3list=!mp3list!^|%%a.mp3
- echo !mp3list! >c:\test\ttt.txt
- )
- c:
- cd \test
- set mp3list=!mp3list:~1!
- echo !mp3list!>n
- echo c:\run\ffmpeg\bin\ffmpeg.exe -y -i concat:^"!mp3list!^" -acodec libmp3lame -ar 48000 -ab 1>m
- c:\run\ffmpeg\bin\ffmpeg.exe -y -i concat:^"!mp3list!^" -acodec libmp3lame -ar 48000 -ab 128k -vol 100 -vn c:\test\mp3.mp3
- pause
复制代码
其中- echo c:\run\ffmpeg\bin\ffmpeg.exe -y -i concat:^"!mp3list!^" -acodec libmp3lame -ar 48000 -ab >m
复制代码
这行代码正好是8192个字符。
测试中有把- for /l %%a in (1,1,1024) do (
复制代码
改为1025- echo !mp3list! >c:\test\ttt.txt
复制代码
段正常输出。
综上所述,cmd的最大命令行长度是8K。当然,仅限win10系统。
我想麻烦大家在其它版本的系统中进行下测试。看看各个windows版本有什么不同。
作者: 回家路上 时间: 2015-11-19 21:11
::与参数个数无关,8192是命令(如上面的set、echo)之后的所有字符(当然包含空格)
::所以,set至少后面有【一个空格】【变量名最短是1】【等号】三个字符,其后最多只剩8089(8192-3)个位置
::同理...- @echo off & setlocal enabledelayedexpansion
- for /l %%i in (1,1,10000) do (
- if not defined x set a=!a!1||set x=!n!
- set /a n+=1
- )
- echo;变量最长!x!
- for /l %%i in (1,1,10) do (
- set e=!e!1
- if not defined y echo;!a!!e!>nul||set y=!x!
- set /a x+=1
- )
- echo;参数最长!y!
- pause & exit /b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |