如何使用批处理文件中的变量查找和替换%PATH%系统变量中的字符串?

时间:2015-10-09 14:13:04

标签: java batch-file command-line system-variable delayedvariableexpansion

我正在尝试使用批处理文件升级Java,我需要更改PATH系统变量以反映该更改。在PATH变量的开头我有

C:\Program Files\Java\jdk1.8.0_51;...

我需要将jdk值更改为jdk1.8.0_60。我对命令行和批处理文件比较新,所以我可能会误解一些东西。这是我正在尝试的。

我有几个变量

jVersion=1.8.0_
javaPath=C:\Program Files\Java
newVersion=60
oldVersion=51

我发现了一些关于用字面值替换字符串的东西

set PATH=%PATH:1.8.0_51=1.8.0_60%

但我无法使用变量...

set PATH=%%PATH:%jVersion%%oldVersion%=%jVersion%%newVersion%%%

我不知道你是否需要2%的外围,或者只需要一个,或者!我对延迟扩张的了解并不十分自信。我也不知道这是否可能。

作为奖励,我真的希望能够接受......后面的任何内容...... \ Java \并用我的新值替换它。这是为了防止我不知道jdk

的PATH变量中的值

谢谢!

修改: 通过在我的代码的修改版本之前使用命令call,我能够使其工作

call set PATH=%PATH:%jVersion%%oldVersion%=%jVersion%%newVersion%%

我仍在试图弄清楚如何使它变得通用,并将...\jdk之后的任何内容更改为我拥有的值。

2 个答案:

答案 0 :(得分:2)

将下面的代码粘贴到bat文件中,这应该可以解决问题

@echo off

setlocal EnableDelayedExpansion
set jVersion=1.8.0_
set "javaPath=C:\Program Files\Java"
set newVersion=60
set oldVersion=51
set PATH=%jVersion%%oldVersion%
echo before path change : !PATH!
set PATH=!PATH:%jVersion%%oldVersion%=%jVersion%%newVersion%!
echo final path change  : !PATH!
pause

答案 1 :(得分:0)

我想你想要这个:

set PATH=C:\Program Files\Java\jdk1.8.0_60;%PATH%

如果您将新JDK放在之前的路径中,那么操作系统将使用新的JDK。

但是,使用 new 旧版本编辑PATH系统设置和替换旧版JDK路径会好得多。