2016-09-26 132 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 这是因为在批处理文件中,单个百分号用于引用批处理文件的调用者提供的命令行参数。