Wir haben ein Problem mit der folgenden Befehlszeile bekam (es in einer Batch-Datei ausgeführt wird):„war zu diesem Zeitpunkt unerwartet“ geschieht nur auf einzelnen Computer
for /f tokens^=3^ delims^=.-_^" %%j in ('cmd /c "%JAVA_HOME%\bin\java.exe" -version 2^>^&1 ^| findstr /i "version"') do set "jver=%%j"
Wenn wir diese Linie ausführen, erhalten wir die Java-Version. Dies funktioniert jedes Mal, aber jetzt haben wir einen Computer hier unter Windows 10, die das Skript nicht ausführen kann und nicht auf dieser Linie und sagt:
8 was unexpected at this time
Also gehe ich davon aus dem Skript in der Lage ist, die 1.8.0_101 Java-Version zu lesen String aber irgendwie scheitert. Die Variable jver wird nur einmal verwendet:
if %jver% LSS 8 (
goto :jdk_wrong_version
)
Weiß jemand, warum dieses seltsame Verhalten auftritt? Weil fast alle Maschinen kein Problem mit diesem Befehl haben. Die Ausgabe, wenn wir Java-Version ausführen, scheint in Ordnung.
EDIT:
Folgende Zeilen zu Beginn ausgeführt werden (also wir überprüfen, ob JAVA_HOME verfügbar ist):
"%JAVA_HOME%\bin\java.exe" -version 1> NUL 2> NUL
if not %errorLevel%==0 goto :java_not_found
Also das ganze Skript wie folgt aussieht:
"%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
)
Wenn ich das entfernen 'cmd/c 'der folgende Fehler tritt auf: Der Dateiname, Verzeichnisname oder die Syntax Volume-Label ist falsch. – Highriser
Wenn Sie 'cmd/C' aus' ('cmd/c "% JAVA_HOME% \ bin \ java.exe" -Version 2 ^>^& 1^| findstr/i "Version"') entfernen '', die verbleibende Zeichenfolge ' ('"% JAVA_HOME% \ bin \ java.exe" -Version 2 ^>^& 1^| findstr/i "Version"') wird als '% JAVA_HOME% \ bin \ java.exe '-Version 2 ^> ausgeführt^& 1^| findstr/i "version" von 'for/F', was ungültig ist; setze keine Anführungszeichen '' '' um die Suchzeichenfolge 'version' und es wird funktionieren; Das liegt daran, dass 'for/F' die umgebenden' '' '* und * entfernt, wenn die verbleibende Zeichenkette von' '' 'umgeben angezeigt wird, werden sie ebenfalls entfernt ... – aschipfl
Okay. Erste Frage: Was passiert, wenn der Pfad JAVA_HOME Leerzeichen enthält? Die anderen Sachen mit dem Entfernen der Charaktere funktionierten. Vielen Dank! :) – Highriser