通过Windows批处理文件执行时,ECHO无法正常工作

时间:2012-05-14 20:05:59

标签: oracle batch-file sqlplus

我正在尝试编写一个简单的批处理脚本,如果最近刷新并擦除了我们的更改,我们的用户可以使用这些脚本将一些代码重新部署到环境中。

该脚本运行良好,但它并不像我想要的那样记录。对我们的部署过程进行限制(我不是DBA,只是开发人员),我们不能在文件中包含ECHO命令。

为了解决这个问题,作为我的批处理脚本的一部分,我在工作目录中创建了一个login.sql文件,其中包含“SET ECHO ON”和“SPOOL file.log APPEND”命令。目标是这将在脚本之前执行并假脱机输出。但是,虽然SPOOL命令似乎正在工作,但脚本的内容未被ECHOed。

以下是批处理脚本中的相关代码:

:: Identify all files that begin with a number and end with .sql and write to a file.
dir /b *.sql | findstr /b "[0-9]" > ScriptsToImplement.txt

:: Show the user the files to be executed and confirm whether to proceed
echo The following scripts will be executed in %DB%:
for /f "delims=" %%i in (ScriptsToImplement.txt) do echo %%i
echo:
set /p PROCEED=Proceed with implementation? [y/n] ^>
if /i "%PROCEED%" NEQ "y" (goto :opt_to_terminate)

:: Build the user profile SQL file that will be executed after logging into SQLPlus
:: This allows for the spooling of the output without having the SPOOL command declared in the file.
echo SET ECHO ON >> login.sql
echo SPOOL %DB%~%FOLDER%~%DATESTAMP%.log APPEND >> login.sql

:: Go through the SQL files in the text file and execute them in the specified database.
for /f "delims=" %%i in (ScriptsToImplement.txt) do (
echo exit | sqlplus -L -S %DB_USER%/%DB_PASS%@%DB% @%%i
if %errorlevel% NEQ 0 (@echo an error occurred with applying %%i; stopping further script execution... & pause & goto :terminate) else (@echo %%i was applied successfully) >> %DATESTAMP%_run_all.log
)

我的理解是,因为这是为每个单独的脚本启动一个单独的SQL * Plus会话,所以每次都调用login.sql文件,因此每次都应该使用SET ECHO ON命令。

1 个答案:

答案 0 :(得分:0)

如果您在BAT文件中使用它,请记住ECHO是一个命令,而不是一个环境变量。打开echo的命令是ECHO ONSET ECHO ON不会影响回声行为。它返回“未定义的环境变量ECHO”