Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] не работает set в esle

Ответить
Настройки темы
CMD/BAT - [решено] не работает set в esle

Аватара для chek

Ветеран


Сообщения: 508
Благодарности: 10

Профиль | Отправить PM | Цитировать


все привет. есть код
Код: Выделить весь код
::@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%
не присваивает и не выводит результат.
что не так?

Отправлено: 13:32, 28-12-2018

 

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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. Что за скрипт? Если правильно понял, теневое подключение к пользователям и контроль действий?

Отправлено: 15:30, 28-12-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для chek

Ветеран


Сообщения: 508
Благодарности: 10

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:25, 28-12-2018 | #3


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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 в 16:42.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:31, 28-12-2018 | #4


Аватара для chek

Ветеран


Сообщения: 508
Благодарности: 10

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:59, 28-12-2018 | #5


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Вот Ваш вариант, но рабочий.
Код: Выделить весь код
@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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 28-12-2018 в 17:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:38, 28-12-2018 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 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 (годится не для всех случаев).
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 28-12-2018 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] не работает set в esle

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Set-AddressBookList не удается выполнить tarasov.evgeny Скриптовые языки администрирования Windows 13 09-04-2015 09:43
[решено] Не работает bcdedit.exe /set {current} nx AlwaysOff GreyAngel Windows Server 2012/2012 R2 2 02-05-2013 23:02
CMD/BAT - [решено] Не работает команда set /a mark23 Скриптовые языки администрирования Windows 7 04-04-2013 17:16
CMD/BAT - [решено] Криво работает сочетание for и set Boa Soft Скриптовые языки администрирования Windows 4 16-06-2011 16:37
Прочие - Web-камера не работает. Ошибка 80004005 cannot set frame rate for preview Raspytnik Microsoft Windows 7 3 17-03-2010 22:41




 
Переход