我厌倦了修改我在java6 / 7/8之间交换的路径,并决定为我做一个快速的.bat脚本。
之前的一次迭代正在我最后一台笔记本电脑上运行,但在我的新笔记本电脑上,最后一次迭代也不是这一次似乎都有效。
我要做的是抓住我的PATH变量,将字符串“jdk#”替换为我打算使用的其他“jdk#”。 JAVA_HOME的设置似乎执行正常,整个脚本执行没有错误,但似乎字符串替换没有发生,我不知道为什么。
@echo off
@REM Cycle through all the arguments passed in
for %%x in (%*) do (
@REM if the current argument is "mvn" switch the versions
IF "%%x"=="mvn" (
@REM Temporarily move to the Maven 2 directory
PUSHD C:\PROGRA~1\apache-maven-2.2.1\bin\
@REM if the RENAME file exists then Maven 3 was enabled and we need to rename it
IF EXIST "mvnRENAME.bat" (
REN "mvnRENAME.bat" "mvn.bat"
ECHO Maven 2 enabled
) ELSE (
@REM otherwise we need to hide the mvn.bat file to enable Maven 3
REN "mvn.bat" "mvnRENAME.bat"
ECHO Maven 3 enabled
)
@REM Return back to the original directory
POPD
)
@REM Swap to java 6
IF "%%x"=="java6" (
ECHO Java 6 enabled
@REM Replace instances of jdk7 with jdk6
set "PATH=%PATH:jdk7=jdk6%"
setx -m PATH "%PATH:jdk7=jdk6%"
echo.%PATH%
@REM Replace instances of jdk8 with jdk6
set "PATH=%PATH:jdk8=jdk6%"
setx -m PATH "%PATH:jdk8=jdk6%"
echo.%PATH%
@REM Set java home
set "JAVA_HOME=C:\PROGRA~1\Java\jdk6\"
setx -m JAVA_HOME C:\PROGRA~1\Java\jdk6\
)
)
运行此脚本似乎根本不会修改我的路径,因为之后路径仍然包含“C:\ PROGRA~1 \ Java \ jdk7 \ bin”。
我误解了字符串:find = replace函数是如何工作的?我的语法是否关闭?任何帮助将不胜感激。
~~~~~~~~~~~~~~~~~~~~~
添加了SETLOCAL ENABLEDELAYEDEXPANSION,然后在下面做了这一点。
set pathtext=!PATH:jdk7=jdk6!
echo.!pathtext!
set "!PATH!=!pathtext!"
setx -m !PATH! "!pathtext!"
变量pathtext现在包含我想要的路径(在当前命令行中和系统中永久存在),但set和setx方法没有按照我的预期进行操作。我假设我误解了如何使用!这里的运营商。