|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перезапуск устройства |
|
CMD/BAT - Перезапуск устройства
|
Новый участник Сообщения: 4 |
Всем доброго времени суток.
Прошу помочь с созданием батника. После входа в Windows я запускаю батник с помощью планировщика задач. В корне диска "C" располагается файл "erorrlog.txt". Сам батник должен работать следующим образом: 1. Получить дату изменения файла "erorrlog.txt" 2. Присвоить полученное значение даты изменения файла "erorrlog.txt" переменной "Х" 3. Цикл: получить дату изменения файла "erorrlog.txt" и сравнить с переменной "Х", если равно, то снова получить дату изменения файла "erorrlog.txt" и сравнить с переменной "Х", если нет, то отключить устройство, ID которого "DEVICE_ID", далее скорее всего нужна будет задержка на 3 сек, затем включить это же устройство. 4. Вернуться в пункт 1. |
|
Отправлено: 23:22, 01-06-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать svoping, не пишите, что и как должен делать «батник» — переменные, файлы в корне системного раздела, циклы, задержки и т.п. Опишите Вашу задачу.
|
Отправлено: 01:17, 02-06-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Забанен Сообщения: 793
|
Iska, попробую телепатировать что же svoping имел ввиду: если работа некого устройства завершилась с ошибкой, эта ошибка пишется в лог, изменяя тем самым время модификации самого лога; последнее является отправной точкой для установления факта неправильной работы устройства, посему его надобно перезапускать. Если телепатия не подвела, то, во-первых, лучше отказаться от затеи плодить текстовые файлы в корне диске (в идеале и вовсе запретить создавать что-либо в корне диска за исключением папок - безопасность, какбэ), а логирование перенести в журнал событий (если не ошибаюсь, это можно сделать sysmon'ом), а смотреть psloglist'ом соответсвующий журнал: если ошибка есть - devcon в помощь. А вообще, если устройство представлено каким-то сервисом в системе, то проще в services.msc выставить автоматический перезапуск службы при возникновении ошибки. На этом телепатия заканивается.
|
Отправлено: 09:10, 02-06-2017 | #3 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Имеем некую программу предназначенную для работы с определенным устройством. Устройство подключено по USB(эмуляция com-порта). Программа обращается к устройству, и если не получает ответа от него, то вносит информацию об ошибке в файл "erorrlog.txt", изменяя тем самым время модификации самого лога; последнее является отправной точкой для установления факта неправильной работы устройства, посему его надобно перезапускать."
Вот окончательный вариант Про диск C понял, его я указал лишь, для примера, на самом деле "erorrlog.txt" будет храниться С:\DEVICE\erorrlog.txt |
Последний раз редактировалось svoping, 02-06-2017 в 10:04. Отправлено: 09:51, 02-06-2017 | #4 |
Забанен Сообщения: 793
|
Гонять цикл в командном сценарии (а ведь задача то и подразумевает) в данном случае не самое лучшее, что можно выдумать. Берете PowerShell, натравливаете FileSystemWatcher на нужный файл и в сущности - все. Если файл был изменен, перезапускаем USB'ека через devcon. Что-то в этом роде. Время трошки освободится, напишу подробнее.
|
|
Отправлено: 10:20, 02-06-2017 | #5 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Товарищи решение на PowerShell не совсем удобно, так как парк ПК большой, и достаточно много, около 20 ПК, на которых стоит Windpws XP
|
Отправлено: 19:54, 02-06-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата svoping:
P.S. Если никак не хотите PowerShell, то, если хорошо попросите коллегу greg zakharov, он Вам сделает и отдельный исполняемый модуль с потребным функционалом. |
|
Отправлено: 22:09, 02-06-2017 | #7 |
Забанен Сообщения: 793
|
Цитата svoping:
Скрытый текст
@echo off setlocal enabledelayedexpansion set "log=D:\src\foo" :monitor call:sleep 3 call:getstamp !log! goto:monitor endlocal exit /b :getstamp for /f %%i in ("%~1") do set "ts=%%~ti" if not defined x set "x=!ts!" if /i "!ts!" equ "!x!" ( echo:same ) else ( echo:not same <nul set /p="Restarting USB device " rem сюбственно, здесь реализуется логика перезапуска set "x=!ts!" echo:[at !time:~0,-3!] . . . OK ) exit /b :sleep echo:%~1|>nul findstr /xrc:"[0-9].*"&&( if %~1 equ 0 goto:break set /a "s=%~1/2+1" w32tm /stripchart /computer:localhost /period:1^ /dataonly /samples:!s!>nul <nul set /p="Standby . . . " )||( :break rem ) exit /b В теории жонглировать USB'еками можно через WMI, а именно Win32_USBControllerDevice. Насколько помню там есть метод Reset, но вроде бы он как не реализован в ранних версиях Windows. Проверять, честно говоря, не хоцца. Так что... вектор Вам указали. Цитата Iska:
|
||
Последний раз редактировалось greg zakharov, 02-06-2017 в 22:26. Отправлено: 22:19, 02-06-2017 | #8 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать svoping,
если хотите или удобнее контролировать по дате изменения, то можно и так. В коде дата изменения файла запишется при первом запуске во временный файл и она же будет записываться и при следующих запусках, но как только поменяется - будет выведена строка "Отключаем" и удаляется временный файл (паузу в рабочем варианте можно убрать), реальное отключение думайте как сделать: @echo off call :# "errorlog.txt" pause& exit :# if exist tmp <tmp set/p dw= if not "%~t1"=="%dw%" ( echo Отключаем& pause& del tmp& exit ) else ( >tmp echo %~t1 ) exit /b минус в том что один раз вначале надо запустить, рабочий процесс будет идти со второго запуска |
Последний раз редактировалось alpap, 03-06-2017 в 12:20. Отправлено: 10:12, 03-06-2017 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Devcon. Перезапуск устройства с использованием IF и FOR | ivantresh | Скриптовые языки администрирования Windows | 2 | 04-01-2017 09:32 | |
Драйвер - Некорректно работают подключаемые устройства. По типу внешние запоминающие устройства | ScRawLeR73 | Microsoft Windows 7 | 9 | 14-04-2014 18:29 | |
Перезапуск программы | alleo | AutoIt | 9 | 21-02-2011 20:25 | |
Перезапуск Эксплорера... | FlatX007 | Хочу все знать | 19 | 28-09-2008 15:44 | |
Перезапуск, зависания. | DerZonder | Непонятные проблемы с Железом | 33 | 18-09-2007 12:38 |
|