[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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
复制代码
那么请大家协助我完成库文件的编写!

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

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

有没有人帮忙完善 数组 类的,这个很重要。。。
(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

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

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

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

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

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

TOP

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

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

TOP

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

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

TOP

这个难度太高了,涉及约分、最简分数等,而且繁分数还要一起返回括号?

小数的问题处理完了,作为一个单独的高难度专题来讨论编写。。。

TOP

哈哈,楼上想复杂了。。。

如果我能够改变批处理的运行机制的话,那就强大了。。。

TOP

这个难度太高了。。。

我之前也有段时间在想一个新的批处理解释器(就是cmd类似的东东),这个解释器能自动把鼠标、键盘等信息返回到批处理变量里面,还运行批处理删除、增加、禁止右键菜单等。。。

结果后来解释器不能操作变量,貌似system函数对set无爱,结果就放弃了。。。

TOP

用新的脚本形式和平台前提就是有一个好的解释器。。。

批处理的解释器都不行,脚本形式和平台就更无可能了。。。

TOP

回复 24楼 的帖子

感谢提供,不过貌似库里已经有一个减法的了。。。
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

返回列表