从START / WAIT命令调用DTUTIL返回错误消息

时间:2012-02-22 21:35:35

标签: batch-file ssis

全部, 我正在使用批处理文件自动将SSIS包部署到MSDB。我在START /WAIT循环中使用FOR命令来遍历文件夹中的所有文件并执行DTUTIL命令。

虽然我知道我可以返回%ERRORLEVEL%并在主批处理过程中使用它,但我失去的是DTUTIL输出的特定错误消息。

我希望能够捕获该消息输出,但我还没有找到方法。我尝试使用&&||&连接命令来链接命令。我还尝试使用>2>将输出放入文件中。什么都没有给我欲望的输出。

具体而言,我主要关注的是DTUTIL错误,而且消息比单独的错误代码更相关。

任何帮助或建议将不胜感激。这是代码:

@echo off

SET /P SOURCEFOLDER=Enter the Source Folder where the Packages are located:
SET /P DESTSERVER=Enter the Destination Server:
SET /P DESTLOCATION=Enter Destination Folder (Leave blank for root):

IF NOT EXIST "%SOURCEFOLDER%\*.dtsx" GOTO NOFILES

FOR /F "usebackq delims==" %%i in (`dir /b "%SOURCEFOLDER%\*.dtsx"`) do (
ECHO.
ECHO ^>^>^>^>^>^> Copying %%i to %DESTSERVER%\MSDB\%DESTLOCATION% ^<^<^<^<^<^<^<
ECHO.
START /WAIT dtutil /FILE "%SOURCEFOLDER%\%%i" /DESTSERVER %DESTSERVER% /COPY SQL;"%DESTLOCATION%\%%~ni" /QUIET
ECHO %ERRORLEVEL%
ECHO.
)
GOTO COMPLETE

:NOFILES
ECHO.
ECHO *** No SSIS Packages were found.  Please verify the folder location:
ECHO %SOURCEFOLDER%
ECHO.
GOTO END

:COMPLETE
ECHO.
ECHO All Packages have been Processed.
ECHO Please verify that no Error Messages or Warnings were returned.
ECHO.
GOTO END

:END
PAUSE

1 个答案:

答案 0 :(得分:1)

最简单的是放弃开始并发出Dtutil(因为你等到它完成后我看不出有什么区别)。另外两个可能性

start /B dtutil >result.txt

start cmd /c dtutil ^>result.txt

(^用于转义特殊字符,此处重定向符号&gt;)(您已经使用它了......)

重定向stderr将为2>result.txt,stdout和strerr >result.txt 2>&1(如果与cmd / c一起使用,则转义为^>result.txt 2^>^&1