我有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,但不知道怎么做,任何帮助赞赏
答案 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的答案更为正确。