2012-07-05 58 views
1

上下文:Oracle企業管理器具有「執行主機命令」功能。如果進入該功能,輸入「dir c:\ temp」,那麼輸出窗口回顯命令,然後顯示一個目錄列表。如果進入該功能,輸入「powershell dir c:\ temp」,則輸出窗口只顯示echo'd命令。沒有目錄列表。如果在目標機器上,我在這兩種情況下都輸入這兩個命令,然後獲得echo'd命令,然後是目錄列表。如何強制調用命令的STDOUT調用cmd.exe的STDOUT?

我推測,我在客戶端的cmd.exe窗口中看到的內容混合了兩個標準輸出流:一個來自cmd.exe本身,另一個來自調用進程(powershell dir c:\ temp)。 Oracle的東西似乎只能識別cmd.exe的stdout。

是否有某種方法可以強制被調用進程中的stdout位於cmd.exe的stdout流中,以便Oracle能夠識別它,並且我正在嘗試構建的東西會起作用?

回答

0

我不認爲你可以直接將一個程序的輸出傳遞迴父cmd.exe的標準輸出 - 假設這是Oracle在某個級別上正在做的事情。

話雖這麼說,你可以嘗試一些聰明像下面這樣:

cmd /c "powershell -Command ""& echo Hello" > %TEMP%\a.txt & TYPE %TEMP\a.txt 

基本上,這是從PowerShell中捕獲它的輸出,將其放置在一個臨時文件,然後在cmd中傾倒該文件返回到標準輸出。可執行程序。一個很好的觸摸會清理臨時文件,命令末尾有& DEL %TEMP%\a.txt

您可能需要玩弄命令行來解釋Oracle如何傳遞東西的任何怪癖 - 我的猜測是它直接調用cmd.exe /c,因此您可能會將該部分關閉。

+1

原來我也需要cmd.exe/c。我的舊批處理編程書(「MS-DOS批處理文件編程包括OS/2」)沒有和符號。對於那些可能需要它的人來說,這是一個稍微更新的參考:http://technet.microsoft.com/en-us/library/bb490954.aspx – Quixote 2012-07-06 12:06:52

相關問題