Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在.bat脚本(Windows)中修改和设置路径_Java_Batch File_Cmd_Path - Fatal编程技术网

Java 在.bat脚本(Windows)中修改和设置路径

Java 在.bat脚本(Windows)中修改和设置路径,java,batch-file,cmd,path,Java,Batch File,Cmd,Path,我厌倦了修改我的路径来在java6/7/8之间交换,决定制作一个快速的.bat脚本来帮我完成 上一次迭代在我的上一台笔记本电脑上运行,但在我的新笔记本电脑上,上一次迭代和这次迭代似乎都不起作用 我要做的是获取我的PATH变量,将字符串“jdk#”替换为我打算使用的任何其他“jdk#”。JAVA_HOME的设置似乎执行得很好,整个脚本执行时没有错误,但是字符串替换似乎没有发生,我不知道为什么 @echo off @REM Cycle through all the arguments passe

我厌倦了修改我的路径来在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方法没有达到我的预期。我想我是误会了怎么用这个词!此处的运算符。

%%x
是for变量,仅在for语句或(代码块)的范围内有效。在代码块内设置变量需要使用setlocal设置延迟扩展,并使用
而不是
%
符号将其括起来。%%x很好,除了if语句之外,它不会在任何地方使用,并且按照预期工作。我仍然不太确定我是否会继续第二部分。由于我试图修改一个系统变量(包括本地变量和为系统实际设置的变量),在启用延迟扩展的情况下,该变量如何工作?我将对其进行编辑,以包含整个交换脚本。我使用for循环遍历传入的所有命令行参数,这部分工作正常。只是“查找/替换”似乎不起作用,因为该集合适用于JAVA_HOME。将修改后的
路径的
echo
移到Parenthisized块之外。有关说明,请参见
延迟扩展
(许多项)。
设置“!PATH!=!pathtext!”
尝试将名为(PATH的内容
)的变量设置为值(
pathtext的内容
)。从
path
中删除感叹号(与
setx
命令相同)
%%x
是for变量,仅在for语句或(代码块)的范围内有效。在代码块内设置变量需要使用setlocal设置延迟扩展,并使用
而不是
%
符号将其括起来。%%x很好,除了if语句之外,它不会在任何地方使用,并且按照预期工作。我仍然不太确定我是否会继续第二部分。由于我试图修改一个系统变量(包括本地变量和为系统实际设置的变量),在启用延迟扩展的情况下,该变量如何工作?我将对其进行编辑,以包含整个交换脚本。我使用for循环遍历传入的所有命令行参数,这部分工作正常。只是“查找/替换”似乎不起作用,因为该集合适用于JAVA_HOME。将修改后的
路径的
echo
移到Parenthisized块之外。有关说明,请参见
延迟扩展
(许多项)。
设置“!PATH!=!pathtext!”
尝试将名为(PATH的内容
)的变量设置为值(
pathtext的内容
)。从
path
中删除感叹号(与
setx
命令相同)