2014-01-22 43 views
11

範圍:Windows XP或更新 工具:批處理腳本通過批處理從%PATH%變量刪除不需要的路徑名

我需要能夠從系統%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; 

從此,我需要能夠刪除與「oracle」相關的完整路徑名。所以,在上面的例子中,我需要能夠從上面的路徑語句中刪除「C:\ oracle \ product \ 10.2.0 \ bin」。不幸的是,不僅oracle路徑名可能與上面顯示的不同,可能會有多個oracle路徑名,並且都需要刪除。我想在這裏實施解決方案...

How can I extract a full path from the PATH environment variable?

然而,它只是不工作。該腳本不會找到路徑名稱。任何幫助,將不勝感激。謝謝。

回答

4

你可以嘗試這樣的事情:

@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到最後一行。檢查結果,如果它適合您,請將其移除。

+0

太棒了!完美的作品!謝謝!!! – user3208239

+0

等待...僅適用於當前用戶會話。我試着用-m選項使用setx爲系統範圍分配路徑語句,但無濟於事。即使回聲顯示正確的路徑,但在設置回顯時它仍然只顯示它。當我回顯%path%時,它仍然顯示原始的,未修改的系統路徑。任何其他想法?謝謝。 – user3208239

+1

嘗試像這樣:'reg.exe ADD「HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment」/ v Path/t REG_EXPAND_SZ/d!newpath!/f' – SachaDee

4

@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! 
16

這將刪除路徑字符串,並重新分配子C:\Program Files (x86)\Git\bin;

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

您可以用此查看更改:

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

注意:確切地說是子字符串。它區分大小寫和斜線敏感。

如果您需要使其成爲持久更改,請使用setx而不是set,然後打開另一個控制檯以使更改生效。

+1

完美滿足我的需求! – Ale