通过批处理从%path%变量中删除不需要的路径名

use*_*239 23 windows path batch-file

范围:Windows XP或更新的工具:批处理脚本

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

%PATH% = C:\;C:\Program Files\Common Files\Java;C:\oracle\product\10.2.0\bin;C:\WINDOWS;C:\WINDOWS\system32;
Run Code Online (Sandbox Code Playgroud)

从这里,我需要能够删除与"oracle"相关的完整路径名.因此,在上面的示例中,我需要能够从上面的路径语句中删除"C:\ oracle\product\10.2.0\bin".不幸的是,oracle路径名称不仅可能与上面显示的不同,因此可能存在多个oracle路径名称,并且都需要删除.我试着在这里实施解决方案......

如何从PATH环境变量中提取完整路径?

但是,它只是不起作用.该脚本将找不到路径名.任何帮助,将不胜感激.谢谢.

Jen*_*och 37

C:\Program Files (x86)\Git\bin;将从PATH字符串中删除子字符串并重新分配:

set PATH=%PATH:C:\Program Files (x86)\Git\bin;=%
Run Code Online (Sandbox Code Playgroud)

您可以使用它来查看更改:

echo %PATH:C:\Program Files (x86)\Git\bin;=% | tr ; \n
Run Code Online (Sandbox Code Playgroud)

注意:确切地说在子串上.它区分大小写且对斜线敏感.

如果您需要使用持久更改setx而不是set打开另一个控制台以使更改生效.

setx /M PATH "%PATH:C:\Program Files (x86)\Git\bin;=%"
Run Code Online (Sandbox Code Playgroud)

  • 只需添加引号: setx /M PATH "%PATH:C:\Program Files (x86)\Git\bin;=%" (2认同)

小智 8

@SachaDee我的路径有错误

C:\Program Files (x86)
Run Code Online (Sandbox Code Playgroud)

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

目录was unexpected at this time.(无论我何时尝试过)

我补充道

set $line=%$line:)=^^)%
Run Code Online (Sandbox Code Playgroud)

在for循环和之前

set $newpath=!$newpath:^^=!
Run Code Online (Sandbox Code Playgroud)

循环后(不确定是否有必要)

@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!
Run Code Online (Sandbox Code Playgroud)


Sac*_*Dee 6

你可以尝试这样的事情:

@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!
Run Code Online (Sandbox Code Playgroud)

我推echo到了最后一行.检查结果,如果可以,请将其删除.