我需要一些帮助来改进这个问题的答案:
通过批处理从 %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=!
并且只需要完成最后一部分,即替换。简而言之:我们使用延迟扩展来确保在评估要替换的字符串后进行替换。
除此之外,可能没有更简单的方法可以批量完全替换/删除变量中的某些内容。
当然,您可以按;
拆分它并检查该值是否是您想要整理的值,将其他所有内容添加到一堆并将其设置为新路径,但上述内容将使它成为最易读的我会说。