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

时间:2014-01-13 11:43:23

标签: 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永久设置变量,但我正在努力匹配部分。

2 个答案:

答案 0 :(得分:2)

@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中的; 连接并分隔,并注意到目录段分隔符是 \ 而不是 / (用于交换机)然后上面:

建立临时文件
分析path,显示每个要删除的段或没有 重新组装路径并为newpython目录添加前缀 询问是否应用更改。

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

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

答案 1 :(得分:1)

@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
如果路径中有特殊符号,如!

可能无效