Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] не работает set в esle (http://forum.oszone.net/showthread.php?t=338473)

chek 28-12-2018 13:32 2848722

не работает set в esle
 
все привет. есть код
Код:

::@echo off
::mode con:cols=100 lines=80
set /P cb="enter name : "
if %cb%==t (
                set cbFullName="termserver"
        ) else (
                set cb0=cb0
                echo %cb0%
                set cbFullName=%cb0%%cb%
                echo %cbFullName% )
query user /server:%cbFullName% | sort
echo.
set /p usersession= Enter the session ID:
mstsc /v:%cbFullName% /multimon /shadow:%usersession% /control /noConsentPrompt

кусок
set cb0=cb0
echo %cb0%
set cbFullName=%cb0%%cb%
echo %cbFullName%
не присваивает и не выводит результат.
что не так?

morgan-12l1 28-12-2018 15:30 2848751

Цитата:

Цитата chek
что не так? »

Если посмотреть в справку команды IF - Оператор else должен размещаться в той же строке, что и команда if.
Вот Ваши скрипт, насколько понял работает.

Код:

::@echo off
::mode con:cols=100 lines=80
set /P cb="enter name : "
if %cb% ==t (set cbFullName="termserver") else (set cb0=cb0 echo %cb0% set cbFullName=%cb0%%cb%        echo %cbFullName% )
query user /server:%cbFullName% | sort
echo.
set /p usersession= Enter the session ID:
mstsc /v:%cbFullName% /multimon /shadow:%usersession% /control /noConsentPrompt

P.S. Что за скрипт? Если правильно понял, теневое подключение к пользователям и контроль действий?

chek 28-12-2018 16:25 2848764

нет, не работает. да и как первое эхо поймет, что нужно вывести только %cb0%, а не всю строку?
верно, теневое управление сеансами пользователей.

megaloman 28-12-2018 16:31 2848767

chek,
Код:

@Echo Off
        Set /P cb="enter name : "
        if "%cb%"=="t" Set "cbFullName="termserver"" &GoTo :Cont

        Set "cb0=cb0"
        Set "cbFullName=%cb0%%cb%"
        :Cont
echo %cbFullName%
pause
rem query ....... Далее Ваш код


chek 28-12-2018 16:59 2848776

спасибо, работает.
а какая ошибка в моем первоначальном?

megaloman 28-12-2018 17:38 2848785

Вот Ваш вариант, но рабочий.
Код:

@Echo Off
cls
        SetLocal EnableExtensions EnableDelayedExpansion

        set /P cb="enter name : "

        if %cb%==t (
                set cbFullName="termserver"
                echo !cbFullName!
        ) else (
                set cb0=cb0
                echo !cb0!
                set cbFullName=!cb0!!cb!
                echo !cbFullName!
        )
pause

В CMD есть тонкость при использовании If, For: отложенное расширение переменной среды
Проанализируйте выполнение вот этого кода:
Код:

@Echo Off
cls

Set /A i=1

Set Out=Тра ля ля

Echo До If Out=%Out%

If %i% EQU 1 (
        Set Out=куку равно 1
        Echo If i=%i% Внутри If Out=%Out%
) Else (
        Set Out=куку не равное 1
        Echo If i=%i% Внутри If Out=%Out%
)

Echo После If Out=%Out%

pause

Ненавижу!!!
В принципе, если вести себя аккуратно и не совать Echo внутрь If, то конкретно ваш код можно написать:
Код:

@Echo Off
cls
        set /P cb="enter name : "
        set "cb0="
        if %cb%==t (
                set cbFullName="termserver"
        ) else (
                set cb0=cb0
                set cbFullName="cb0%cb%"
        )

echo "%cb0%" %cbFullName%
pause


Iska 28-12-2018 17:40 2848786

Цитата:

Цитата chek
а какая ошибка в моем первоначальном? »

Раскрытие переменных окружения выполняется для всей команды целиком. В Вашем случае, все переменные окружения, заключённые в операторные скобки:
Цитата:

Код:

if %cb%==t (
                set cbFullName="termserver"
        )
else (
                set cb0=cb0
                echo %cb0%
                set cbFullName=%cb0%%cb%
                echo %cbFullName% )


будут раскрыты перед началом исполнения всей процитированной команды (начиная с if %cb%…, и данная команда будет исполняться в таком виде:
Код:

if Содержимое_переменной_окружения_cb==t (
                set cbFullName="termserver"
        ) else (
                set cb0=cb0
                echo
                set cbFullName=Содержимое_переменной_окружения_cb
                echo )

Можете временно закомментировать @echo off и посмотреть.

Что делать — использовать отложенное раскрытие переменных окружения (сообщение коллеги megaloman выше), использовать двойное раскрытие по call (годится не для всех случаев).


Время: 03:57.

Время: 03:57.
© OSzone.net 2001-