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

前端之家收集整理的这篇文章主要介绍了Windows .bat / .cmd函数库在自己的文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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=,

猜你在找的Windows相关文章