在.bat脚本中修改和设置PATH(Windows)

时间:2017-08-07 18:09:02

标签: java batch-file cmd path

我厌倦了修改我在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方法没有按照我的预期进行操作。我假设我误解了如何使用!这里的运营商。

0 个答案:

没有答案