以编程方式从batch file更新PATH中的文件夹

(我不认为这个问题有完全相似的匹配)

我需要为Windows(XP和7)创build一个batch file,它将:

  • 安装Python
  • 检查PATH中以前的python文件夹的任何实例(通常是C:/ Python2x,C:/ Python3x,C:/ Python2x / Scripts,C:/ Python3x / Scripts)
  • 从PATH永久删除所有这些文件夹
  • 在System / Environmentvariables的PATH中永久添加C:/ Python / Scripts和C:/ Python

这是使用批处理脚本相当可行吗? 我已经读过以前的问题,我可以使用setx永久设置variables,但我正在与匹配的部分挣扎。

 @ECHO OFF SETLOCAL SET "newpython=C:\Python;C:\Python\Scripts" SET "newpath=" :temploop SET tempfile=%random%%random%%random% IF EXIST "%temp%\%tempfile%*" GOTO temploop SET "tempfile=%temp%\%tempfile%" CALL :showpath >"%tempfile%" SET "response=x" FOR /f "delims=" %%p IN ('type "%tempfile%"') DO ( CALL :addsegment "%%p" IF NOT DEFINED response DEL "%tempfile%"&GOTO :EOF ) SET "newpath=%newpython%%newpath% DEL "%tempfile%" 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 "%segment%"=="%segment:python=%" SET response=N&GOTO nosdel CALL :getresp "Delete %segment% from path [Y/N/Q]?" :nosdel IF /i "%response%"=="N" 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 YN or Q to quit&GOTO getresp GOTO :eof :showpath ECHO(%path:;=&ECHO(% GOTO :eof 

安装python – 好吧,这取决于你。 不知道将从哪里安装,或找工作找出来。

假设新的目录连接在一起, 在变量newpython并注意到目录段分隔符是\/ / (这是用于开关),那么上面:

建立一个临时文件
分析path ,呈现每个要删除的分段或否
重新组装路径并为新的newpython目录加上前缀。
询问是否应用这些更改。

我不知道你需要哪些选项,所以命令只是ECHO编辑。 您需要从SETX行中删除ECHO以激活path变量的设置。

还要注意, SETX不会在现有的或当前的CMD实例中设置目标变量 – 只有那些在将来创建的实例。

 @echo off setlocal setlocal enableDelayedExpansion set "_PATH_=%PATH:;=";"%" set "new_path=" for %%P in (%_PATH_%) do ( set "path_element=%%~P" rem :: check if the path element contains "/Python" if "!path_element!" equ "!path_element:/Python=!" ( set new_path="!path_element!";!new_path! ) ) rem :: add the new directories to path set new_path=%new_path%;C:/Python/Scripts;C:/Python; endlocal & new_path=%new_path% rem :: set the new path set path=%new_path% rem :: import the path to the registry ( echo Windows Registry Editor Version 5.00 echo [HKEY_CURRENT_USER\Environment] echo "PATH"=%new_path% ) >"%temp%\~path.reg" REGEDIT /S "%temp%\~path.reg" del "%temp%\~path.reg" /q /f endlocal endlocal 

如果在路径中有特殊符号,可能无法工作!