【问题标题】:variable was unexpected at this time此时变量出乎意料
【发布时间】:2013-05-09 14:41:48
【问题描述】:

我对 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

我也确实得到了一个整数值

【问题讨论】:

    标签: batch-file sqlplus


    【解决方案1】:

    为什么SETrowcount?之间会有这么大的差距

    就其本身而言,这无关紧要 - 但我怀疑您将它们放在不同的行上。

    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
    

    这是看起来接近您需要运行的批次。

    变化是:

    • FOR 循环中添加了ECHO(+%%a+
      • ECHO 后面的左括号只是一个字符,已被发现比 SPACE 更好地将 ECHO 与要回显的文本分开
      • %%a 前后的+ 只是用一个 明显的特征,以便更容易观察到 SPACES 的存在。
    • SET 更改为 SET /A,它将分配的值解释为 数字字符串,它应该克服 任务。
    • 在分隔符内添加了行数的ECHO 以提高可见性
    • 添加了 PAUSE 以在您有机会看到结果之前阻止程序关闭。

    评论:"delims=" 可能不是必需的,但我们会在解决问题后解决。

    评论:您报告脚本需要两个 ENTERs 可能意味着 SQLPLUS 正在请求输入。如果是这样,'ECHO.^|sqlplus... 可能会缓解这个问题。

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

    尝试解决令人困惑的结果的进一步更改:

    • @echo off 之前的双冒号 - 双冒号通常用作 评论。对象是显示正在执行的行。
    • 独立添加了 SQLPLUS 命令 - 以观察结果。
    • 添加了两条 ECHO 行来显示进度。

    当然很奇怪....

    【讨论】:

    • More? 提示和%%a was unexpected at this time 的位置正在说明。您需要使用文本编辑器将命令放入名为virtuallyanythingyoulike.bat 的批处理文件中,然后通过发出命令viruallyanythingyoulike 从提示符运行该文件。在批处理文件中,元变量 %%a 需要两个 % 符号。如果从提示符运行,您只需要使用一个。使用文件并对其进行编辑要容易得多,而不是不断地重新输入命令并调用所有这些拼写错误。
    • 好的,我把上面的代码,粘贴到一个txt文件中,保存为.bat。双击它打开,但我得到的只是一个空白的 CMD 屏幕.....如果我在其中输入两次它就会关闭。
    • 好的...尝试了您的新代码,但我得到的只是一个空白的 CMD 屏幕...现在我可以反复按 Enter 键,但似乎没有任何反应。
    猜你喜欢
    • 2014-09-11
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多