2013-10-04 54 views
0

是否可以使用批处理文件按字母顺序执行文件夹中的所有SQL脚本?如何使用批处理文件按字母顺序执行SQL脚本

目前我使用下面的代码,但它执行的顺序脚本它们,而不是保持按字母顺序排列

SET Database=<<DatabaseName>> 
SET ScriptsPath=<<FolderPath>> 
SET ServerName=<<ServerName>> 


IF EXIST "%ScriptsPath%output_CCF.txt" del "%ScriptsPath%output_CCF.txt" 

type NUL > "%ScriptsPath%output_CCF.txt" 

FOR /R "%ScriptsPath%" %%G IN (*.sql *.up) DO (

sqlcmd -d %Database% -S %ServerName% -i "%%G" -o "%%G.txt" 

echo ................................................. 
>> "%ScriptsPath%output_CCF.txt" 

echo Executing: "%%G" >> "%ScriptsPath%output_CCF.txt" 

echo ...................................>> "%ScriptsPath%output_CCF.txt" 

copy "%ScriptsPath%output_CCF.txt"+"%%G.txt" "%ScriptsPath%output_CCF.txt" 
del "%%G.txt" 

) 
+0

什么是“为了它们被保存”与“字母”的命令的帮助? – user2246674

+0

好点。如果将文件的顺序更改为按字母顺序并运行脚本,会发生什么情况? – thursdaysgeek

+0

基本上我有一个文件夹列表 V6.5, V6.5.1, V6.5.2, V6.5.3, V6.5.4, V6.5.5,V6.6 , 但是,当我在客户端系统“一”跑我上面的批处理文件,批处理文件,以便V6.5.1执行, V6.5.2, V6.5.3, V6.5.4, V6。 5.5, V6.5, V6.6, 但它正常工作与其他机器 任何想法,为什么发生这种情况?这就是为什么我想“按字母顺序”的顺序 –

回答

0

执行它。如果你使用FOR命令的/F选项,则可以使用另一个命令来生成要迭代的数据集。

使用此FOR声明,我相信你会找到你要找的结果。

FOR /F "usebackq" %%G IN (`dir /ON /B *.sql *.up`) DO ... 

这使用dir命令来生成要使用的文件集。 /ON参数按名称排序文件,参数/B提供文件名的裸格式(无标题信息或摘要)。

有关参数的详细信息检查或者在命令行dir /?for /?

+0

我试过FOR/F“usebackq”%% G IN('dir“%ScriptsPath%”/ ON/B * .sql * .up')DO ..但是它不工作!另外我有一个文件夹V6.5,V6.5.1,V6.5.2,V6.5.3,V6.5.4,V6.5.5,V6.6的列表,每个文件夹都有.sql文件。这些文件应该执行上面提到的文件夹顺序 –

+0

@VinayakPrabha当它不起作用时会出现什么错误?你还用你想要执行的代码块来替换'...'吗?此外,您的问题并未询问多个文件夹,但您可以在另一个循环内使用1循环做类似的解决方案。外部循环会遍历目录('dir/on/ad'将是按字母顺序排序的目录的目录列表),并且内部循环将遍历.sql和.up文件。 –