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”==“”(此时意外)。