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



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

。bat文件:

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

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

/R选项添加到FOR中进行递归搜索:

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

将搜索*。sql文件的任何地方低于当前目录(.)。或者如果您想要一个特定的文件夹作为根目录,则将其设置为FOR /R C:Folder %%G IN (*.sql) DO ...

假设您希望使用相同的服务器名和数据库名从多个目录执行您的batasposting,

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

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

如果您希望控制哪些服务器/数据库/目录被单独执行,那么创建controllist,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%变量中提到的任何目录中…

最新更新