使用变量通过批处理从 %path% 变量中删除不需要的路径名



我需要一些帮助来改进这个问题的答案:

通过批处理从 %path% 变量中删除不需要的路径名

我有以下路径:

PATH=C:Program FilesJavajre1.8.0_141bin;C:windowssystem32;C:windows;...

第一部分通过变量设置:

JAVA_HOME=C:Program FilesJavajre1.8.0_141
PATH=%JAVA_HOME%bin;C:windowssystem32;C:windows;

虽然我知道以下内容会起作用,但我更喜欢使用变量 JAVA_HOME,这样随着脚本JAVA_HOME更改而没有! 我将如何采用以下内容并将其修改为使用 %JAVA_HOME% 变量?

而不是 %PATH:C:\Program Files\Java\jre1.8.0_141\bin;=%

我想要下面这样的东西,但符号让我无法理解。

%PATH:%%JAVA_HOME%%bin;=%

我可以理解所有百分号的符号有点奇怪。

我编造了这个小东西来展示一些东西,可能会更容易看到会发生什么:

@echo off
setlocal EnableDelayedExpansion
set something=fobaaaao
set toRemove=baaaa
echo %something%
set result=!something:%toRemove%=!
echo %result%

我选择了路径变量以外的其他一些值,但想法保持不变。您可以修改变量以添加类似bin的东西,例如.
在这里,您可以看到最终会出现%something:%%toRemove%%=%!something:%toRemove%=!

语法仍然相同<marker>variableName:> marker>toReplace</marker>=replacingWith</marker>
但现在我们使用其他标记:!而不是%%而不是%%

这是如何工作的,为什么?

在这个小例子的顶部有一行重要的行:setlocal EnableDelayedExpansion,它使感叹号能够用作变量"标记"。与百分号的区别在于,感叹号中的变量将在运行时计算,而另一个已经在"编译时"计算(批处理中并不真正存在,但希望清楚我的意思;对此欢迎:)的建议(。

因此,语句!something:%toRemove%=!运行时已经如下所示:!something:baaaa=!并且只需要完成最后一部分,即替换。简而言之:我们使用延迟扩展来确保在评估要替换的字符串后进行替换。

除此之外,可能没有更简单的方法可以批量完全替换/删除变量中的某些内容。

当然,您可以按;拆分它并检查该值是否是您想要整理的值,将其他所有内容添加到一堆并将其设置为新路径,但上述内容将使它成为最易读的我会说。

相关内容

  • 没有找到相关文章

最新更新