【问题标题】:way to execute different folders' scripts using one bat file from one location使用来自一个位置的一个 bat 文件执行不同文件夹脚本的方法
【发布时间】:2013-03-09 17:32:43
【问题描述】:
我必须在 sql server 2008r2 上执行大量脚本。这些脚本存在于许多文件夹和子文件夹中。我创建了一个批处理文件来执行这些脚本,但我的问题是我必须将此 bat 文件放在一个文件夹中执行相关文件夹的脚本。所以,如果有超过 10 个文件夹,那么我必须将这个 bat 文件放在一个文件夹中 10 次。有没有什么办法可以让我只将我的 bat 文件放在我想要的任何地方(比如desktop) 并执行文件夹的文件?
.bat 文件:-
for %%G in (*.sql) do sqlcmd /S %1 /d %2 -E -i"%%G" pause
使用命令提示符传递服务器名称和数据库名称。
【问题讨论】:
标签:
batch-file
sql-server-2008-r2
sqlcmd
【解决方案1】:
将/R 选项添加到FOR 以进行递归搜索:
FOR /R . %%G IN (*.sql) DO ... etc ...
这将在当前目录 (.) 下的任意位置搜索 *.sql 文件。或者,如果您想要一个特定文件夹作为根目录,则将其设为 FOR /R C:\Folder %%G IN (*.sql) DO ...。
【解决方案2】:
假设您希望使用相同的服务器名和数据库名从多个目录执行 yourbatasposted,
@ECHO OFF
SETLOCAL
FOR /f "delims=" %%i IN (folderlist.txt) DO (
PUSHD "%%i"
CALL yourbatasposted %*
POPD
)
其中 folderlist.txt 是一个包含目标目录名称的简单文本文件,一行一行。
如果您希望控制单独执行哪些服务器/数据库/目录,则创建 controllist,txt 格式为行
服务器名称数据库目录
@ECHO OFF
SETLOCAL
FOR /f "tokens=1,2*delims=Q" %%i IN (controllist.txt) DO (
PUSHD "%%k"
CALL yourbatasposted %%i %%j
POPD
)
其中“Q”是 controllist.txt 中各列之间的分隔符。如果您选择使用空格,请省略 delims= 子句。
当然,yourbatchasposted.bat 应该位于 %path% 变量中提到的任何目录中...