Batch file 此时变量是意外的
我不太熟悉BAT文件,但我有一个文件运行sqlplus查询,返回行数,如果大于0,则运行另一个BAT文件。我感觉我就快到了,但我一直在犯这样的错误: %%这时发生了一场意外Batch file 此时变量是意外的,batch-file,sqlplus,Batch File,Sqlplus,我不太熟悉BAT文件,但我有一个文件运行sqlplus查询,返回行数,如果大于0,则运行另一个BAT文件。我感觉我就快到了,但我一直在犯这样的错误: %%这时发生了一场意外 @echo off for /f "delims=" %%a in ( 'sqlplus USER/PASS@OMP1 @VoiceBlockTrig.SQL' ) do set rowcount=%%a if %ROWCOUNT% GTR 0 ( c:\SQLTRIGGERS\VoiceBlkAutoationBAT.b
@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
我也得到了一个整数值为什么
集合
和行数之间有这么大的差距?
就其本身而言,这无关紧要——但我怀疑你把它们放在了不同的线路上
set rowcount=%%a
必须与do
位于同一物理行上,do
必须与中的后面的右括号位于同一物理行上
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++
- 回显后面的开括号只是一个字符,它被发现比空格更好地将
回显
与要回显的文本分开
- %%a前后的
+
仅用
明显的特征,以便更容易观察到空间的存在
SET
更改为SET/A
,将赋值解释为
数字字符串,该字符串应能克服
任务
- 在分隔符中添加了行数的
ECHO
,以实现可见性
- 添加了暂停,以在您有机会看到结果之前停止关闭过程
注释:可能不需要“delims=“
”,但我们会在问题解决后进行讨论
注释:您报告脚本需要两个ENTER
s可能意味着SQLPLUS
正在请求输入。如果是这样,'ECHO.^ SQLPLUS…
可能会缓解问题
如果SQLPLUS是一个批处理,则需要采用不同的方法
尝试解决puzzing结果的进一步更改:
- @echo off之前的双冒号-双冒号通常用作
注释。对象是显示正在执行的行
- 独立添加了SQLPLUS命令-以观察结果
- 添加了两条回音线以显示进度
当然非常奇怪。提示和%%a的位置在此时是出乎意料的。
说明了这一点。您需要使用文本编辑器将命令放入名为virtuallyanythingyoulike.bat
的批处理文件中,然后通过发出命令virtuallyanythingyoulike从提示运行该文件
。在批处理文件中,元变量%%a
需要两个%%
符号。如果从提示符运行,则只需使用一个符号。使用和编辑文件比永远重新键入命令和调用所有拼写错误容易得多。好的,我将上面的代码粘贴到txt文件中,并将其保存为.bat.Double点击它打开,但我得到的是一个空白的CMD屏幕…如果我在其中按两次enter键,它就会关闭。好的…尝试了你的新代码,但我得到的仍然是一个空白的CMD屏幕…现在我可以反复按enter键,似乎什么都没有发生。