首页 文章

相同批处理脚本运行两次时未设置变量

提问于
浏览
0

我有一个批处理脚本,只是切换我的python路径 . 当我第二次运行它时,我的变量没有被设置,但是我希望它被设置为的字符串被回显到控制台上 .

第一次运行脚本:

C:\Users\Hai\Desktop>FOR /F "delims=" %I IN ('Python -V') DO (
setlocal
 set "ver=%I"
)

C:\Users\Hai\Desktop>(
setlocal
 set "ver=Python 3.6.3"
)

第二次运行相同的批处理文件而不关闭控制台

C:\Users\Hai\Desktop> chPythonVer.bat

C:\Users\Hai\Desktop>FOR /F "delims=" %I IN ('Python -V') DO (
setlocal
 set "ver=%I"
)
Python 2.7.15

这就是我设置变量的方式:

FOR /F "delims=" %%I IN ('Python -V') DO (
    setlocal
    set "ver=%%I"
)

echo the current version pathed is %ver%

SET /P c=would you like to switch to the other version? [y/n] 
IF /I "%c%" EQU "y" (
    IF "%ver%" EQU "Python 3.6.3" (
        endlocal
        set PATH= ...
        echo switched to Python 2.7.15
        pause
    ) ELSE (
        endlocal
        set PATH= ...
        echo switched to Python 3.6.3
        pause
    )   
) ELSE IF /I "%c%" EQU "n" (
    endlocal
    pause
)

1 回答

  • 0

    首先,将变量名称设置为现有环境变量名称是一个非常非常糟糕的主意 . 即 path (参见答案的底部)当您在代码块中设置变量时,您还需要 delayedexpansion . 所以将 PATH 重命名为 myPATH

    @echo off
    setlocal enabledelayedexpansion
    FOR /F "delims=" %%I IN ('Python -V') DO (
        set "ver=%%I"
    )
    
    echo the current version pathed is %ver%
    
    SET /P c=would you like to switch to the other version? [y/n] 
    IF /I "!c!" EQU "y" (
    IF "!ver!" EQU "Python 3.6.3" (
        set mypath= ...
        echo switched to Python 2.7.15
        pause
    ) ELSE (
        set mypath= ...
        echo switched to Python 3.6.3
        pause
    )   
        ) ELSE IF /I "!c!" EQU "n" (
       pause
    )
    

    但是,如果您正在查看实际更新系统路径,请忽略第一条注释,然后将路径设置为:

    SET PATH=%PATH%;c:\whereever\python is\
    

相关问题