(我不认为这个问题有完全相似的匹配)
我需要为Windows(XP和7)创建一个批处理文件:
使用批处理脚本这是否相当可行?我在之前的一个问题中已经读过,我可以使用setx
永久设置变量,但我正在努力匹配部分。
答案 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
如果路径中有特殊符号,如!
,可能无效