2014-01-15 26 views
0

我想擁有兩個批處理文件install.batuninstall.bat,它們位於與我的命令行程序program.exe相同的文件夾中。使用批量添加/從路徑中刪除?

我希望install.bat將當前位置program.exe添加到系統Path環境變量。

然後我想要uninstall.bat從系統Path環境變量中刪除到program.exe的任何路徑。

有關如何做到這一點的任何想法?

回答

0

也許This earlier solution會有幫助。

修改的文件來定製適合您的情況是

@ECHO OFF 
SETLOCAL 
SET "batchdir=%~dp0" 
SET "batchdir=%batchdir:~0,-1%" 
SET "newpath=" 
:temploop 
SET tempfile=%random%%random%%random% 
IF EXIST "%temp%\%tempfile%*" GOTO temploop 
SET "tempfile=%temp%\%tempfile%" 
CALL :showpath >"%tempfile%" 
:: This part removes the current directory from the path 
FOR /f "delims=" %%p IN ('type "%tempfile%"') DO (
CALL :addsegment "%%p" 
) 
DEL "%tempfile%" 
IF /i "%1"=="/u" (SET "newpath=%newpath:~1%") ELSE (SET "newpath=%batchdir%%newpath%") 
CALL :getresp "Apply new PATH=%newpath% [Y/N/Q]?" 
IF /i "%response%"=="Y" ECHO SETX PATH "%newpath%" 
GOTO :EOF 

:addsegment 
SET "segment=%~1" 
IF /i NOT "%segment%"=="%batchdir%" SET "newpath=%newpath%;%segment%" 
GOTO :eof 

:getresp 
SET "response=" 
SET /p "response=%~1 " 
IF /i "%response%"=="Y" GOTO :eof 
IF /i "%response%"=="Q" SET "response="&GOTO :eof 
IF /i NOT "%response%"=="N" ECHO Please respond Y N or Q to quit&GOTO getresp 
GOTO :eof 

:showpath 
ECHO(%path:;=&ECHO(% 
GOTO :eof 

從本質上講,這兩個批次都是一樣的 - 唯一的區別是,對於INSTALL版本,目錄加入到路徑。

由於這個原因,我只是簡單地將它刪除,以便thisbatch將安裝文件,並且thisbatch /u會將其卸載。

自然,調用例程以獲得最終的OK以更改path是可選的。

我不知道你需要哪些選項作爲setx,所以命令只是簡單的ECHOed。您需要從SETX行刪除ECHO以激活路徑變量的設置。

另請注意,SETX不會在現有CMD實例或當前CMD實例中設置目標變量 - 僅限於未來創建的目標變量。

還需要記住的是,在此例程中使用uninstall功能將從路徑中刪除目錄,而不考慮其他軟件的要求。

+0

我對批次不是很有經驗,對我來說有點多。我真正想要的是'install.bat'來添加一個路徑到System'Path'(如果不存在的話)。然後,'uninstall.bat'將包含從系統'路徑'中刪除包含文件夾名稱的所有路徑,例如'myprogram'。 無論是'C:\ path \ to \ myprogram \ dist;'還是'D:\ another \ path \ to \ myprogram \ dist;'。 –

+0

@MassivePenguin:如果**鏈接到外部網站,通常是合理的評論**。在這種情況下,它是不合適的 - 鏈接到一個SO項目,如果這個項目被打破,那麼整個SX宇宙將開始放鬆。 – Magoo