通过批处理从%path%variables中删除不需要的path名称

范围:Windows XP或更高版本工具:批处理脚本

我需要能够从系统%PATH%variables中删除不需要的path名称。 我知道如何使用诸如SETX.EXE之类的工具向系统%PATH%variables添加一个新的path名,这也使得它在现有的CMD环境中立即可用。 这可能是使用FIND和/或某种FOR循环的问题,但我不太清楚如何实现这一点。 这里是一个示例path声明…

%PATH% = C:\;C:\Program Files\Common Files\Java;C:\oracle\product\10.2.0\bin;C:\WINDOWS;C:\WINDOWS\system32; 

由此,我需要能够删除与“oracle”相关的完整path名称。 所以,在上面的例子中,我需要能够从上面的path语句中删除“C:\ oracle \ product \ 10.2.0 \ bin”。 不幸的是,不仅oraclepath名可能与上面显示的不同,可能有多个oraclepath名,都需要删除。 我尝试在这里实施解决scheme…

我如何从PATH环境variables中提取完整path?

但是,这只是不工作。 该脚本不会findpath名称。 任何帮助,将不胜感激。 谢谢。

Solutions Collecting From Web of "通过批处理从%path%variables中删除不需要的path名称"

这将删除子字符串C:\Program Files (x86)\Git\bin; 从PATH字符串中重新指定:

 set PATH=%PATH:C:\Program Files (x86)\Git\bin;=% 

你可以用这个来看看变化:

 echo %PATH:C:\Program Files (x86)\Git\bin;=% | tr ; \n 

注意:在子字符串上是确切的。 这是区分大小写和斜杠敏感。

如果您需要将其设置为持续更改,请使用setx而不是set并打开另一个控制台以使更改生效。

你可以尝试这样的事情:

 @echo off&cls setlocal EnableDelayedExpansion set $line=%path% set $line=%$line: =#% set $line=%$line:;= % for %%a in (%$line%) do echo %%a | find /i "oracle" || set $newpath=!$newpath!;%%a set $newpath=!$newpath:#= ! echo set path=!$newpath:~1! 

我在最后一行发表了一个echo 。 检查结果,如果没有问题,请将其删除。

@SachaDee我遇到类似路径的错误

 C:\Program Files (x86) 

括号: Program Files (x86)\Directory给了我

目录 was unexpected at this time. (不管我什么时候尝试)

我补充说

 set $line=%$line:)=^^)% 

在for循环之前

 set $newpath=!$newpath:^^=! 

循环后(不知道是否有必要)

 @echo off setlocal EnableDelayedExpansion set path set $line=%path% set $line=%$line: =#% set $line=%$line:;= % set $line=%$line:)=^^)% for %%a in (%$line%) do echo %%a | find /i "oracle" || set $newpath=!$newpath!;%%a set $newpath=!$newpath:#= ! set $newpath=!$newpath:^^=! set path=!$newpath:~1!