![]() |
tasklist "Фильтр не опознан" или "Трудности перевода"
Существует проблема перевода Windows
который критично влияет на выполнение команды tasklist на разных виндах. Написал код, чтобы наверняка определяла есть зависшие процессы или нет. Проблема в том, что батник опрашивает 3 раза (по 3 кодовым страницам) на английском и русском итого 6 раз. А tasklist отрабатывает не быстро... Как можно заранее перед запуском tasklist определить кодовую страницу на которую переведен windows и язык, чтоб не вызывать лишние 5 раз tasklist ? Как лучше поправить этот код? Вызов.bat Код:
call _NoProc notepad.exe Код:
@Echo off |
Для кодовых страниц:
Код:
@ECHO OFF |
Georgio - спасибо за решение, но видимо кодовая страница в другом месте Windows... где-нибудь в реестре
На русифицированном XP x64 выдает Кодовая страница 866 и дальше 2 раза "Фильтр поиска не опознан" Но если я запущу с кодовой страницей 1252 то зависший процесс найдется. Отреагирует на 1-ю строку "STATUS eq not responding" кодовой страницы 1252, хотя текущую (по FOR /F "tokens=2 delims=:" %%I IN ('CHCP') DO SET /A CP=%%I) покажет 866. |
awkozlov, я об этом тоже думал и знаю, где она в реестре. Надо только всё сопоставить. Буду думать дальше.
|
К сожалению проблема переводов Windows осталась не решенной, но я пока, кривовато правда, но надежно) усовершенствовал код.
Теперь возвращает >0 =процесс есть и не отвечает (возвращает ID-процесса (PID) для последующего его убийства и перезапуска) 0 = процесс есть и работает -1 = процесса нет Не возражаю если сделаете покрасивее ) В частности хотелось бы заменить for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f11%" /FI "%f2%"') do (set /a zPID=%%i) на for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f2%" | find /i "%1%") do (set /a zPID=%%i) это повысило бы надежность, но почему-то FIND в for не работает... Вызов.cmd Код:
call _IsProc notepad.exe Код:
@Echo off |
awkozlov, удивительно, но я тоже тоже сегодня думал о подобном анализе. Посмотрю обязательно. Кстати, уже вижу, почему не работает цикл, -- нужно зкранировать "|": "^|".
|
Georgio, что-то не вяжется у меня с экранизацией в цикле
Так работает for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f2%"') do (set /a zPID=%%i) А так нет for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f2%" | find /i "%1%"') do (set /a zPID=%%i) for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f2%" ^| find /i "%1%"') do (set /a zPID=%%i) for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f2%" ^| find /i "%1%"^') do (set /a zPID=%%i) for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f2%" | find /i "%1%"^') do (set /a zPID=%%i) просто закрывает cmd |
awkozlov, вот так:
Код:
for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f2%" ^| find /i "%1"') do (set /a zPID=%%i) |
Сделал в пару строк. Как-то так.
Правда хотелось бы поизящнее, без использования файла tmp_IsTk.txt двойным поиском в FOR for /f "skip=2 tokens=2 delims= " %%i in ('tasklist /v ^| find /i "%1" ^& ^| find /i "Running"') do (set /a zPID=0) for /f "skip=2 tokens=2 delims= " %%i in ('tasklist /v ^| find /i "%1" ^& ^| find /i "not responding"') do (set /a zPID=%%i) но пишет "Непредвиденное появление: |." Вызов.cmd Код:
call _IsTask notepad.exe Код:
@Echo off |
Столкнулся с непонятной проблемой - на Windows 7 команда работает, на Windows XP пишет, что фильтр поиска не опознан. Как исправить ошибку на XP?
Код:
tasklist /fi "username eq %username%" Код:
tasklist /fi "Пользователь eq %username%" |
awkozlov,
Позвольте поинтересоваться, что мешает переменной %zPID% стать нулем в строке Цитата:
Цитата:
Код:
for /f "skip=2 tokens=2 delims= " %%i in ('tasklist /v ^| find /i "%1" ^| find /i "not responding"') do (set /a zPID=%%i) |
Время: 11:03. |
Время: 11:03.
© OSzone.net 2001-