全部,
我正在使用批处理文件自动将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
答案 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
)