2010-08-24 56 views
0

嗨,我正在編寫一個批處理腳本,它必須讀取文件夾中存在的一組SQL文件,然後使用SQLCMD執行它們。批處理文件中的SQLCMD用法

當我試圖執行它不會創建任何輸出文件。我不知道我錯在哪裏,我不知道如何調試腳本。有人可以用腳本幫我嗎?

@echo off 

FOR %F IN (C:\SQLCMD*.SQL) DO sqlcmd -S LENOVO-C00 -U yam -P [email protected] -i %F -o C:\SEL.txt -p -b 

IF NOT [%ERRORLEVEL%] ==[0] goto get_Error 

:Success echo Finished Succesffuly exit /B 0 goto end 

:get_error echo step Failed exit /B 40 

:end 
+0

'如果不是[%ERRORLEVEL%] == [0]'應該是'如果錯誤級別1'。避免使用僞變量,除非必須因爲它可以中斷。 – Joey 2010-08-24 06:20:20

+0

應該指出,沒有必要將你的SQL腳本保存在單獨的文件中。您可以將整個SQL語句放入批處理文件中,並通過使用具有胡蘿蔔字符和啓用延遲擴展的行分隔符使其成爲人類可讀的。 – djangofan 2012-01-13 00:01:08

回答

1

如果這實際上是在一個批處理文件中(而不是在命令行中手動執行),那麼%F變量需要將%個字符加倍,因爲cmd.exe執行從該批處理文件:

FOR %%F IN (C:\SQLCMD*.SQL) DO sqlcmd -S LENOVO-C00 -U yam -P [email protected] -i %%F -o C:\SEL.txt -p -b 

雖然我還以爲你會得到一個

F was unexpected at this time. 

錯誤,如果你只在變量名前面有一個%字符。

+0

嗨邁克爾感謝您的Reply.After添加%%我能夠運行該批處理文件。但腳本無法循環或迭代文件。 – Anoop 2010-08-24 01:36:02

+0

Anoop - 註釋掉「@echo off」,這樣你就可以看到'for'命令正在嘗試執行什麼命令。這可能會讓你知道發生了什麼問題。或者,將「DO sqlcmd ...」更改爲「DO echo sqlcmd ...」,以便幫助調試正在進行的操作。 – 2010-08-25 17:42:28

1

嘗試右鍵單擊批處理文件並以管理員身份運行。

0

似乎是一種解決會更喜歡這樣的:

FOR %%F "usebackq" IN (`dir.exe C:\SQLCMD*.SQL`) DO ...