2013-10-04 56 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文件。 –