如何检查PATH环境变量中是否已存在目录?这是一个开始.但是,我已经设法使用下面的代码,它回显了%PATH%中的第一个目录.由于这是一个FOR循环,你会认为它将枚举%PATH%中的所有目录,但它只获得第一个目录.
有没有更好的方法呢?像%PATH%变量上运行的find或findstr之类的东西?我只想检查%PATH%目录列表中是否存在目录,以避免添加可能已存在的内容.
FOR /F "delims=;" %%P IN ("%PATH%") DO (
@ECHO %%~P
)
Run Code Online (Sandbox Code Playgroud) 我注意到在大多数脚本中,两者通常在同一行中:
SETLOCAL ENABLEDELAYEDEXPANSION
Run Code Online (Sandbox Code Playgroud)
这两个实际上是单独的命令,可以写在不同的行上吗?
ENABLEDELAYEDEXPANSION
如果脚本设置在脚本的第一行并且在脚本结束之前未禁用,那么设置是否会对脚本产生负面影响?
可能重复:
使环境变量生存ENDLOCAL 如何将变量
的值保留在使用"延迟扩展本地"模式的Windows批处理脚本之外?
我有一个批处理文件,如下所示:
REM I need to use SETLOCAL so as not to pollute the environment
REM with any variables used to implement the logic in this script
SETLOCAL
SET I_DONT_WANT_THIS_VARIABLE_TO_LEAK_OUTSIDE=c:\
REM BUT, there is this one change to the environment I want to make sticky:
PATH %PATH%;%I_DONT_WANT_THIS_VARIABLE_TO_LEAK_OUTSIDE%
Run Code Online (Sandbox Code Playgroud)
该脚本用于SETLOCAL
将环境与批处理文件想要执行的任何操作隔离开来,但这会导致一个问题:最后我确实希望以某种非常具体的方式修改调用者的环境,但是会SETLOCAL
阻止这种情况(更改将立即撤消)批处理文件退出).ENDLOCAL
在设置路径之前我也无法调用,因为它将环境恢复到其原始状态,消除了变量的值,因此我无法将其值附加到路径.
有没有办法设置路径而忽略SETLOCAL
有效?或者,是否有任何技巧可以明确地保持变量的值在调用时被消除ENDLOCAL
?
我知道可以使用临时文件作为可以绕过ENDLOCAL
屏障的容器,但是欢迎更优雅的解决方案.