2016-09-26 128 views
0

我試圖創建一個批處理文件,將修補一系列數據庫實例的..
的問題是,我不斷收到錯誤Windows批處理For循環錯誤

「我是在這個時候意外「。

我從CMD直接運行這個,如果這對解決問題有任何區別。

for /l %i in (1, 1, 51) do 
( 
    (echo @?/sqlpatch/18881811/postinstall.sql 
    ) | sqlplus -s CONNECT/AS [email protected]%i 
) 
+0

當在命令提示符窗口中鍵入'for /?'時,請閱讀'for'的幫助 - 它清楚地提到如果在批處理文件中使用'for',則需要加倍'%'符號... – aschipfl

+0

如果直接從命令行運行命令,則只需使用'%%',如果將語句放入批處理文件中,但只使用一個'%'''。 – user2154065

+0

請不要編輯您的問題,使其無效現有的答案。 – Matt

回答

0

要使用的代碼塊中的命令行上,將開口括號「(」到第一行的末尾,否則,第一生產線生產語法錯誤。這就是爲什麼要調用sqlplus -s CONNECT/AS [email protected]%i一次,產生「我是在這個時候意外的」消息」,而不是調用此:

sqlplus -s CONNECT/AS [email protected] 
... 
sqlplus -s CONNECT/AS [email protected] 

所以正確的循環如下所示:

for /l %i in (1, 1, 51) do ( 
    (echo @?/sqlpatch/18881811/postinstall.sql 
    ) | sqlplus -s CONNECT/AS [email protected]%i 
) 

如果將代碼放入批處理文件中,請記得將%i更改爲%%i 這是因爲在批處理文件中,單個百分號用於引用批處理文件的調用者提供的命令行參數。