如何将变量的值保留在使用“延迟扩展本地”模式的Windows批处理
上下文:我需要调用一个
Windows批处理脚本,它会通过在其末尾添加另一个路径’xxx’来更新我的PATH,但是:
>没有任何重复 我试过的: 以下功能负责处理任何重复并完成工作 :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(激活延迟扩展,否则默认关闭),但这是不切实际的. 如何按照上面描述的方式修改PATH变量,并在调用所述脚本后仍然在当前的DOS会话中更新它?
页面“
DOS – Function Collection”提供了一个很好的例子,说明函数如何在DOS中返回值,即使使用
delayed expansion模式:
以下函数将使用添加PATH更新所需的任何变量: :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 请注意使用的路径串联.截止日期:jeb comments:
SET“%~1 =%P%”是允许记忆(在由%~1表示的变量中)使用延迟扩展特征设置的值的部分.
要更新PATH变量,可以使用以下命令调用函数: call :cleanAddPath PATH "C:mypathtoadd" 对于当前的DOS会话,它将在离开该脚本后继续存在. dbenham的answer指向一个更健壮的答案(upvoted),但在我的情况下这个脚本就足够了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – 什么是“云操作系统”?
- Microsoft Azure定价 – 什么构成出站流量?
- windows – 由于权限被拒绝,无法绑定到某些端口
- windows-server-2008 – FTP错误530,用户无法登录,主目录无
- 在Windows窗体上显示HTML内容的最佳方法是什么?
- .net – 适用于Windows 7.0的蓝牙低功耗API
- 为什么覆盖WPF Window.OnRender方法无法绘制到屏幕?
- 如何从Windows锁定Windows(如“Windows L”)?
- windows-server-2012 – 即使指定了特定帐户,Windows Serve
- windows – 使用Powershell,如果最近的事件日志事件超过一小