加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Windows .bat / .cmd函数库在自己的文件?

发布时间:2021-01-09 10:24:38 所属栏目:Windows 来源:网络整理
导读:在DOS .bat / .cmd脚本中有 a nice way to build functions.要模块化一些安装脚本,将包含函数库的文件包含到.bat / .cmd脚本中是非常好的. 我试过的是: mainscript.bat call library.batcall:function1 library.bat goto:eof:stopCalipri -- stop alle pr

在DOS .bat / .cmd脚本中有 a nice way to build functions.要模块化一些安装脚本,将包含函数库的文件包含到.bat / .cmd脚本中是非常好的.

我试过的是:

mainscript.bat

call library.bat

call:function1

library.bat

goto:eof

:stopCalipri    -- stop alle prozesse die mit calipri zu tun haben
::                 -- %~1: argument description here
SETLOCAL
REM.--function body here
set LocalVar1=dummy
set LocalVar2=dummy

echo "Called function successfully :)"

(ENDLOCAL & REM -- RETURN VALUES
   IF "%~1" NEQ "" SET %~1=%LocalVar1%
   IF "%~2" NEQ "" SET %~2=%LocalVar2%
)
GOTO:EOF

当我调用mainscript.bat时,我得到以下输出:
Das Sprungziel – function1 wurde nicht gefunden.

什么意思或多或少:找不到名为function1的跳转点

任何想法,还是这不可能?

这是可能的,有一些不同的方法来做到这一点.

1)将完整的“库”复制并粘贴到每个文件中
作品,但它并不是一个图书馆,更改/更正所有文件中的库函数是一个恐怖

2)通过调用包装器包含一个库

call batchLib.bat :length result "abcdef"

并以batchLib.bat开头

call %* 
exit /b
...
:length
...

易于编程,但非常慢,因为每个库调用都加载库批次,并且可能出现的参数问题.

3)“自载”图书馆BatchLibrary or how to include batch files

它每次创建临时批处理文件,结合自己的代码和库代码.
它在库启动时执行一些高级功能,如安全参数访问.
但在我看来,它也很容易使用

用户脚本示例

@echo off
REM 1. Prepare the BatchLibrary for the start command
call BatchLib.bat

REM 2. Start of the Batchlib,acquisition of the command line parameters,activates the code with the base-library
<:%BL.Start%

rem  Importing more libraries ...
call :bl.import "bl_DateTime.bat"
call :bl.import "bl_String.bat"

rem Use library functions
call :bl.String.Length result abcdefghij
echo len=%result%

编辑:另一种方式是…

4)宏库

你可以使用批处理宏,很容易包含和使用它们.

call MacroLib.bat

set myString=abcdef
%$strLen% result,myString
echo The length of myString is %result%

但是构建宏非常棘手!
更多关于Batch “macros” with arguments的宏观技术

MacroLibrary.bat

set LF=^


::Above 2 blank lines are required - do not remove
set ^"n=^^^%LF%%LF%^%LF%%LF%^^"
:::: StrLen pString pResult
set $strLen=for /L %%n in (1 1 2) do if %%n==2 (%n%
        for /F "tokens=1,2 delims=," %%1 in ("!argv!") do (%n%
            set "str=A!%%~2!"%n%
              set "len=0"%n%
              for /l %%A in (12,-1,0) do (%n%
                set /a "len|=1<<%%A"%n%
                for %%B in (!len!) do if "!str:~%%B,1!"=="" set /a "len&=~1<<%%A"%n%
              )%n%
              for %%v in (!len!) do endlocal^&if "%%~b" neq "" (set "%%~1=%%v") else echo %%v%n%
        ) %n%
) ELSE setlocal enableDelayedExpansion ^& set argv=,

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读