Шлях з просторовою помилкою


0

Я намагаюся отримати мій java jdk шлях за допомогою пакетного сценарію. Ось що я досі маю:

@echo off
for /f %%j in ("java.exe") do (
    set JAVA_HOME=%%~dp$PATH:j
)

if "%JAVA_HOME%".==. (
    @echo Java.exe not found
    @echo Please make sure that java JDK 1.7 or 1.8 is installed
)

У операторі if, оскільки шлях знаходиться в C: Файли програм Common Files і т.д., я отримую помилку Common не очікувалося в цей час. Однак, якщо IF не знайдено, умова IF не працює належним чином.

Якщо я "" видаляю навколишній JAVA_HOME, я отримую помилку, що "Файли" не очікувалося в цей час. У цьому випадку умова IF працює правильно, якщо знайдено JAVA.exe.

Чому він дозволяє пробіл або '' у програмі '' файли і після цього зупиняється?


1
if "%JAVA_HOME%"=="" ( ?
Akina

@Akina ж питання
user938644


Моє питання не пов'язане з тим, що @LotPings, у мене проблема з відображенням шляху, який не отримує шлях java_home (що вже зроблено)
user938644

ж питання Ваш код з моїм додатком тестувався на Win7x86, Win7x64, Win8.1x64, Win10x64. Він працює правильно на всіх версіях (для емуляції відсутності виконуваного файлу ім'я було змінено з JAVA.EXE на деякий ZZZ.EXE).
Akina

Відповіді:


0

Я спробував вашу пропозицію, і він відображає Загальні не очікувалося

Копіювати з консолі:

C:\tmp>del test.bat

C:\tmp>copy con test.bat
@echo off
for /f %%j in ("java.exe") do (
    set JAVA_HOME=%%~dp$PATH:j
)

if "%JAVA_HOME%"=="" (
    @echo Java.exe not found
    @echo Please make sure that java JDK 1.7 or 1.8 is installed
) else (
    @echo Java.exe exists in "%JAVA_HOME%"
)
^Z
Files copied:         1.

C:\tmp>test
Java.exe exists in "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\"

Емулювати відсутність - JAVA.EXE замінено на ZZZ.EXE:

C:\tmp>del test.bat

C:\tmp>copy con test.bat
@echo off
for /f %%j in ("ZZZ.exe") do (
    set JAVA_HOME=%%~dp$PATH:j
)

if "%JAVA_HOME%"=="" (
    @echo Java.exe not found
    @echo Please make sure that java JDK 1.7 or 1.8 is installed
) else (
    @echo Java.exe exists in "%JAVA_HOME%"
)
^Z
Files copied:         1.

C:\tmp>test
Java.exe not found
Please make sure that java JDK 1.7 or 1.8 is installed

C:\tmp>

скопіював ваш звіт про порівняння, як є - & gt; результат: pasteboard.co/HBzEzS7.png
user938644

@ user938644 Будь ласка, додайте ехо як перший рядок у else розділ, раніше FOR /F ... Для того, щоб переконатися, що повідомлення про помилку створено оператором порівняння, введіть рядок.
Akina

Вибачте за пізню відповідь. Перевірте посилання pasteboard.co/HBYEBsa.png
user938644

0

Коли ви конструюєте шлях, поставте подвійні лапки " навколо кожного окремого запису на шляху.

Наприклад:

export XPATH="c:\Program Files\foo":"C:\Program Files\bar"

Патч вибирається динамічно, встановлюється JAVA_HOME = %% ~ dp $ PATH: j, як додати до нього ""
user938644

Як почався шлях? Саме там ви б застосували подвійні лапки.
John Czukkermann

Саме тут встановлюється змінна, як додати до неї подвійні лапки: JAVA_HOME = %% ~ dp $ PATH: j --- якщо ви додати перед%, це займе все це як рядок замість вибору шляху
user938644
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.