2015-10-28 2 views
0

Прежде всего, спасибо за любые предложения. После некоторых настроек рутины код выглядит так:PATH Variable не обновляется в пакетном файле

REM ======================================================================== 
REM Parses out Path entries 
REM ======================================================================= 
    SETLOCAL 
    SET TEMPPATH="%PATH%" 
    SET NEWPATH ="" 
    CALL :parse %TEMPPATH% 
    GOTO :NEXT 

:PARSE 
    SET list=%1 
    SET list=%list:"=% 
    FOR /F "tokens=1* delims=;" %%a IN ("%list%") DO (
     REM ECHO A: %%a 
     REM ECHO B: %%b 
     IF NOT "%%a"=="%VAR_JAVA_HOME%" CALL :SUB "%%a" 
     IF NOT "%%b"=="" CALL :PARSE "%%b" 
    ) 
    EXIT /b 

:SUB 
    ECHO Passed into subroutine: %1 
    IF DEFINED NEWPATH IF "%NEWPATH%" == "" (
     SET NEWPATH=%1; 
     ECHO IN SUB: %NEWPATH% 
    ) 
    IF DEFINED NEWPATH IF "%NEWPATH:~0,1%, %1" == "" (
     SET NEWPATH=%NEWPATH%;%1 
     ECHO Updated NEWPATH: %NEWPATH% 
    ) 
    REM ECHO New path variable: %NEWPATH% 
    EXIT /b 

:NEXT 
    ECHO New path variable: %NEWPATH% 
    ECHO Removed Java entries from the path... 
    ENDLOCAL 

Подборка работает и работает. Отдельные записи в пути разбираются правильно и передаются в подпрограмму. Однако новый путь не создается или обновляется.

Passed into subroutine: "C:\Windows\system32" 
Passed into subroutine: "C:\Windows" 
Passed into subroutine: "C:\Windows\System32\Wbem" 
Passed into subroutine: "C:\Windows\System32\WindowsPowerShell\v1.0\" 
New path variable:<nothing here> 

Любые комментарии были бы весьма признательны.

Russ

+1

спасибо @marc_s – rray

ответ

4

Вы никогда не входя в ветви с if defined NEWPATH, потому что нет ни одной переменной с именем NEWPATH. У вас есть лишнее пространство в следующей строке:

SET NEWPATH ="" 

Так имя переменной на самом деле NEWPATH  (включая пробел в конце).

+0

Я был укушен этим. Это один из самых раздражающих причуд командной строки Windows. –

+0

@CareyGregory: Я расскажу вам о секрете тогда: эта точно такая же причуда также существует в командной строке Unix :-) – Joey

+0

Спасибо. У меня есть: ЕСЛИ НЕ ОПРЕДЕЛЕН NEWPATH, если «% NEWPATH%» == "" (SET NEWPATH =% 1; ECHO IN SUB:% NEWPATH%) Моя ошибка изменилась на: Перешла в подпрограмму: C: \ Windows \ system32 C: \ Windows \ system32 "==" "(в это время было неожиданным. – rray

Смежные вопросы