相关:
How to list the elements of the path in a batch file?
How does FOR work?
如何编写批处理文件或CMD文件以从路径中删除元素?它应该优雅地处理:
我使用tr.exe完成了这个,但它很慢而且复杂并且使用临时文件,这使得它变得更加复杂。
我认为答案是这样的:
setlocal
set tpath=""
set _path="%PATH:;=" "%"
for %%p in (%_path%) do (
call :KeepIfNotEqual %%p %elementToRemove%
)
endlocal & set path=%tpath%
...其中%elementToRemove%是要删除的路径元素。 KeepIfUnique必须是一个带有两个参数的子例程 - 目录名,规范化它们,如果不等于到第二个参数(elementToRemove),则将第一个参数附加到tpath。
正如我所说,我可以使用tr.exe执行此操作,但是我可以使用windows cmd.exe shell中的内置命令来执行此操作吗?
编辑:我想当你接下来的时候,问题是,如何在cmd.exe中进行大小写转换?
答案 0 :(得分:4)
这是我想出来的,使用伊戈尔的暗示。
@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%
答案 1 :(得分:1)
if
命令忽略大小写选项
if /I "Blah"=="blah" (echo true) else (echo false)
有关使用它的更多帮助,请参阅if /?
。我通常发现这些命令有助于确定如何做一些cmd行欺骗:
if /?
call /?
for /?
set /?
答案 2 :(得分:0)
我想在Cheeso的答案中添加一些内容......但我没有足够的代表添加评论。
如果您希望他提供的脚本 甚至在 之后完成批处理文件,那么更改最后一行如下:
@echo off
. . .
. . .
SETLOCAL ENABLEDELAYEDEXPANSION
. . .
. . .
endlocal & set path=%tpath%
这采用了一个巧妙的方法:当被删除之前,cmd.exe 和扩展 读入并解析该行时,'tpath'变量可用。 'ENDLOCAL'。
即使在批处理文件退出后,这也允许对“PATH”变量的更改保持不变。