bat文件对文件夹中的DB执行文件

时间:2016-12-08 22:25:05

标签: sql batch-file ingres

我有Ingres DB并且我将所有程序文件保存在文件夹中,如果我需要在DB上重建它们。有很多与eachohter相关的程序(彼此称为一个),所以意味着ai必须先运行一些程序然后运行其他程序。现在我正在使用bat文件,我必须提供文件名,并且需要一个接一个地手动完成。要做到这一点,我正在使用这个bat文件。

echo '' > sqlout
more sqlout
set /p database="Enter database:"
if "%database%"=="" set database=1507
CALL C:\"Program Files"\Ingres\..\..\bin\setingenvs.bat
set directory_name=DBProcs
:While

set /p filename="Enter Procedure Filename:"
echo %filename%
sql DBServerName::%database% -udba <D:\Php_Web_Source\..\DBProcs\%filename% > sqlout
more sqlout
set /p another="Do you have another? (Y/N)"
if "%another%"=="N" goto EndWhile
goto While
:EndWhile 

我想它只是运行bat文件,它应该运行文件夹中的所有文件,但不知道如何做到这一点。我正在考虑像for循环这样的东西,它调用文件夹中的每个文件都存在bat,但不知道怎么做,任何帮助赞赏

2 个答案:

答案 0 :(得分:2)

如果你想迭代一个目录中的所有文件,它就是一个基本的循环。

class Program
{
    static void Main(string[] args)
    {
        var smallList = new List<MyStruct>()
        {
            new MyStruct { Field1="1f", Field2 ="2f" },
            new MyStruct { Field1="2f", Field2 ="22f" }
        };

        var bigList = new List<MyStruct>()
        {
            new MyStruct { Field1="1f", Field2 ="2f" },
            new MyStruct { Field1="3f", Field2 ="22f" },
            new MyStruct { Field1="4f", Field2 ="22f" }
        };

        var result = bigList.Except(smallList);

        Console.ReadLine();
    }
}

public struct MyStruct
{
    public string Field1;
    public string Field2;
    public override bool Equals(object obj)
    {
        return Field1 == (obj as Nullable<MyStruct>).Value.Field1;
    }
}

%% G将是此实例中具有文件名的路径。然后,您可以使用该变量运行任何命令。

答案 1 :(得分:1)

如果您不经常添加需要运行的新文件,那么只需编写一个调用所有其他脚本的单个sql文件即可。

例如:

\cd D:\Php_Web_Source\..\DBProcs\
\read proc1.sql
\read proc2.sql
\read proc3.sql

您还可以通过获取所有文件的列表,然后使用Notepad ++等工具快速查找和替换

来快速创建此脚本。
dir/b *.sql > files.txt

将为您提供单个目录中所有sql文件的列表(如果需要多个目录,可以调整命令)。然后使用正则表达式搜索并替换

\r\n

\r\n\\read   

可以满足您的需求。

正如我所说,如果你的文件不经常改变或者作为一种快速而肮脏的方法,这是一种快速的方法。对于经常变化的文件结构,Squashman的答案更为正确。