2013-03-20 25 views
3

如果我們有一個批處理文件被重定向到一個日誌像這樣:有沒有辦法檢查批處理文件中的重定向?

C:\Testing\Example.bat > C:\Testing\Example.log

有什麼辦法裏面的批處理文件,以確定是否有一個標準輸出重定向發生在一個日誌文件?

基本上我的批處理文件需要傳遞給它的三個參數。如果省略參數,批處理文件就會像常規DOS命令那樣打印使用示例,並會拋出「暫停」,以便讀取指令。但是,如果批處理被調用時沒有參數並且它被記錄下來,那麼批處理文件將永遠坐在那裏等待一個鍵來暫停暫停,但不會在屏幕上顯示任何內容。

通常這根本就不是問題,但是我試圖做這個傻瓜證明,因爲我不會是在其他腳本/計劃任務中實現批處理文件的人。

在這一點上,似乎我需要徹底擺脫使用停頓,但我希望有一個解決方案,我不需要。謝謝您的幫助。

+0

而不是使用暫停,您可以使用超時選擇命令。 – rojo 2013-03-20 21:16:37

+1

可以檢測重定向,並且如果管道處於活動狀態,[如何檢測輸入是來自管道還是重定向文件](http://www.dostips.com/forum/viewtopic.php?p=10672#p10672) 。但是你也可以閱讀這個[Dostips:參數萬無一失](http://www.dostips.com/forum/viewtopic.php?p=14612#p14612),流是如何工作的。 – jeb 2013-03-20 21:58:14

+0

Jeb感謝您將本文檔鏈接起來,瞭解流媒體實際發生的情況確實很有趣。由於設置這些示例的複雜性,我覺得它會使批處理文件超過我所熟悉的水平。如果關鍵參數丟失,並且將指令標籤鏈接到[%1] == [/?]或[%1] == [help] – 2013-03-22 12:53:13

回答

1

我不知道有任何方法只使用批處理和標準命令來做到這一點。但是,如果您的其他語言(如本機C或C#程序)可以使用其他語言,並且包含其他.exe文件以及.bat,則可以使用這些技巧。

+1

感謝您的Nate快速回復,我最終退出了批處理文件。足夠聰明地,我寧願完全用C#來完成這個工作,事實上批處理文件中的大部分實際工作都來自我放在一起的exe文件。然而項目管理員卻因爲想要一些可以輕鬆修改而不需要重新編譯的事情而哭了起來。我在這個概念上,所以我的下一站實際上是PowerShell,它也被擊落了,因爲「我們不知道它是什麼或如何使用它」。我今天似乎無法贏得一場比賽......也許如果我真的爲之奮鬥,他們會讓我去參加Powershell,但現在我被困在老的DOS中。 – 2013-03-20 21:03:53

0

沒有在標準的Windows批處理文件的方式(即我所知道的),以確定標準輸出重定向,或者即使被重定向。但是,您可能希望將您的使用示例寫入STDERR而不是STDOUT,因此至少將一個簡單的重定向導入到文件中將不會捕獲使用情況信息。

例TEST.CMD:

@ECHO OFF 

ECHO Test output 1>&2 
PAUSE 1>&2 

然後調用它:

test.cmd > output.log 

這仍將輸出:

Test output 
Press any key to continue . . . 

當然,這並沒有爲文件的時候用STDERR調用被重定向。

test.cmd 2> error.log 
相關問題