Remove unwanted path name from %path% variable via batch

前端 未结 4 1636
青春惊慌失措
青春惊慌失措 2020-12-01 05:15

Scope: Windows XP or newer Tools: Batch script

I need to be able to remove an unneeded path name from the system %PATH% variable. I know how to add a new path name

4条回答
  •  时光说笑
    2020-12-01 06:07

    I found the other solutions to this problem a bit awkward, I don't really want to rely on exact paths, complex 'delayed expansion' syntax, removing spaces for the 'for /f' loop and then adding them back in...

    I think this is more elegant, and I commented the hell out of it so even someone new to the horrors of Batch can follow along.

    ::Turn off command display and allows environmental variables to be overridden for the current session
    @echo off & setlocal
    
    ::Creates a unique file to use for the 'for loop'
    set "TMPFILE="%temp%\tmp%RANDOM%%RANDOM%.txt""
    
    ::Duplicate PATH into OLDPATH
    set "OLDPATH=%PATH%"
    
    ::Declare label for the 'goto' command
    :Loop
    
    ::Extract the first text token with the default delimiter of semicolon
    for /f "tokens=1 delims=;" %%G in ("%OLDPATH%") do (
    
    REM Copy text token to TMPFILE unless what we want to remove is found
    NUL 2>&1 || >%TMPFILE%
    
    REM Remove text token from OLDPATH
    set "OLDPATH=%OLDPATH:*;=%"
    )
    
    ::Repeat loop until OLDPATH no longer has any delimiters, and then add any remaining value to TMPFILE
    echo %OLDPATH% | findstr /C:";" >NUL && (goto :Loop) || >%TMPFILE%
    
    ::Set the path to TMPFILE
    for /f "usebackq delims=" %%G in (%TMPFILE%) do (set "PATH=%%G")
    
    ::Clean-up
    del %TMPFILE% >NUL 2>&1
    
    ::An echo and pause just for debug purposes
    echo %PATH%
    pause
    

提交回复
热议问题