有关:
如何列出的路径在批处理文件中的元素?
如何工作?
你会如何编写一个批处理文件或CMD文件来删除从路径中的元素? 它应妥善处理:
我做这个使用tr.exe但它是缓慢而复杂,使用临时文件,这使得它更加复杂。
我想答案是这样的:
setlocal
set tpath=""
set _path="%PATH:;=" "%"
for %%p in (%_path%) do (
call :KeepIfNotEqual %%p %elementToRemove%
)
endlocal & set path=%tpath%
...其中%elementToRemove%是路径元素删除。 KeepIfUnique必须是一个子程序,它有两个参数-目录名,他们正常化,并追加的第一个参数TPATH如果它不等于第二个参数(elementToRemove)。
正如我所说的,我可以用tr.exe做到这一点,但我可以在Windows CMD.EXE的外壳只是内置命令做呢?
编辑 :我想,当你面对它时,问题是,如何做大小写转换输入cmd.exe?
这是我想出了使用伊戈尔的提示。
@echo off
goto START
-------------------------------------------------------
rmpath.bat
remove a path element from path
Created Tue Sep 15 21:33:54 2009
-------------------------------------------------------
:START
SETLOCAL ENABLEDELAYEDEXPANSION
@REM require one argument (the path element to remove)
if _%1==_ goto USAGE
@REM ~fs = remove quotes, full path, short names
set fqElement=%~fs1
@REM convert path to a list of quote-delimited strings, separated by spaces
set fpath="%PATH:;=" "%"
@REM iterate through those path elements
for %%p in (%fpath%) do (
@REM ~fs = remove quotes, full path, short names
set p2=%%~fsp
@REM is this element NOT the one we want to remove?
if /i NOT "!p2!"=="%fqElement%" (
if _!tpath!==_ (set tpath=%%~p) else (set tpath=!tpath!;%%~p)
)
)
set path=!tpath!
@call :LISTPATH
goto ALL_DONE
-------------------------------------------------------
--------------------------------------------
:LISTPATH
echo.
set _path="%PATH:;=" "%"
for %%p in (%_path%) do if not "%%~p"=="" echo %%~p
echo.
goto :EOF
--------------------------------------------
--------------------------------------------
:USAGE
echo usage: rmpath ^<arg^>
echo removes a path element from the path.
goto ALL_DONE
--------------------------------------------
:ALL_DONE
ENDLOCAL & set path=%tpath%
if
命令有忽略大小写选项
if /I "Blah"=="blah" (echo true) else (echo false)
请参阅if /?
对于使用它更多的帮助。 我通常会发现这些命令有助于确定如何做一些CMD线挂羊头卖狗肉:
if /?
call /?
for /?
set /?
我想补充一点,以Cheeso的答案...但我没有足够的代表处,以添加评论。
如果你想,他所提供的批处理文件完成后还要工作的脚本,然后改变这样这个最后一行:
@echo off
. . .
. . .
SETLOCAL ENABLEDELAYEDEXPANSION
. . .
. . .
endlocal & set path=%tpath%
这采用了巧妙的方法:在“TPATH”变量时,可以使用该行被读入和通过CMD.EXE解析,并通过扩大 “ENDLOCAL”越来越被删除之前。
这允许更改“PATH”变量,即使该批处理文件退出后继续存在。
文章来源: How would you write a .bat or .cmd file to remove an element from the PATH?