使用一个位置的一个bat文件执行不同文件夹脚本的方法

时间:2013-03-09 17:32:44

标签: batch-file sql-server-2008-r2 sqlcmd

我必须在sql server 2008r2上执行大量脚本。这些脚本存在于许多文件夹和子文件夹中。我创建了一个批处理文件来执行这些脚本但我的问题是我必须将此bat文件放在一个文件夹中执行相关文件夹的脚本。所以,如果有超过10个文件夹,所以我必须将这个蝙蝠文件放在一个文件夹中10次。这有什么办法让我可以把我的蝙蝠文件放在我想要的任何地方(比如桌面)并执行文件夹的文件?

.bat文件: -

for %%G in (*.sql) do sqlcmd /S %1 /d %2 -E   -i"%%G" pause

使用命令提示符传递服务器名称和数据库名称。

2 个答案:

答案 0 :(得分:1)

/R选项添加到FOR以递归搜索:

FOR /R . %%G IN (*.sql) DO ... etc ...

这将在当前目录(.)下的任何位置搜索* .sql文件。如果您希望将特定文件夹作为根目录,请将其设为FOR /R C:\Folder %%G IN (*.sql) DO ...

答案 1 :(得分:1)

假设您希望使用相同的servername和databasename从多个目录执行yourbatasposted,

@ECHO OFF
SETLOCAL
FOR /f "delims=" %%i IN (folderlist.txt) DO (
PUSHD "%%i"
CALL yourbatasposted %*
POPD
)

其中folderlist.txt是一个包含目标目录名称的简单文本文件,一行到一行。

如果您希望控制单独执行哪些服务器/数据库/目录,则创建控制列表,txt格式为

servername数据库目录

@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%变量中提到的任何目录中......