将输出重定向到日志文件并在同一批处理脚本中接受用户输入

Posted

技术标签:

【中文标题】将输出重定向到日志文件并在同一批处理脚本中接受用户输入【英文标题】:To redirect output to log file and also accept user input in same batch script 【发布时间】:2013-08-05 20:21:08 【问题描述】:

我正在尝试编写一个批处理脚本来在数据库上运行 sql 文件。 我希望脚本将 sql 查询执行的结果放入日志文件中(使用类似 >> SQl_LOGS.txt 的内容)。这工作正常,但我想获得用户输入,如果 他/她是否想继续执行下一个 SQl 查询。

一切,甚至暂停都重定向到日志文件,因此 我无法在控制台上提供任何输入。

在for循环中调用的子程序:

:ProcessQuery


(
echo WHENEVER SQLERROR EXIT 1 
echo WHENEVER OSERROR EXIT 1 
echo @%query% XXuser            // This should be sent top a log file

)  | sqlplus XXuser/XXpwdr@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=XX.XX.XX.XX)(Port=XXXX))(CONNECT_DATA=(SID=XXXX))) 


echo error level is : %ERRORLEVEL%

IF %ERRORLEVEL% == 1 ( 
   ECHO WARNING : QUERY %query% EXECUTION ERROR !   // these 3 lines should come up in the
                                                    // console      
   echo PLEASE FIX THE ERROR AND THEN HIT ENTER. 
   pause                        

) ELSE (
   echo %str% %query%
   ECHO  INFO : QUERY %query% EXECUTION SUCCESSFUL ! 
)

可以将相同的批处理脚本输出到日志文件并从控制台获取用户输入吗? 有什么方法可以实现吗?

【问题讨论】:

整个子程序是否重定向到日志?如果是,请使用echo This goes to the console >con: 这很好用!!非常感谢!!1 我为此头疼了 5 天 :) 【参考方案1】:

如果您只想记录脚本的某些部分,只需在脚本中的这些特定行上使用 >> SQL_LOGS.txt(而不是在调用脚本时使用它)。

至于提示用户做出具体回应,可以快速阅读这篇文章:http://www.quepublishing.com/articles/article.aspx?p=1154761&seqNum=12

编辑 - 这是一个受上述链接启发的批处理脚本,应该有助于您实现目标。

@echo off
echo This is an example of accepting user input and writing some output to a log.
:again 
   set /p answer=Do you want to run a sql script (Y/N)?
   if /i "%answer:~,1%" EQU "Y" goto logit
   if /i "%answer:~,1%" EQU "N" exit /b
   echo Please type Y for Yes or N for No
   goto again
:logit
   echo sql script goes here. this command's response is sent to the log. >> test.log
   goto again

【讨论】:

感谢您的回复。但我已经尝试过您的建议。当我将部分脚本重定向到日志文件时,用户输入提示消失 这个解决方案很好,但不是我想要的。 它是否让您走上了正确的道路,您有一个接受输入输出到日志的脚本?

以上是关于将输出重定向到日志文件并在同一批处理脚本中接受用户输入的主要内容,如果未能解决你的问题,请参考以下文章

Python执行脚本文件将输出既能显示控制台又能重定向到日志

将启动脚本记录到gcp中的单独文件中

Shell脚本

使用System.out.printf()输出日志重定向到文件后显示混乱问题

linux运行交互式脚本输出结果实时屏幕输出的同时重定向到文件,并屏幕和文件中都有时间戳?

如何从批处理脚本中获取特定的标准输出以重定向到文本文件