windows - 从批处理文件以编程方式更新 PATH 中的文件夹

标签 windows batch-file

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

我需要为 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 需要哪些选项,所以该命令只是 ECHOed。您需要从 SETX 行中删除 ECHO 以激活 path 变量的设置。

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

关于windows - 从批处理文件以编程方式更新 PATH 中的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090435/

相关文章:

Windows 上的 ruby​​ 1.9 错误文件编码

c++ - 为什么 “std::isdigit”在Windows上的C++中报告 “no matching overloaded function”

c++ - 如何用C++签署XML文档或验证XML文档签名?

windows - 如何让用户的Windows版本低于Windows 8时程序退出?

windows - 如何使用 VB6 或 BAT/CMD 列出连接到我的 WiFi 网络的设备?

windows - 如何将字节数组转换为 Windows 8.0 商店应用程序的 ImageSource

php - 通过 Eclipse、Netbeans 或任何其他 IDE 处理远程 PHP 项目(Ubuntu 服务器)

visual-studio - 创建 mdb 文件以在 Unity 中调试托管 DLL

windows - Windows 的单个输入变量发送到 .bat

windows - 如何在 Windows 上从命令行启动 MingW 控制台 (GitBash)?