Board logo

标题: [其他] (收集代码越多越好)批处理所有限制 [打印本页]

作者: lzwudi    时间: 2008-10-28 17:07     标题: (收集代码越多越好)批处理所有限制

请各位老师指点:
       把您知道的所有限制都发上来吧!
比如:
       %RANDOM%变量限制0 和 32767 之间的任意十进制数字 等等
目的:
       希望能让我这样的新手掌握批处理基本的限制要求

[ 本帖最后由 lzwudi 于 2008-10-28 17:15 编辑 ]
作者: pusofalse    时间: 2008-10-28 18:50

我觉得random完全不是一个限制,要获取5位数以上的随机数,可以用%random%%random%%random%
CMD所能处理的最大数值 2^31
一个变量所能容纳的最大字符数 8168(?)
等等。。。
若想摆脱限制,最好的方法是自己开放、或者借助第三方工具。
作者: lzwudi    时间: 2008-10-28 21:14

太好了,又增加知识了
不过我想要的是:

CMD所能处理的最大数值 2^31
一个变量所能容纳的最大字符数 8168(?)
等等。。。

还有其它的吗?????

[ 本帖最后由 lzwudi 于 2008-10-28 21:17 编辑 ]
作者: Batcher    时间: 2008-10-28 21:27

for命令中是不能使用双引号作为列分隔符的
作者: jellyhk    时间: 2008-10-29 05:36

除了%random%外还有其他类似的变量么!
作者: zqz0012005    时间: 2008-10-29 06:14

其他类似的什么变量?数字变量?动态变量?
set /?
...
如果命令扩展名被启用,有几个动态环境变量可以被扩展,但
不会出现在 SET 显示的变量列表中。每次变量数值被扩展时,
这些变量数值都会被动态计算。如果用户用这些名称中任何
一个定义变量,那个定义会替代下面描述的动态定义:

%CD% - 扩展到当前目录字符串。

%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。

%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。

%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。

%CMDEXTVERSION% - 扩展到当前命令处理器扩展名版本号。

%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。

作者: wxcute    时间: 2008-10-29 10:18     标题: 字符串替换

  1. ::不能单独替换 * 星号,但可以把第一个星号及前面的字符串同时替换掉
  2. @echo off
  3. set a=iii*jjj*kkk
  4. set b=%a:**=%
  5. set c=%a:**=hhh*%
  6. echo a的值%a%
  7. echo b的值%b%   把a的首个星号及前面的iii一起替换为空
  8. echo c的值%c% 把a的第一个星号及前面的iii替换为hhh*
  9. pause
复制代码

作者: lzwudi    时间: 2008-10-29 11:51

回复:jellyhk zqz0012005
好象我的意思您没有理解,我的意思是:
1:一个变量最多可以容纳多少字符
2:批处理的窗口最多能显示多少字符或者行数
3:一次写入文本的字符最多数量是多少
等等,好象都是最多哦^_^
谢谢 谢谢
还有吗?
作者: pusofalse    时间: 2008-10-29 16:54

set 不能单独替换*与=,不过结合for的delims=,可以弥补这个不足~
  1. @echo off
  2. ::把%var%中的*或=删除,只留下abcdef。
  3. set "var=a*b*c*d*e*f" & set "char=*"
  4. :loop
  5. set "str="
  6. echo var替换前: %var%
  7. for /f "delims=" %%a in ("%var%") do call :recur "%%a"
  8. echo var替换后: %str%
  9. echo.
  10. echo %var%| findstr "\*">nul && (
  11.        set "var=a=b=c=d=e=f"
  12.        set "char=="
  13.        goto :loop
  14. )
  15. pause>nul & exit /b
  16. :recur
  17. for /f "tokens=1* delims=%char%" %%a in ("%~1") do (
  18.       set "str=%str%%%a"
  19.       if "%%~b" neq "" call :recur "%%b"
  20. )
复制代码
注意用call传递参数时,要用""将其闭合,因为=是默认分隔符,当然也可以用%*来代替%~1。 delims=不能用"作为分隔符,但set可以,总之它们之间有种互补的关系吧,打破这个限制。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2