如何在batch file或PowerShell脚本中运行命令“x”次?

我有一个维护脚本,在那里生成一些SQL脚本的.sql文件。

当文件大小达到限制时,我closures文件并创build一个新文件,将数据转储到第二个文件中。

我不知道有多less文件将被生成(它是基于当前的数据量)。 到目前为止,它看起来大约是100个左右的文件。

那么,我能说一个好方法吗?

  • 从目标目录获取所有以.sql结尾的文件。
  • 现在为每一个运行这个命令

我在SQL Server的命令窗口中运行的命令是这样的:

 sqlcmd -S 127.0.0.1 -d SomeDBTenant -U someUser -P somePassword -I -ic:\temp\SqlScript_1.sql 

是的,您可以使用Get-ChildItem cmdlet来获取所有.sql文件(如果要-recurse ,请添加-recurse )并为其中的每一个运行sqlcmd:

 $sqlFiles = Get-ChildItem -Path 'C:\test' -Filter '*.sql' # you can do it recurse with -r $sqlFiles | foreach { sqlcmd -S 127.0.0.1 -d SomeDBTenant -U someUser -P somePassword -I -i $_.FullName } 

在Windows命令提示符下,您可以for浏览与(a)目录或目录树中的某些模式匹配的所有文件,如:

 rem remove the `/R` switch if you don't want to loop recursively for /R %%F in (*.sql) do ( REM replace `%%~F` by `%%~fF` to pass the file's full path to the command sqlcmd -S 127.0.0.1 -d SomeDBTenant -U someUser -P somePassword -I -i "%%~F" ) 

注意:这只适用于sqlcmd不创建/重命名/删除枚举目录中的任何*.sql文件。 另外,如果使用/R选项,则sqlcmd 不得修改枚举的目录树。