我必须在sql server 2008r2上执行大量脚本。这些脚本存在于许多文件夹和子文件夹中。我创建了一个批处理文件来执行这些脚本但我的问题是我必须将此bat文件放在一个文件夹中执行相关文件夹的脚本。所以,如果有超过10个文件夹,所以我必须将这个蝙蝠文件放在一个文件夹中10次。这有什么办法让我可以把我的蝙蝠文件放在我想要的任何地方(比如桌面)并执行文件夹的文件?
.bat文件: -
for %%G in (*.sql) do sqlcmd /S %1 /d %2 -E -i"%%G" pause
使用命令提示符传递服务器名称和数据库名称。
答案 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%变量中提到的任何目录中......