我想擁有兩個批處理文件install.bat
和uninstall.bat
,它們位於與我的命令行程序program.exe
相同的文件夾中。使用批量添加/從路徑中刪除?
我希望install.bat
將當前位置program.exe
添加到系統Path
環境變量。
然後我想要uninstall.bat
從系統Path
環境變量中刪除到program.exe
的任何路徑。
有關如何做到這一點的任何想法?
我想擁有兩個批處理文件install.bat
和uninstall.bat
,它們位於與我的命令行程序program.exe
相同的文件夾中。使用批量添加/從路徑中刪除?
我希望install.bat
將當前位置program.exe
添加到系統Path
環境變量。
然後我想要uninstall.bat
從系統Path
環境變量中刪除到program.exe
的任何路徑。
有關如何做到這一點的任何想法?
也許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
功能將從路徑中刪除目錄,而不考慮其他軟件的要求。
我對批次不是很有經驗,對我來說有點多。我真正想要的是'install.bat'來添加一個路徑到System'Path'(如果不存在的話)。然後,'uninstall.bat'將包含從系統'路徑'中刪除包含文件夾名稱的所有路徑,例如'myprogram'。 無論是'C:\ path \ to \ myprogram \ dist;'還是'D:\ another \ path \ to \ myprogram \ dist;'。 –
@MassivePenguin:如果**鏈接到外部網站,通常是合理的評論**。在這種情況下,它是不合適的 - 鏈接到一個SO項目,如果這個項目被打破,那麼整個SX宇宙將開始放鬆。 – Magoo