(我认为这个问题没有完全相似的匹配)
我需要为 Windows(XP 和 7)创建一个批处理文件,它将:
- 安装Python
- 检查 PATH 中先前 python 文件夹的任何实例(通常是 C:/Python2x、C:/Python3x、C:/Python2x/Scripts、C:/Python3x/Scripts)
- 从 PATH 中永久删除所有这些文件夹
- 在系统/环境变量的 PATH 中永久添加 C:/Python/Scripts 和 C:/Python
使用批处理脚本是否可以做到这一点?我在上一个问题中读到我可以使用 setx
永久设置变量,但我正在努力匹配部分。
最佳答案
@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 Y N or Q to quit&GOTO getresp
GOTO :eof
:showpath
ECHO(%path:;=&ECHO(%
GOTO :eof
安装 python - 好吧,这取决于你。不知道它将从哪里安装,或安装到 - 您的工作中去查找。
假设新目录在变量 newpython
中由 ; 连接和分隔,并注意目录段分隔符是 \ 而不是 / (用于开关)然后是上面的:
建立一个临时文件
分析路径
,显示要删除或不删除的每个段
重新组装路径并为 newpython
目录添加前缀。
询问是否应用更改。
我不知道 setx
需要哪些选项,所以该命令只是 ECHO
ed。您需要从 SETX
行中删除 ECHO
以激活 path
变量的设置。
另请注意,SETX
不会在现有或当前的 CMD
实例中设置目标变量 - 仅在将来创建的实例中设置。
关于windows - 从批处理文件以编程方式更新 PATH 中的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090435/