我结合了我在网上找到的几个解决方案来尝试实现这一目标。
https://stackoverflow.com/a/6504317/2471473
https://sqlandme.com/2013/03/25/sql-server-executing-multiple-script-files-using-sqlcmd/
我正在尝试使用.sql文件的文件夹位置运行单个.cmd脚本(Script1.cmd)。该单个脚本运行另一个脚本(Script2.cmd)以使用sqlcmd来执行该文件夹位置中的所有.sql文件。它主要起作用,但它会打开一个命令窗口,我必须从每个文件夹位置退出。
Script1.cmd
start Script2.cmd "C:\Location1"
start Script2.cmd "C:\Location2"
Script2.cmd
@Echo Off
FOR /f %%i IN ('DIR %1\*.Sql /B') do call :RunScript %1 %%i
GOTO :END
:RunScript
Echo Executing Script: %2
cd %1
SQLCMD -S Server123 -d Database456 -E -i %2
Echo Completed Script: %2
:END
答案 0 :(得分:2)
Windows XP或Windows Server 2003, Windows Vista (and above)的官方命令行参考似乎过于简短。阅读this (extended) start
command documentation:
语法:START "title" [/D path] [options] "command" [parameters]
始终包含
TITLE
这可以是一个简单的字符串,如"My Script"
或 只是一对空引号""
。根据微软的说法 文档,标题是可选的,但取决于另一个 选择的选项如果省略则可能会出现问题。如果command是内部cmd命令或批处理文件,则命令 处理器运行时
/K
切换到cmd.exe
。 这意味着 命令运行后窗口将保留。
下一个Script1.cmd
应该可以工作并关闭启动的命令窗口:
start "" cmd /C Script2.cmd "C:\Location1"
start "" cmd /C Script2.cmd "C:\Location2"