2016-01-04 277 views

回答

2

首先對微軟的文章關於Using command redirection operators看看。

2>&1重定向寫入錯誤輸出流STDERR到標準輸出流STDOUT錯誤消息。這會導致標準消息以及寫入相同數據流的錯誤消息。

上印刷版本寫入STDOUTjava.exe標準和錯誤消息是由使用|得到輸出只包含的版本信息的行,並通過java.exe忽略所有其它線路輸出用作輸入命令FINDSTR

這個命令顯然是嵌入在FOR循環。因此,有必要逃避>&|^獲得應用於java.exe而不是命令執行所有這些重定向操作符本身,這將導致語法錯誤。

打開命令提示符窗口並運行那裏只是java -version通過的Java以查看版本信息輸出,如果命令處理器能找到一個文件java.*在當前目錄中的環境變量PATHEXT列出的文件擴展名或表列的目錄在環境變量PATH 所有。

在命令提示窗口java -version | findstr /i "version"下次運行看到搜索不區分大小寫的包含字符串version的線什麼命令FINDSTR輸出。

2>&1分別2^>^&1是在我的觀點是不必要的。

+1

可能這是在for循環中執行的,這就是爲什麼它是'2 ^> ^&1' – npocmaka

+0

是的,@npocmaka,我也這麼認爲,也有'^ |';特別是封閉燒毛引號'「」'看起來像在命令行被解析的'爲/ F'環... – aschipfl

+0

我在我的答案已經寫的命令在__FOR__循環使用明顯。但是我不明白'2 ^> ^&1'在獲取Java版本時的用法。如果通過'cmd.exe'找不到'_。_ PATHEXT__'中定義的文件擴展名'java。*',使用'2 ^> nul'就足以抑制命令處理器輸出的錯誤信息。我沒有看到任何真正的理由的錯誤信息重定向到比抑制錯誤信息等標準的消息流。 – Mofi