Board logo

标题: 我发现CMD里的每行字符限制数 [打印本页]

作者: 不得不爱     时间: 2006-10-17 21:30    标题: 我发现CMD里的每行字符限制数

我在执行下面的BAT文件时正常
@echo off
setlocal ENABLEDELAYEDEXPANSION
set a=22
for /l %%c in (1,1,1019) do set a=!a!22
call :a !a!
goto :eof
:a
set gs=
set c=%1
:b
set d=%c:~-2%
set c=%c:~0,-2%
if %d%*==22* set/a gs+=2&goto b
echo !gs!
goto :eof
而在执行下面的BAT文件就显示输入行太长。
@echo off
setlocal ENABLEDELAYEDEXPANSION
set a=22
for /l %%c in (1,1,1020) do set a=!a!22
call :a !a!
goto :eof
:a
set gs=
set c=%1
:b
set d=%c:~-2%
set c=%c:~0,-2%
if %d%*==22* set/a gs+=2&goto b
echo !gs!
goto :eof
也就是输入行最长是2048个字!
随便说下,在CMD里执行 SET /A 39%16会得到39除16的余数7,而在BAT文件里执行 SET /A 39%16会得到396,因为在BAT文件里系统启用了默认的%0~~%9 而%1是空的话执行 SET /A 39%16就会得到396,如果要在BAT里取余应该用下面类似的命令来取余:
SET A=16
SET/A 39%%A%
在执行时系统会把%A%替换成16后执行取余操作!
作者: 无奈何     时间: 2006-10-17 22:20
qwe1234567 兄使用的是 2000 吧?
命令行长度限制:

  Quote:
Long Commands
Under Windows NT, the command line is limited to 256 characters.
Under Windows 2000, the command line is limited to 2046 characters.
Under Windows XP, the command line is limited to 8190 characters.

For all OS's NTFS and FAT allows pathnames of up to 260 characters.

参考链接:http://www.ss64.com/nt/cmd.html

在批处理中需要将单百分号替换为双百分号
set /a x=39%%16
作者: pengfei     时间: 2006-10-17 22:35
xp下也有限制...
作者: 9527     时间: 2006-10-17 22:54
set  a=16
set /a d=39%%16
SET /a b=39%%a
set /a c=a+1
echo %c%   %b%   %d%

qwe1234567兄试试上面的代码吧,也许就会明白,SET /A有一个特性,那就是,
例如 : set a=1  那么 set /a a=a+1和set /a %a%+1是一样的
作者: pengfei     时间: 2006-10-17 23:11
有意思, qwe1234567版主第一楼取余数时忘记了cmd和批处理下"%"与"%%"号的差别.

输入行太长, 这可能是因为系统为环境变量分配的内存空间是有限的, 发现XP下为八千多个字节, 2000下是二千多字节, 还是有区别的.

而pip兄讲的那个set /a的特性, set /a a=a+1, set /a a=%a%+1实际是一样的, 也是set命令的一种处理机制吧.

%a%作为一个环境变量, 一般要用%a%来表示. 而跟在set /a 后不用转义, 也就是说出现字母a, 系统自动将其当作一个字符变量来处理, 然后在内存中跟据变量名获取相应的字符串值.

[ Last edited by pengfei on 2006-10-17 at 23:42 ]
作者: electronixtar     时间: 2006-10-17 23:46
的确有限制。上次在一个快捷方式inject脚本就发现了这个问题。很是郁闷
作者: lxmxn     时间: 2006-10-18 01:35
恩,有限制...
 
  记得上次执行N个"echo %time%"的批处理时,提示说命令行太长...

  汗一个...

作者: vkill     时间: 2006-10-18 05:41
xp  没有这个限制的~pip说的对,我试过的昨天刚刚
作者: lxmxn     时间: 2006-10-18 06:11


  Quote:
Originally posted by he200377 at 2006-10-18 05:41:
xp  没有这个限制的~pip说的对,我试过的昨天刚刚


  XP没有命令字符长度的限制吗?不会吧?我的怎么限制了?

作者: pengfei     时间: 2006-10-18 08:42
变量的存储单元总是有大小限制的. 只是多少的问题.