使用批处理解析和修改$ PATH

时间:2015-10-28 04:52:56

标签: windows batch-file

我正在尝试解析路径变量并删除任何目录结构到JAVA_HOME或在Windows上安装JAVA的备用位置。最终目标是从路径变量中删除位置并重置变量。这就是我的开始。

    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 (

   ::ECHO A: %%a
   ::ECHO B: %%b

   IF NOT "%%a"=="%VAR_JAVA_HOME%" CALL :SUB "%%a"

   IF NOT "%%b"=="" CALL :PARSE "%%b"   

)
exit /b

:SUB

::echo in subroutine

::echo Passed into subroutine: %1

::echo NEW PATH is: "%NEWPATH%"

IF DEFINED NEWPATH IF %NEWPATH%==""(

   SET NEWPATH=%1;

   ECHO "IN SUB:" %NEWPATH%

   )

IF DEFINED NEWPATH IF "NEWPATH:~1, %1"==""(

   SET NEWPATH="%NEWPATH%";%1

   ECHO %NEWPATH%

)
ECHO "New path varible:" "%NEWPATH%"

exit /b

:NEXT
::ECHO "Removed Java entries from the path..."

ENDLOCAL

当脚本运行时,我收到此错误: " C:\ Windows此时出乎意料。"

任何建议都将不胜感激。

拉​​斯

1 个答案:

答案 0 :(得分:0)

明显的问题是:

  • 在每个(中阻止打开IF之前没有空格。
  • 循环内的
  • ::条评论;切换到rem .....
  • NEWPATH:~1, %1在语法上不正确;例如,使用%NEWPATH:~1%从第二个字符开始提取,或%NEWPATH:~0,1%仅提取第一个字符。通过在命令提示符控制台中运行set /?,可以获得更多帮助。

P.S。还要考虑对标记的子例程使用缩进:

:PARSE
    SET list=%1
    SET list=%list:"=%
    ..................
:SUB
    ::echo in subroutine
    ..................
:NEXT
    ..................