gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:31:36 27 4
gpt4 key购买 nike

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

我试过的是:

主脚本.bat

call library.bat

call:function1

库.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 (cached)

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

用户脚本示例

@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 (cached)

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 .bat/.cmd 函数库在自己的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com