「現時点では予想外でした」 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を実行したときの出力は上手く見えます。
EDIT:
次の行は、起動時に実行されている(だから我々は、JAVA_HOMEが利用可能であるかどうかをチェック):
"%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
)
間違っている。 – Highriser
'( 'cmd/c"%JAVA_HOME%\ bin \ java.exe "-version 2 ^> ^&1^| findstr/i" version "')'から 'cmd/C'を削除すると、残りの文字列' ( "%JAVA_HOME%\ bin \ java.exe" -version 2 ^> ^&1^| findstr/i "version" ') 'は、%JAVA_HOME%\ bin \ java.exeとして実行されます。 ^&1^| findstr/i "for/F"によって "version"は無効です。検索文字列 'version'の前後に引用符" ""を入れてはいけません。これは 'for/F'が周囲の' '' *と*を取り除くためです。もし残っている文字列が '' ''で囲まれていれば、それらも取り除かれます。 – aschipfl
いいえ。最初の質問:JAVA_HOMEパスにスペースがあるとどうなりますか?キャラクターを取り除いた他のものはうまくいった。ありがとう! :) – Highriser