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

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

Ответить
Настройки темы
CMD/BAT - [решено] Сравнение переменной с пустым значением.

Пользователь


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

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


Здравствуйте. Помогите пожалуйста.

Сам скрипт
Код: Выделить весь код
set "SHARA=\\srv-public\public"
for /F "tokens=1,2,3,4,5,6" %%e in ('net use ^| findstr.exe /r ".*%SHARA%.*"') do set "SHARA4F=%%e %%f %%g %%h %%i %%j" set "SOSTOYANIE=%%e" set "BUKVA=%%f" set "SHARA-NAME=%%g"

IF "%SHARA4F%"=="Ok" call :vykhod
IF "%SHARA4F%"=="Отсоединен" call :procedura
IF "%SHARA4F%"=="" call :procedura

:vykhod
exit /b

:procedura
net use %bukva% /delete /yes 
net use Z: %SHARA% /Persistent:Yes
Вопрос № 1: если диск подсоединен, и в коде
Код: Выделить весь код
for /F "tokens=1,2,3,4,5,6" %%e in ('net use ^| findstr.exe /r ".*%SHARA%.*"') do set "SHARA4F=%%e %%f %%g %%h %%i %%j" set "SOSTOYANIE=%%e" set "BUKVA=%%f" set "SHARA-NAME=%%g"
вместо
Код: Выделить весь код
%SHARA% подставить значение \\srv-public\public
то в выводе команды будет то, что нужно
Код: Выделить весь код
set "SHARA4F=Отсоединен Z: \\srv-public\public Microsoft Windows Network" set "SOSTOYANIE=Отсоединен" set "BUKVA=Z:" set "SHARA-NAME=\\srv-public\public"
. А если будет вот это
Код: Выделить весь код
%SHARA%
, то вообще никакого вывода не будет. Скажите пожалуйста, как должно быть оформлено правильно вот это выражение, похоже в нем у меня первая ошибка?
Код: Выделить весь код
('net use ^| findstr.exe /r ".*%SHARA%.*"')
Вопрос №2: когда сетевых подключений нет, у переменной SHARA4F - пустое значение, но вот это условие
Код: Выделить весь код
IF "%SHARA4F%"=="" call :procedura
не срабатывает,
Код: Выделить весь код
:procedure
не выполняется. Скажите пожалуйста, как правильно описать это условие и поведение при срабатывании этого условия, т.к. если пошагово осуществлять отладку скрипта в cmd при последовательном вводе команд
Код: Выделить весь код
set "SHARA=\\srv-public\public"
for /F "tokens=1,2,3,4,5,6" %e in ('net use ^| findstr.exe /r ".*\\srv-public\public.*"') do set "SHARA4F=%e %f %g %h %i %j" set "SOSTOYANIE=%e" set "BUKVA=%f" set "SHARA-NAME=%g"
в выводе команды
Код: Выделить весь код
echo %SOSTOYANIE%
получаю
Код: Выделить весь код
%SOSTOYANIE%
а при выполнении
Код: Выделить весь код
IF "%SHARA4F%"=="" echo ok
ничего не получаю (следовательно и переход на процедуру не сработает)

Отправлено: 11:02, 09-09-2021

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Домена нет? Если есть, то не лучше ли групповыми политиками реализовать?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:20, 09-09-2021 | #2



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

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


Пользователь


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

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


Цитата DJ Mogarych:
Домена нет? Если есть, то не лучше ли групповыми политиками реализовать? »
Домен есть. Реализовано, но не всегда и не у всех цепляется. Причем доменов несколько, шар - тоже несколько...Компов много, если уже существующую политику править, то нет гарантий, что что-то не крашнется, также как и, если новую создавать (к сожалению, реализация была на DefaultDomainPolicy).

Буду признателен если со скриптом поможете, DJ Mogarych

Отправлено: 14:00, 09-09-2021 | #3


Ветеран


Contributor


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

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


epoddubniy, Лучше бы Вы описали задачу, а не приводили своё решение. То, что Вы изобразили - извините, это одна большая ошибка. For у Вас не работает. Убедитесь:
Код: Выделить весь код
For /F "tokens=1,2,3,4,5,6 delims=" %%e in ('net use ^| findstr.exe /r ".*%SHARA%.*"') do Echo "kuku" & set "SHARA4F=%%e %%f %%g %%h %%i %%j" set "SOSTOYANIE=%%e" set "BUKVA=%%f" set "SHARA-NAME=%%g"
Если для отладки вставить Echo "kuku" оно не появляется, то есть то, что Вы далее написали никогда не делается.
Строка присваиваний неверна изначально.
Код: Выделить весь код
set "SHARA4F=%%e %%f %%g %%h %%i %%j" set "SOSTOYANIE=%%e" set "BUKVA=%%f" set "SHARA-NAME=%%g"
Надо Set что1=чему1 &Set что2=чему2 &Set что3=чему3

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

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

Отправлено: 14:38, 09-09-2021 | #4


Ветеран


Contributor


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

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


epoddubniy, Как я понял задачу:
Если Z: подключен к %SHARA%, то ничего не делаем
В противном случае: если Z: нет или он подключен к другому ресурсу, то отсоединяем его и net use Z: %SHARA% /Persistent:Yes
Вот вариант:
Код: Выделить весь код
@Echo Off
	Set "SHARA=\\srv-public\public"
	Set "Letter=Z:"

	>nul 2>&1 (Net Use %Letter% |Findstr /I %SHARA% &&Exit /B)

	>nul 2>&1 Net Use %Letter% /Delete /Y
	Net Use %Letter% %SHARA% /Persistent:Yes
Exit /B

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

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

Отправлено: 16:43, 09-09-2021 | #5


Пользователь


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

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


Цитата megaloman:
Если для отладки вставить Echo "kuku" оно не появляется, то есть то, что Вы далее написали никогда не делается. »
megaloman, да, в этом и загвоздка, если вместо
Код: Выделить весь код
%SHARA%
будет подставлено значение этой переменной
Код: Выделить весь код
\\srv-public\public
то строка разложится на переменные (при условии что сетевое подключение существует) и при выполнении echo %SOSTOYANIE% или echo %BUKVA% у меня в консоль выведутся соответствующие значения.
Не понимаю, почему интерпретатор не "хавает" %SHARE%

Отправлено: 16:46, 09-09-2021 | #6


Ветеран


Contributor


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

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


Цитата epoddubniy:
Не понимаю, почему интерпретатор не "хавает" %SHARE% »
Не понял, что Вы имеете ввиду, ИМХО, FindStr написан некорректно. Попробуйте так:
Код: Выделить весь код
@Echo Off
cls
set "SHARA=\\srv-public\public"
for /F "tokens=1,2,3,4,5,6" %%e in ('net use ^| findstr.exe /I "%SHARA%"') do Set "SHARA4F=%%e %%f %%g %%h %%i %%j" set "SOSTOYANIE=%%e" set "BUKVA=%%f" set "SHARA-NAME=%%g"
Echo SHARA4F=%SHARA4F%

pause
Exit /B
Увидите, что For отработает, но Ваши Set написаны криво, опять же, For отработает, если есть подключение к шаре, иначе Nrt Use его не выдаст и FindStr не обнаружит

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


Последний раз редактировалось megaloman, 09-09-2021 в 17:08.

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

Отправлено: 16:58, 09-09-2021 | #7


Ветеран


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

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


epoddubniy,
а покажите конкретно вывод:
Код: Выделить весь код
net use|findstr /irc:"%SHARA%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:03, 09-09-2021 | #8


Пользователь


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

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


Цитата megaloman:
Не понял, что Вы имеете ввиду, ИМХО, FindStr написан некорректно. Попробуйте так: »
Cпасибо!!!!! megaloman
Цитата megaloman:
Увидите, что For отработает, но Ваши Set написаны криво »
Действительно set оказались кривые... Поправил по Вашей рекомендации все - заработало.

megaloman, скажите пожалуйста, правильно ли я мыслю: если findstr.exe мне возвращает пустую строку, то переменным
SOSTOYANIE, BUKVA, SHARA-NAME при выполнении кода:
Код: Выделить весь код
set "SOSTOYANIE=%%e" set "BUKVA=%%f" set "SHARA-NAME=%%g"
присвоится пустое значение?

А если им присвоилось пустое значение, почему при выполнении команды, например
Код: Выделить весь код
IF "%BUKVA%"=="" (ECHO %date%)
в консоль не выводится текущая дата, то есть "проверка" условия IF оканчивается неудачей

Отправлено: 17:31, 09-09-2021 | #9


Ветеран


Contributor


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

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


Цитата epoddubniy:
правильно ли я мыслю: »
Пустые строки For не обрабатывает. Убедитесь, нарисуйте For в таком виде:
Код: Выделить весь код
for /F "tokens=1,2,3,4,5,6" %%e in ('net use ^| findstr.exe /I "%SHARA%"') Do Echo "Kuku"
То есть и код:
Код: Выделить весь код
set "SOSTOYANIE=%%e" &set "BUKVA=%%f" &set "SHARA-NAME=%%g"
выполнен не будет. Все эти переменные: SOSTOYANIE, BUKVA, SHARA-NAME -не определены (можно сказать, пустые), если Вы не определяли их выше.
Цитата epoddubniy:
в консоль не выводится текущая дата »
Что-то не так понимаете, у меня выводит. Разберитесь, проанализируйте тестовый вывод:
Код: Выделить весь код
Echo "%BUKVA%"
Echo IF "%BUKVA%"=="" (ECHO %date%)
IF "%BUKVA%"=="" (ECHO %date%)

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

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

Отправлено: 17:58, 09-09-2021 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. NiOl Скриптовые языки администрирования Windows 7 31-01-2019 19:58
CMD/BAT - [решено] Сравнение переменной цикла со строковой переменной NickM Скриптовые языки администрирования Windows 2 17-01-2017 10:28
CMD/BAT - [решено] В переменной содержится имя переменной opravdin Скриптовые языки администрирования Windows 3 28-01-2013 11:11
CMD/BAT - [решено] Сравнение строк с переменной и добавление в случае отсутствия zion87 Скриптовые языки администрирования Windows 2 04-01-2013 15:08
Delphi - [решено] SQL Выбор записей с максимальным значением tarakan1983 Программирование и базы данных 29 14-06-2011 00:13




 
Переход