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

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

Ответить
Настройки темы
CMD/BAT - Некорректность выполнения батника в случ.не успешн выполн. команды

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


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

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


Изменения
Автор: daledale
Дата: 09-11-2022
Доброго. Такой вопрос. Есть батник:
net use x: \\comp1\share || shutdown -s -t 0
...
Ну всё просто, доступен сетевой ресурс - подключаем сетевой диск - выполняем дальше. Не доступен - выключаем пк.
Исходные данные - сетевой ресурс НЕ доступен 100%. Пользователь - права администратора 100%. Программа (см.ниже) запущена с правами этого же пользователя = с правами администратора. Система Win2003 (а-ля XP).
В общем вручную запускаю батник - "ошибка, отдаётся команда на выключение". Т.е. всё ОК.
Есть программа резервного копирования (напомню, она запущена с правами этого же пользователя с правами администратора). У этой программы в настройках прописан этот батник после выполнения резервирования. Она (эта программа) успешно запускает этот батник, видно, что ждёт 2-3 сек. подключения сетевого ресурса (как и при ручном запуске батника), видно на мгновение, что выскакивает ошибка, помоему о недоступности сетевого ресурса (точнее сказать не могу, проскакивает быстро) и.... всё, пк не выключается, т.е. даже не доходит до выполнения команды shutdown -s -t 0
Вопрос не в изменении батника (изменить могу) и возможно вопрос не совсем в эту ветку по батникам... Мне интересно какие есть подводные камни в такой конф. батника с "||". Почему такое неоднозначное поведение может быть?
Спасибо.

Отправлено: 01:39, 09-11-2022

 

Старожил


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

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


чтобы без опасений уверенно использовать
Код: Выделить весь код
||
переходите на линукс. под виндоз ненадежно

всякие
Код: Выделить весь код
 if ERRORLEVEL 1 goto :
там от этого

https://learn.microsoft.com/en-us/pr...754335(v=ws.11)

Отправлено: 03:29, 09-11-2022 | #2



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

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


Аватара для Elven

Ветеран


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

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


&& - выполнить, если предыдущая команда вернула "0", || - выполнить если предыдущая команда вернула НЕ "0". вроде как все просто, с этим можно жить, но иногда всплывают неприятные подводные камни, с которыми непонятно куда приткнуться. и непонятно в первую очередь потому, что нет стройного понимания, что выполнилось, а что нет. посему таковая конструкция используется в ванлайнерах или в том месте, где ответ предыдущей команды совершенно однозначен и не подразумевается возможности невыполнения команды следующей.
для всех прочих случаев лучше придумать какую-то другую проверку, например в случае с сетевым диском я использовал if (not) exist c обязательным else. Так банально проще увидеть в каком месте батник спотыкается (хотя бы через echo "шара (не)доступна" >> error.log).

конкретно с поведением || в указанной проблеме в первую голову приходит вопрос о пользователе, это именно отдельный пользователь или какая-то встроенная учетка от имени которой выполняется батник?

Отправлено: 08:39, 09-11-2022 | #3


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


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

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


Elven
Спасибо за ответ.
Цитата Elven:
конкретно с поведением || в указанной проблеме в первую голову приходит вопрос о пользователе, это именно отдельный пользователь или какая-то встроенная учетка от имени которой выполняется батник? »
Это текущий пользователь = администратор, в котором вот открыт текущий активный сеанс Windows. Программа работает тоже от имени текущего пользователя.
Если батник запускает человек вручную - всё ок, батник отрабатывается как надо.
Если батник запускает программа - не работает. (Опять же, возвращаясь к написанному - выполняется первая команда, ищется сетевой ресурс и не находится - всё, выполнение батника останавливается).

Отправлено: 11:49, 09-11-2022 | #4


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


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

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


Upd.
Вопрос, снимается. Возможно у меня какой-то частный случай. Но странно всё равно.
В общем для тестов изменил батник на:
net use x: \\comp1\share || echo share not found&pause
---
Сообщение вижу и при ручном и при, так сказать, автоматическом запуске.
Меняю echo на shutdown -s -t 100&pause

Вручную работает, ч-з программу - нет. Пишет стандартное сообщение, когда Win не может найти экзешник. Но что интересно, файл shutdown.exe - лежит по своему стандартному пути %systemroot%\system32 (c:\windows\system32). В настройках ОС, в переменных окружения PATH этот путь указан. В общем что сделал - скопировал shutdown.exe туда же, где и батник и вуаля, всё работает.
ps Прошу прощения, уважаемые гуру, что вас побеспокоил, полностью понимаю, что моя тема абсолютно не связана с батниками и их написанием.
pps Однако интересный казус))

Отправлено: 12:09, 09-11-2022 | #5


Аватара для dmitryst

Ветеран


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

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


Цитата daledale:
Win не может найти экзешник »
либо копируйте нужный файл в папку к батнику, либо прописывайте полный путь . Та же проблема и на линуксах, кстати, если запускать батник из планировщика. Но там ситуация с "||" и с обработкой ошибок вообще, получше будет. Лично я все операции по копированию кидаю в планировщик, при ошибках подключения к шаре я получаю сообщение об этом, и особых проверок можно не делать.

-------
Осваиваю FreeBSD


Отправлено: 19:20, 09-11-2022 | #6


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

fascinating rhythm


Moderator


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

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


В Windows полный порядок с обработкой ошибок, но если не пользоваться технологиями прошлого века (при всём к ним уважении), а перейти на Powershell.

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


Отправлено: 21:57, 09-11-2022 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Циклический запуск консоли .cmd после выполнения батника BKPB Скриптовые языки администрирования Windows 5 11-07-2019 15:27
CMD/BAT - Результат выполнения команды в переменную densan Скриптовые языки администрирования Windows 13 22-11-2018 17:38
CMD/BAT - Результат выполнения команды в переменные DRON4eg Скриптовые языки администрирования Windows 2 19-05-2017 08:59
CMD/BAT - [решено] Не закрываются последствия выполнения команды Start Voron-orel Скриптовые языки администрирования Windows 2 01-03-2016 14:36
GPO: ошибки выполнения батника при загрузке системы (запуск сценариев) Hooty Microsoft Windows NT/2000/2003 15 24-02-2009 13:31




 
Переход