Windows PATH变量未在批处理文件中更新

Windows PATH变量未在批处理文件中更新,windows,batch-file,Windows,Batch File,首先,谢谢你的建议。对例程进行一些调整后,代码如下所示: REM ======================================================================== REM Parses out Path entries REM ======================================================================= SETLOCAL SET TEMPPATH="%PATH%"

首先,谢谢你的建议。对例程进行一些调整后,代码如下所示:

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>
传递到子例程:“C:\Windows\system32”
传递到子例程:“C:\Windows”
传递到子例程:“C:\Windows\System32\Wbem”
传递到子例程:“C:\Windows\System32\WindowsPowerShell\v1.0\”
新路径变量:
如有任何意见,将不胜感激


Russ

如果定义了NEWPATH,则永远不会使用
输入分支,因为没有名为
NEWPATH
的变量。以下行中有多余的空间:

SET NEWPATH =""

因此,变量名实际上是
NEWPATH
(在末尾包括一个空格)。

如果定义了NEWPATH
,则永远不会使用
输入分支,因为没有名为
NEWPATH
。以下行中有多余的空间:

SET NEWPATH =""

因此,变量名实际上是
NEWPATH
(包括末尾的空格)。

我已经被它咬了一口。这是Windows命令行中最令人恼火的怪癖之一。@CareyGregory:我将向您介绍一个秘密:Unix命令行中也存在同样的怪癖:-)谢谢您现在我有了:如果没有定义NEWPATH,如果“%NEWPATH%”==“”(设置NEWPATH=%1;在子命令行中回显:%NEWPATH%)我的错误已更改为:传递到子例程:C:\Windows\system32 C:\Windows\system32“==”(此时这是意外的。我被它咬了一口。这是Windows命令行最令人恼火的怪癖之一。@CareyGregory:我将向您介绍一个秘密:Unix命令行中也存在同样的怪癖:-)谢谢现在我有:如果没有定义NEWPATH如果“%NEWPATH%”==“”(设置NEWPATH=%1;在SUB中回显:%NEWPATH%),我的错误已更改为:传递到子例程:C:\Windows\system32 C:\Windows\system32”==“”(此时意外)。