我正在尝试解析路径变量并删除任何目录结构到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此时出乎意料。"
任何建议都将不胜感激。
拉斯
答案 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
..................