如何创建一个具有可从 Windows cmd 调用的函数的自定义实用程序库?

如何创建一个具有可从 Windows cmd 调用的函数的自定义实用程序库?

如何使用 cmd/batch 函数创建可从 Windows cmd 终端调用的自定义实用程序库?

您可以在批处理文件中创建函数,例如:

@echo off
goto :main

:say_hello
  echo Hello world!
goto :eof

:main
  call :say_hello

但是,尝试从 cmd 调用该函数(在同一终端中运行批处理文件后)给出了Invalid attempt to call batch label outside of batch script.

我知道的另一种方法是让每个“函数”都有自己的批处理文件。但是,如果每个函数(无论多小)都必须有自己的批处理文件,那么就会导致文件数量巨大,因此这样做有点不妥!我宁愿将所有 cmd 实用程序函数放在一个几百到几千行的文件中,也不愿将代码分散在许多小文件中。

在 Linux 中,实现此目的的方法是,不用运行 shell 脚本,而是来源它来公开这些功能。本质上,我正在寻找与此相当的 Windows 版本。

答案1

我发现最接近我想要的解决方案是 make macros,它本质上是包含命令的环境变量。你来源通过运行脚本来设置这些变量,然后你可以从 cmd 终端调用它,例如%myfunc% arg1 arg2 arg3,参见https://ss64.com/nt/syntax-macros.html以获得完整解释。

在函数名称周围写上 's 仍然有点难看%,所以可以说它并不比@Io-oI(已删除的答案)和@Mr.Key7 提出的解决方案好多少。

答案2

使自定义实用程序库可调用吗?

如果你不喜欢大量的 bat 文件,你可以将它们合并为一个文件。
你可以使用%*(或%1, %2, %3) 来确定要执行哪个部分。
这是一个例子:

@echo off
:: MyLib.bat
setlocal
Set Arg=%*
:: Set Arg=%1
Goto :%Arg%

:One
echo this One
goto :end 

:Two
echo this Two
goto :end 

:Three
echo this Three
goto :end  

:Four
echo this Four
goto :end 

:Five
echo this Five 

:end
pause
endlocal
exit

然后,你可以使用命令执行其中一个:
从命令行或 bat 文件

MyLib.bat One
MyLib Four

结果:

CMD: MyLib Four
this Four
Press any key to continue . . .

为了能够从任何位置执行它,该文件必须放在 中%Path%,例如System32或,或者您使用或%Windir%创建自己的自定义路径。Set Path...SetX Path...

相关内容