Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 此时变量是意外的_Batch File_Sqlplus - Fatal编程技术网

Batch file 此时变量是意外的

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

我不太熟悉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.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键,似乎什么都没有发生。