我对BAT文件不是很熟悉,但我有一个运行sqlplus查询的文件,返回行数,如果它大于0,则运行另一个bat文件。我觉得我差不多了,但我一直收到这个错误:
%% a此时出乎意料
@echo off
for /f "delims=" %%a in (
'sqlplus USER/PASS@OMP1 @VoiceBlockTrig.SQL'
) do set rowcount=%%a
if %ROWCOUNT% GTR 0 (
c:\SQLTRIGGERS\VoiceBlkAutoationBAT.bat
)
当我运行上述内容时,我将此作为响应:
@echo off
for /f "delims=" %%a in (
%%a was unexpected at this time
'sqlplus USER/PASS@OMP1 @VoiceBlockTrig.SQL'
''sqlplus' is not recognized as an internal or external command, operable program or batch file
) do set rowcount=%%a
if %ROWCOUNT% GTR 0 (
More? c:\SQLTRIGGERS\VoiceBlkAutoationBAT.bat
More?
当我运行时:
sqlplus user/pass@P1 @VoiceBlockTrig.SQL
我也得到一个整数值
答案 0 :(得分:2)
为什么SET
和rowcount?
就其本身而言,无论如何 - 但我怀疑你是分开的。
set rowcount=%%a
必须与do
位于同一物理线上 - 且do
必须与in
后的右括号位于同一物理线上
for /f "delims=" %%a in (
'sqlplus user/pass@P1 @VoiceBlockTrig.SQL'
) do set rowcount=%%a
如果完全合法。
作为.bat文件:
:: @echo off
echo starting SQLPLUS
sqlplus USER/PASS@OMP1 @VoiceBlockTrig.SQL
echo finished SQLPLUS
for /f "delims=" %%a in (
'sqlplus USER/PASS@OMP1 @VoiceBlockTrig.SQL'
) do ECHO(+%%a+&set /A rowcount=%%a
ECHO rowcount=+%rowcount%+
if %ROWCOUNT% GTR 0 (
c:\SQLTRIGGERS\VoiceBlkAutoationBAT.bat
)
PAUSE
这是一个看起来接近您需要运行的批次。
变化是:
ECHO(+%%a+
循环中添加FOR
。ECHO
与要回显的文本分开+
只是用字符串分隔字符串
明显的特征,以便更容易观察到SPACES的存在。 SET
更改为SET /A
,它将指定的值解释为a
numeric-string,它应该克服任何杂散空间
分配ECHO
以提高可见性评论:可能"delims="
可能不是必需的,但是当问题被打败时我们会谈到它。
评论:您的脚本需要两个ENTER
的报告可能意味着SQLPLUS
要求输入。如果是这样,'ECHO.^|sqlplus...
可以缓解这个问题。
如果SQLPLUS是BATCH,则需要采用不同的方法。
进一步改变以试图解决困惑的结果:
当然很奇怪....