|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
『楼 主』:
我发现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后执行取余操作!
|
我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件 |
|
2006-10-17 21:30 |
|
|
无奈何
荣誉版主
积分 1338
发帖 356
注册 2005-7-15
状态 离线
|
『第
2 楼』:
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
|
☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul
|
|
2006-10-17 22:20 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
|
2006-10-17 22:35 |
|
|
9527
银牌会员
努力做坏人
积分 1185
发帖 438
注册 2006-8-28 来自 北京
状态 离线
|
『第
4 楼』:
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是一样的
|
我今后在论坛的目标就是做个超级坏人!!! |
|
2006-10-17 22:54 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
5 楼』:
有意思, 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 ]
|
|
2006-10-17 23:11 |
|
|
electronixtar
铂金会员
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『第
6 楼』:
的确有限制。上次在一个快捷方式inject脚本就发现了这个问题。很是郁闷
|
C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-10-17 23:46 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
7 楼』:
恩,有限制...
记得上次执行N个"echo %time%"的批处理时,提示说命令行太长...
汗一个...
|
|
2006-10-18 01:35 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
8 楼』:
xp 没有这个限制的~pip说的对,我试过的昨天刚刚
|
|
2006-10-18 05:41 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
9 楼』:
Quote: | Originally posted by he200377 at 2006-10-18 05:41:
xp 没有这个限制的~pip说的对,我试过的昨天刚刚 |
|
XP没有命令字符长度的限制吗?不会吧?我的怎么限制了?
|
|
2006-10-18 06:11 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
10 楼』:
变量的存储单元总是有大小限制的. 只是多少的问题.
|
|
2006-10-18 08:42 |
|