Показать полную графическую версию : [решено] не работает 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
что не так? »
Если посмотреть в справку команды 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. Что за скрипт? Если правильно понял, теневое подключение к пользователям и контроль действий?
нет, не работает. да и как первое эхо поймет, что нужно вывести только %cb0%, а не всю строку?
верно, теневое управление сеансами пользователей.
megaloman
28-12-2018, 16:31
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 ....... Далее Ваш код
спасибо, работает.
а какая ошибка в моем первоначальном?
megaloman
28-12-2018, 17:38
@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
а какая ошибка в моем первоначальном? »
Раскрытие переменных окружения выполняется для всей команды целиком. В Вашем случае, все переменные окружения, заключённые в операторные скобки:
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 (годится не для всех случаев).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.