此时变量出乎意料
Posted
技术标签:
【中文标题】此时变量出乎意料【英文标题】: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
我也确实得到了一个整数值
【问题讨论】:
【参考方案1】:为什么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
这是看起来接近您需要运行的批次。
变化是:
在FOR
循环中添加了ECHO(+%%a+
。
ECHO 后面的左括号只是一个字符,已被发现比 SPACE 更好地将 ECHO
与要回显的文本分开
%%a 前后的+
只是用一个
明显的特征,以便更容易观察到 SPACES 的存在。
SET
更改为 SET /A
,它将分配的值解释为
数字字符串,它应该克服
任务。
在分隔符内添加了行数的ECHO
以提高可见性
添加了 PAUSE 以在您有机会看到结果之前阻止程序关闭。
评论:"delims="
可能不是必需的,但我们会在解决问题后解决。
评论:您报告脚本需要两个 ENTER
s 可能意味着 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 键,但似乎没有任何反应。以上是关于此时变量出乎意料的主要内容,如果未能解决你的问题,请参考以下文章