相关疑难解决方法(0)

如何检查%PATH%中是否存在目录?

如何检查PATH环境变量中是否已存在目录?这是一个开始.但是,我已经设法使用下面的代码,它回显了%PATH%中的第一个目录.由于这是一个FOR循环,你会认为它将枚举%PATH%中的所有目录,但它只获得第一个目录.

有没有更好的方法呢?像%PATH%变量上运行的find或findstr之类的东西?我只想检查%PATH%目录列表中是否存在目录,以避免添加可能已存在的内容.

FOR /F "delims=;" %%P IN ("%PATH%") DO (
    @ECHO %%~P
)
Run Code Online (Sandbox Code Playgroud)

windows batch-file

59
推荐指数
6
解决办法
11万
查看次数

SETLOCAL和ENABLEDELAYEDEXPANSION如何工作?

我注意到在大多数脚本中,两者通常在同一行中:

SETLOCAL ENABLEDELAYEDEXPANSION
Run Code Online (Sandbox Code Playgroud)

这两个实际上是单独的命令,可以写在不同的行上吗?

ENABLEDELAYEDEXPANSION如果脚本设置在脚本的第一行并且在脚本结束之前未禁用,那么设置是否会对脚本产生负面影响?

cmd batch-file

47
推荐指数
3
解决办法
9万
查看次数

使用SETLOCAL时如何持久地将目录添加到PATH?

可能重复:
使环境变量生存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屏障的容器,但是欢迎更优雅的解决方案.

windows batch-file environment-variables

2
推荐指数
1
解决办法
351
查看次数

标签 统计

batch-file ×3

windows ×2

cmd ×1

environment-variables ×1