2013-05-09 44 views
0

我对BAT文件不是很熟悉,但是我有一个运行sqlplus查询的文件,返回行数,如果它大于0,则运行另一个bat文件。我觉得我几乎没有,但我不断收到此错误:此时变量意外

%%此时

@echo off 
for /f "delims=" %%a in (
'sqlplus USER/[email protected] @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/[email protected] @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/[email protected] @VoiceBlockTrig.SQL 

我得到一个整数值,退得

回答

2

为什么会出现SETrowcount?

之间的这种差距就其本身而言,它是没有关系 - 但我怀疑你有他们在不同的行。

set rowcount=%%a都必须在同一个物理线为do - 和do必须后in

for /f "delims=" %%a in (
'sqlplus user/[email protected] @VoiceBlockTrig.SQL' 
) do set rowcount=%%a 

如果完全合法的在同一物理线路的右括号。


作为一个.bat文件:

:: @echo off 
echo starting SQLPLUS 
sqlplus USER/[email protected] @VoiceBlockTrig.SQL 
echo finished SQLPLUS 

for /f "delims=" %%a in (
'sqlplus USER/[email protected] @VoiceBlockTrig.SQL' 
) do ECHO(+%%a+&set /A rowcount=%%a 

ECHO rowcount=+%rowcount%+ 

if %ROWCOUNT% GTR 0 (
c:\SQLTRIGGERS\VoiceBlkAutoationBAT.bat 
) 

PAUSE 

这是一个似乎是接近你需要运行哪些批处理。

的变化是:

  • FOR环路中加入ECHO(+%%a+
    • 后的回声开括号仅仅是已经被认为是优于SPACE从文本到待呼应ECHO分离字符
    • +在%% a之前和之后,简单地使用 明显的字符分隔字符串,以便更容易观察到SPACES的存在。
  • SET改为SET /A后者解释分配为 数字串,应该克服 分配的任何杂散的空间的值。
  • 已添加ECHO的行数在分隔符内的可见性
  • 在您有机会查看结果之前添加暂停以停止关闭该过程。

评论:可能"delims="不是必需的,但我们会在问题被打败时做到这一点。

评论:您的报告说脚本需要TWO ENTER s可能意味着SQLPLUS需要输入。如果是这样,'ECHO.^|sqlplus...可能会缓解这个问题。

如果SQLPLUS是BATCH,则需要采用不同的方法。

进一步改变试图解决puzzing结果:

  • 双冒号之前关闭@echo - 双冒号经常被用来作为一个 注释。目标是显示正在执行的行。
  • 独立添加SQLPLUS命令 - 以观察结果。
  • 增加了两条ECHO线来显示进度。

肯定是十分古怪....

+0

更新我的问题上面@Peter赖特 – user2061886 2013-05-09 15:11:21

+0

的'更多?'提示和的'%%一个是在这个time'意想不到的位置你的反应告诉。您需要使用文本编辑器将这些命令放入一个名为'virtuallyanythingyoulike.bat'的批处理文件中,然后通过发出命令'viruallyanythingyoulike'从提示符运行该文件。在批处理文件中,元变量'%% a'需要两个'%'符号。如果从提示符运行,则只需使用一个。很容易使用一个文件并对其进行编辑,而不是永久地重新输入命令并调用所有这些拼写错误。 – Magoo 2013-05-09 15:20:22

+0

好吧,我把上面的代码粘贴到一个txt文件中,并将其保存为一个.bat文件。双击它打开,但我得到的是一个空白的CMD屏幕.....如果我击中它输入两次,然后关闭。 – user2061886 2013-05-09 15:29:00