作为一名 SQL Server DBA,我需要编写一些脚本。有时,我需要将修复脚本部署到非常受限的环境中,其中唯一的脚本选项可能是 DOS Batch。在这样的环境中,甚至 VBScript/WSH 都不可能,更不用说 PowerShell。任何在 DOS 和 Windows 上编写过足够多的批处理文件的人都知道,当您需要做任何过于复杂的事情时,它是非常有限的并且是一个巨大的 PIA。对于使用过 Unix shell 脚本、Perl、Tcl、Python、Ruby 等的人来说尤其如此。
一个可能的解决方案是 CMD 预处理器,它可以从更强大的脚本语言中添加一些有用的功能。我试图找到这样的实用程序,但到目前为止我还没有运气。
这最终引出了我的问题:有人知道这样的 CMD 预处理器吗?如果没有,您希望在其中看到什么功能?
附录:
如果您不熟悉预处理器的概念,请参阅此 Wikipedia entry。
为了澄清,我正在考虑一个可以添加以下功能的工具:
...可能还有其他人。这是我希望 CMD 拥有的两个特性,并且可以想办法用 CMD 预处理器来实现它们。可以使用 env vars 和 GOTO/labels 来实现功能;通过管道到临时文件并使用 set /p =< 将结果读入 env var 来反引号。
您已经可以实现这些相同的目的,但它变得非常乏味和冗长 - 这就是我想到让预处理器处理此类功能的样板的想法的原因。
例子
使用反引号的示例,这是我假设的 Batch++ 中未处理的代码示例和已处理的 vanilla 批处理脚本,准备好由 CMD.exe 运行:
Batch++ 源代码 (test.batpp)
copy `dir /b /s c:\ | find "CADR-README.htm"` \\srv01\users
通过预处理器运行它
bpp test.batpp > post_test.bat
生成的 CMD/BAT 代码 (post_test.bat)
dir /b /s c:\ | find "CADR-README.htm" > _bt001.tmp
set /p _BT001 =< _bt001.tmp
copy %_BT001% \\srv01\users
set _BT001=
del _bt001.tmp