2012-02-22 64 views
0

全部, 我正在使用批處理文件來自動將SSIS包部署到MSDB。我在FOR循環中使用START /WAIT命令遍歷文件夾中的所有文件並執行DTUTIL命令。從START/WAIT命令調用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

任何具有完整源代碼示例的最終解決方案都可以解決這個問題嗎? – Kiquenet 2013-07-26 10:10:09

+1

@Kiquenet我把工作代碼放在GitHub上https://github.com/thevinnie/SSISDeploymentUtility – Vinnie 2013-07-29 12:26:14

回答

1

最簡單的將是下降的開始,只是問題Dtutil(因爲你要等到它完成我看不出差別)。另外兩個possibilites

start /B dtutil >result.txt 

start cmd /c dtutil ^>result.txt 

(^用來逃避特殊字符,這裏重定向符號>)(和你已經在使用它...)

重定向標準錯誤會2>result.txt,stdout和strerr >result.txt 2>&1(如果與cmd/c一起使用,則轉義:^>result.txt 2^>^&1

+0

如果我想將該輸出發送給變量,這種相同的語法是否適用?我以前見過'cmd/c:> result.txt 2>&1'的用法,但我不清楚'&1'寫入的內容。 – Vinnie 2012-02-23 02:49:36

+1

@Vinnie:'> result.txt'是'1> result.txt'的快捷方式,其中'1'是流的編號,代表STDOUT(即整段代碼表示*'重定向流1 STDOUT)到所述文件'*)。 '2'表示STDERR,'2>&1'表示*'重定向流2(STDERR)與流1(STDOUT)'*相同,在這種情況下 - 是同一個文件。 – 2012-02-23 09:11:19

+0

@vinnie - 就像Andriy解釋的那樣。請注意,在語法中沒有:(冒號),它是'cmd/c'你不能直接把命令輸出分配給變量AFAIK(你可以通過'for/f'遍歷輸出)。我也不確定dtutil是否將任何內容寫入stderr。你可以通過運行dtutil進行檢查_your_options_causing_err_> nul – wmz 2012-02-23 11:54:05