【问题标题】: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% 变量中提到的任何目录中...

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2021-01-25
      • 1970-01-01
      • 2021-11-30
      相关资源
      最近更新 更多