如何使用其他脚本文件“编译”或“链接”Windows批处理文件?

时间:2014-04-02 13:21:38

标签: batch-file sqlcmd

我有一个批处理文件,它运行多个SQLCMD命令,这些命令运行外部SQL脚本文件提供的查询。脚本本身相当简单,但我被运行批处理所需的所有文件依赖性所困扰。我一直在谷歌搜索如何将所有这些文件链接在一起,没有运气。

我是否可以应用任何技术将批处理脚本和SQL脚本封装在单个文件中,以便我可以将生成的文件移动到其他计算机而不拖动单个sql文件?为了组织/可读性/信息隐藏,我真的更愿意避免将sql直接嵌入批处理文件中。

2 个答案:

答案 0 :(得分:2)

考虑使用7-Zip。它是免费的here

您可以将所有BAT文件和SQL命令封装到这样的zip中:

C:\> 7za a -t7z archive.7z *.BAT *.SQL

然后你可以像这样提取:

C:\> 7z e archive.7z

或者你也可以使用它来制作一个自解压缩的可执行文件 - 当你到达另一台服务器时,你不需要任何工具来提取它,但是你可能无法通过电子邮件发送它。顺便说一句,如果您将命令更改为以下命令,Windows可以本机读取存档本身,因此您无需随身携带文件来安装提取软件:

C:\> 7za a -tzip archive.zip *.BAT *.SQL

或者您可以使用将在任何地方出现的Microsoft CAB工具documentation

如果你想将*.BAT*.CMD收集到" 内阁"叫BATplusSQL.cab

dir /b *.BAT *.CMD >files.txt
makecab /d "CabinetName1=BATplusSQL.cab" /f files.txt
del /q /f files.txt

答案 1 :(得分:0)

这是我的意思的一个例子。

创建一个文本文件,每行一个SQL查询,类似于:

My Queries
Select * from table1 where something = somethingelse
Select * from table2
delete from table3
update table1 set something=nothing

确保第一行不是查询。它可以是其他任何东西。根据需要调整%sql%中的设置。

运行以下批处理文件:

@echo off
setlocal

set "sql=sqlcmd -S MySERVER -E -q "

set cnt=1
for /f "tokens=* skip=%cnt%" %%a in (sqlQueries.txt) do (
  echo %sql% "%%a"
  set /a cnt+=1
)

删除echo以运行查询。