使用批处理从路径添加/删除?

时间:2014-01-15 10:00:06

标签: batch-file command-line environment-variables

我希望有两个批处理文件install.batuninstall.bat与我的命令行程序program.exe位于同一文件夹中。

我希望install.batprogram.exe的当前位置添加到系统Path环境变量中。

然后我希望uninstall.bat从系统program.exe环境变量中删除Path的所有路径。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分: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将其卸载。

当然,调用例程以获得最终确定以更改path是可选的。

我不知道setx需要哪些选项,因此命令只是ECHOed。您需要从SETX行中删除ECHO以激活路径变量的设置。

另请注意,SETX不会在现有CMD实例或当前CMD实例中设置目标变量 - 仅限于将来创建的目标变量。

同样重要的是要记住,在此例程中使用uninstall功能会从路径中删除目录,而不考虑任何其他软件的要求。