Переменная не установлена, когда один и тот же пакетный скрипт запускается дважды - PullRequest
0 голосов
/ 11 мая 2018

У меня есть пакетный скрипт, который просто переключает мой путь к 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 голосов
/ 11 мая 2018

Во-первых, очень и очень плохая идея устанавливать имена переменных в существующих именах переменных среды.то есть 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\
...