>没有任何重复
(如果我将’xxx’添加到像’aaa; xxx; bbb’这样的PATH中,我需要更新的PATH,比如’aaa; bbb; xxx’)
>没有任何聚合
(我可以反复调用脚本而不用’aaa; bbb; xxx; xxx; xxx; ……’
我试过的:
以下功能负责处理任何重复并完成工作
:cleanAddpath -- remove %~1 from PATH,add it at the end of PATH SETLOCAL ENABLEDELAYEDEXPANSION set PATH=!PATH:%~2=! set PATH=!PATH:;;=;! set PATH=%PATH%;%~2 set P=!P:;;=;! echo %PATH% echo ------------- ENDLOCAL exit /b
但是,它需要delayed expansion local mode,这意味着:在脚本的末尾(或者在这里,在函数cleanAddpath的末尾),丢弃为%PATH%设置的任何内容.
我可以要求用户(我为其编写脚本)使用cmd / V:ON选项启动他们的cmd(激活延迟扩展,否则默认关闭),但这是不切实际的.
:cleanAddpath -- remove %~2 from %~1,add it at the end of %~1 SETLOCAL ENABLEDELAYEDEXPANSION set P=!%~1! set P=!P:%~2=! set P=!P:;;=;! set P=!P!;%~2 set P=!P:;;=;! (ENDLOCAL & REM.-- RETURN VALUES SET "%~1=%P%" ) exit /b
The line
set P=%P%;%~2
is critical if your path contains ampersands like inC:\Documents&Settings
.
Better change to set “P=!P!;%~2
“.
SET“%~1 =%P%”是允许记忆(在由%~1表示的变量中)使用延迟扩展特征设置的值的部分.
我最初使用SET“%~1 =%P%”!,但是jeb comments:
The command
SET "%~1=%P%" !
Could be simplified toSET "%~1=%P%"
as the trailing exclamation mark has only a (good) effect in delayed expansion mode and if you prepared%P%
before.
call :cleanAddpath PATH "C:\my\path\to\add"
对于当前的DOS会话,它将在离开该脚本后继续存在.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。