Это возможно, и есть несколько разных способов сделать это.
1) Скопируйте и вставьте полную «Библиотеку» в каждый из ваших файлов
Работает, но на самом деле это не библиотека, и ужасает изменение / исправление библиотечной функции во всех файлах
2) включить библиотеку через call-wrapper
call batchLib.bat :length result "abcdef"
и batchLib.bat начинается с
call %*
exit /b
...
:length
...
Легко программировать, но очень медленно, так как каждый вызов библиотеки загружает пакет библиотеки и возможные проблемы с параметрами.
3) «Самозагружающаяся» библиотека BatchLibrary или как включить пакетные файлы (кэшированные)
Каждый раз он создает временный пакетный файл, объединенный из собственного кода и кода библиотеки.
Он выполняет некоторые расширенные функции при запуске библиотеки, такие как безопасный доступ к параметрам.
Но, на мой взгляд, он также прост в использовании
Пример пользовательского скрипта
@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%
Но сложно создать макрос!
Подробнее о макротехнике в Пакетные "макросы" с аргументами (кэшированные)
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=,