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

【发起项目】批处理的库文件编写,高手协助!

注意,本项目由高手协助编写,尽量不要来一些意义不大的回复!

库文件是什么,大家可能看不懂。。。

现在正在编写一个批处理编写的软件,另辟蹊径。。。

这个软件的看点在于,对于复杂的编写只需要一行带过,然后再给加入功能相应的库文件。。。

首先,在这软件中编写批处理生成的是bcp工程文件,工程文件分三部分,头部、代码、库文件。。。

例如,我想实现统计变量长度的功能,只需要 call enStr var varlen 就可以了,变量var的长度保存在了varlen里面,然后在工程里面添加上“LenStr.bcl”文件。而在“LenStr.bcl”文件里面已经为我们写好了获得变量长度的功能。

当bcp需要编译成bat的时候,软件会将头部(color、mode等命令)和代码,还有库文件中的定义都保存进bat去。。。



现在大家大概都明白了库文件的意思了吧。。。

(对,库文件就像C++的头文件一样,帮你把麻烦的事情做好,你需要用只需要一句#include就可以了。。。)

那么我的项目就是希望大家能帮忙编写多点库文件。。。

现在大概有四个类别的库文件:数组(想高级语言一样,伪数组)、计算(浮点运算)、字串(常用处理,获取长度等)、时间(加减、比较等)

现在请大家帮忙编写库文件。。。

库文件的格式如下:
  1. 库文件版本
  2. 库文件作者
  3. 库文件所需要其他库文件的支持
  4. 使用库文件需要保留的内容
  5. 描述
  6. //**//
  7. 开始定义
复制代码
如果实在不懂,我附上我自己写的NewArray.bcl库文件,实现定义一个1~3维的数组:
  1. 1.0
  2. BatCodeer
  3. 不需要其他库的支持
  4. Newarray标签,arrays变量
  5. 定义了NewArray标签,用于定义新的数组,支持1-3维度。
  6. 用法:call :NewArray "Array" "Var"
  7. Array是形如array_2的字串符,其中array是数组名,2是一维长度。Var是数组的缺省值。定义二维数组则是形如array_2_2,三维则是array_2_2_2。
  8. 例如call :NewArray "array_2_2" "0",执行后变量array_1_1、array_1_2、array_2_1、array_2_2的值均为0
  9. 使用本库的时候可以给参数外加上双引号(如"array_2_2"),本库会自动处理
  10. 使用本库需要保留Newarray标签,arrays变量
  11. //**//
  12. :NewArray
  13. if "%~1"=="" goto :EOF
  14. for /f "eol= tokens=1-4 delims=_" %%1 in ("%~1") do (
  15.         if "%%~2"=="" goto :EOF
  16.         set arrays=%arrays%%%1;
  17.         if "%%~3"=="" (
  18.                 for /l %%a in (1,1,%%2) do (
  19.                         set "%%1_%%a=%~2"
  20.                 )
  21.                 goto :EOF
  22.         ) else (
  23.                 if "%%~4"=="" (
  24.                         for /l %%a in (1,1,%%2) do (
  25.                                 for /l %%b in (1,1,%%3) do (
  26.                                         set "%%1_%%a_%%b=%~2"
  27.                                 )
  28.                         )
  29.                 ) else (
  30.                         for /l %%a in (1,1,%%2) do (
  31.                                 for /l %%b in (1,1,%%3) do (
  32.                                         for /l %%c in (1,1,%%4) do (
  33.                                                 set "%%1_%%a_%%b_%%c=%~2"
  34.                                         )
  35.                                 )
  36.                         )
  37.                 )
  38.         )
  39. )
  40. goto :EOF
复制代码
那么请大家协助我完成库文件的编写!

(以下两张图,一个是头部的设置,一个是库文件的界面)

类似的http://www.cn-dos.net/forum/view ... ge=1&highlight=函数
没什么人响应啊,希望这个能够有发展。
另外库文件里的__doc__最好使用英语吧?如果用中文可能会有一些比较麻烦的东西要处理。

anyway,我希望能够看见成果。(虽说windows开始转向powershell了)
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

插一个,希望不会影响浏览……
    应该是说类似函数的东西吧,俺有在%userprofile%下放一些
函数,开始运行cmd时调用,比如说这个

RT.bat
:----------------------------------------------
systeminfo |find "系统启动时间:"
:----------------------------------------------
当我要查看系统运行时间的时候就 打RT指令,看自己玩多久电脑了。


顶贴 ,拿分 , 闪人……

TOP

不错,能放到 时间 类里面,不过功能好像太少了。。。

有没有人帮忙完善 数组 类的,这个很重要。。。
(PS:已经写好NewArray、GetArrayWides、GetArrayNums)
希望帮忙写CopyArray等。C里面数组相关的函数都可以写上。。。

另外,字符 类的也很紧要啊,获得变量长度、是否纯英文、是否纯数字、英文转大小写、倒序,还有N多库都没写啊,大家帮帮忙

最难的应该就是 计算 类了吧,有兴趣可以挑战一下,主要是浮点运算,加减乘除先弄一个吧,然后绝对值、平方、N次方、四舍五入、退一法、进一法,最难度就是开方了。。。

TOP

需要协助:字符长度

:StrLen
for /f "skip=1 delims=:" %%a in ('^(echo "%~1"^&echo.^)^|findstr /o ".*"') do set /a "%~2=%%a-5"
goto :EOF

这是代码,但是对于 ^ % ! " 会失效,帮助完善!

TOP

讨论一个,  我觉得这是非常非常麻烦的事情 因为很多前辈都讨论过这个问题。   又似乎有解决过的足迹,搜搜看吧。
  有想借用vbs的念头,但是建立纯批的函数也是有一定意义的,
大伙努力吧。

TOP

肯定有意义,对于用我这软件来编写P来所,麻烦的功能打个勾就可以了。。。

TOP

看着进度这么慢  我也不忍  这帖子真不是时候 论坛好少人,可能大家都还在老家  哎~

      我又对这方面兴趣不大,不过回想起我在某个帖子里有收集一些关于字符串处理的连接 这里贴出来

那个帖子“http://bbs.bathome.net/thread-3136-1-1.html


-------------------------------------------------------------
    如何判断变量的长度??
原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=24745

---------------------------------------------------------------
    [求助]如何获得字符的字数和截取字符
原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=28571

---------------------------------------------------------------
   [精彩][批处理字符出现次数统计]
原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=25182

类似的一个
    如何统计某个字符串在文本中出现的次数?
原文链接为:http://www.cn-dos.net/forum/viewthread.php?tid=21250

---------------------------------------------------------------
又抓到一个帖子了,标题: 如何验证输入的字符串包含双字节字符
http://www.cn-dos.net/forum/viewthread.php?tid=36780

---------------------------------------------------------------
标题: [已解决]优化一下计算字符串长度的代码,谢谢!
http://www.cn-dos.net/forum/viewthread.php?tid=39292

[ 本帖最后由 523066680 于 2009-1-30 21:07 编辑 ]

TOP

谢了楼上兄。。。

这方面的资料都看过,可是特殊字符的处理实在困难。。。

我写了个雏形,兄帮忙看下。。。

使用时call :StrLen "a" "123"

123的长度3就保存在变量a里面了(外层引号自动处理)

  1. :StrLen
  2. setlocal enableextensions
  3. set "str=a%~2"
  4. set "str=%str:"=s%"
  5. set "str=%str:^^=s%"
  6. set "str=!str:%%=s!"
  7. set /a strlength=0
  8. :StrLen_1
  9. set /a strlength+=1
  10. if not "!str:~%strlength%,1!"=="" goto StrLen_1
  11. endlocal&set /a "%~1=%strlength%-1"
  12. goto :EOF
复制代码


可是有两个字符还有麻烦:%、!

!号和%号在传递的时候被预处理掉了,其他符号就没问题了

如果实在没有办法,就用这个了

另外兄,帮忙写浮点运算。。。

TOP

这活不能急吧,罗马非一日建成.
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

这个库文件嘛,数组相关的至少要有7个以上,现在才写了3个。。。

还有很多都才完成0%。。。

人多好办事,没人帮忙啊。。。

TOP

没听说过那个Ritchie Lawrence?
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

他的东西我都看了,很多都是日期方面的,这些我都会加上。。。

可是 数组、计算、字串 等库都没写啊。。。

TOP

我这边测试9楼的代码 怎么变成死循环了,有些晕~

另外 你惨了 叫你翻老贴好像没翻~  我列的都是cn-dos 还有咱bathome的啦

看这里:http://bbs.bathome.net/viewthread.php?tid=1480

terse的解法 !!%x%^^* 是字符串
@echo off
::!!%x%^^*
for /f "skip=1 delims=" %%i in ('type %0') do set "str=%%i"&goto lp
:lp
    setlocal enabledelayedexpansion
    for /l %%i in (1,1,255) do if "!str:~%%i!"=="" set/a n=%%i-2&echo !n!&pause&exit

[ 本帖最后由 523066680 于 2009-1-31 13:05 编辑 ]

TOP

楼上的代码我也想过,可是做函数库就不行了。。。

函数库讲求的是通用性,你不知道别人传给你的参数有多长,如果大于255那只能永远得出长度255了。。。

TOP

返回列表