0

作为一名 SQL Server DBA,我需要编写一些脚本。有时,我需要将修复脚本部署到非常受限的环境中,其中唯一的脚本选项可能是 DOS Batch。在这样的环境中,甚至 VBScript/WSH 都不可能,更不用说 PowerShell。任何在 DOS 和 Windows 上编写过足够多的批处理文件的人都知道,当您需要做任何过于复杂的事情时,它是非常有限的并且是一个巨大的 PIA。对于使用过 Unix shell 脚本、Perl、Tcl、Python、Ruby 等的人来说尤其如此。

一个可能的解决方案是 CMD 预处理器,它可以从更强大的脚本语言中添加一些有用的功能。我试图找到这样的实用程序,但到目前为止我还没有运气。

这最终引出了我的问题:有人知道这样的 CMD 预处理器吗?如果没有,您希望在其中看到什么功能?


附录:
如果您不熟悉预处理器的概念,请参阅此 Wikipedia entry

为了澄清,我正在考虑一个可以添加以下功能的工具:

  1. 功能
  2. 反引号 (`) ala Unix shell

...可能还有其他人。这是我希望 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
4

1 回答 1

0

我不确定是否能正确解释您的问题。如果您在不允许您运行任何脚本扩展的受控环境中运行,您将如何访问这样的预处理器?

但是,关于您要求的两个功能,您可以使用 .BAT。当前 Windows 版本中的 BAT 处理支持这两个功能。

  1. 功能:您拥有扩展CALL语法,支持通过参数引用 %1 .. %9 传递参数,并通过使用%~语法的扩展替换进行了增强。阅读HELP CALL

  2. 反引号:不确定你想要什么,但是在FOR /F命令中你可以传递一个反引号字符串来运行并捕获它的输出。阅读HELP FOR

于 2010-02-16T18:16:15.310 回答