上我們有使用下面的命令行(它是在一個批處理文件執行)一個問題:「在這個時候意外」發生僅單臺計算機
for /f tokens^=3^ delims^=.-_^" %%j in ('cmd /c "%JAVA_HOME%\bin\java.exe" -version 2^>^&1 ^| findstr /i "version"') do set "jver=%%j"
當我們執行這一行,我們得到java版本。這工作每次,但現在我們有與Windows 10在這裏電腦不能執行該腳本,並在這條線失敗,並說:
8 was unexpected at this time
所以我想這個腳本能夠讀取1.8.0_101 Java版本字符串,但不知何故失敗。該jver變量僅使用一次:
if %jver% LSS 8 (
goto :jdk_wrong_version
)
是否有人知道爲什麼會出現這種奇怪的行爲?因爲幾乎所有的機器都沒有這個命令的問題。我們執行java -version時的輸出似乎很好。
編輯:
以下線在啓動時運行(因此,我們檢查,如果JAVA_HOME可用):
"%JAVA_HOME%\bin\java.exe" -version 1> NUL 2> NUL
if not %errorLevel%==0 goto :java_not_found
所以整個劇本是這樣的:
"%JAVA_HOME%\bin\java.exe" -version 1> NUL 2> NUL
if not %errorLevel%==0 goto :java_not_found
for /f tokens^=3^ delims^=.-_^" %%j in ('cmd /c "%JAVA_HOME%\bin\java.exe" -version 2^>^&1 ^| findstr /i "version"') do set "jver=%%j"
if %jver% LSS 8 (
goto :jdk_wrong_version
)
如果我刪除了'CMD/C'出現以下錯誤:文件名,目錄名或卷標語法不正確。 – Highriser
如果從'( 'CMD/C 「%JAVA_HOME%\ BIN \ java.exe的」 -version 2 ^> ^&1^| FINDSTR/I 「版本」')除去'CMD/C'',剩餘的字符串' ( ' 「%JAVA_HOME%\ BIN \ java.exe的」 -version 2 ^> ^&1^| FINDSTR/I 「版本」')作爲'%JAVA_HOME%\ BIN \ java.exe的」執行'-version 2 ^> ^&1^| findstr/i「version' by'for/F',這是無效的;不要在搜索字符串'version'周圍加''「',它會起作用;這是因爲'爲/ F'消除周圍'「」'*和*,如果剩餘的字符串出現在'「」'包圍,他們將被刪除,以及... – aschipfl
好。第一個問題:當JAVA_HOME路徑有空格時會發生什麼?去除字符的其他東西奏效。謝謝! :) – Highriser