К сожалению
проблема переводов 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 ERRORLEVEL=%ERRORLEVEL%
Pause
_IsProc.cmd
Код:
@Echo off
chcp 1252>nul
set f2=STATUS eq not responding
tasklist /fi "%f2%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 goto :GetPIDExit
set f2=Состояние eq not responding
tasklist /fi "%f2%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 goto :GetPIDExit
chcp 1251>nul
set f2=STATUS eq not responding
tasklist /fi "%f2%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 goto :GetPIDExit
set f2=Состояние eq not responding
tasklist /fi "%f2%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 goto :GetPIDExit
chcp 866>nul
set f2=STATUS eq not responding
tasklist /fi "%f2%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 goto :GetPIDExit
set f2=Состояние eq not responding
tasklist /fi "%f2%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 goto :GetPIDExit
chcp 1251>nul
set f1e=IMAGENAME eq %1%
tasklist /fi "%f1e%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 exit /b 0
set f1r=Имя образа eq %1%
tasklist /fi "%f1r%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 exit /b 0
chcp 1252>nul
set f1e=IMAGENAME eq %1%
tasklist /fi "%f1e%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 exit /b 0
set f1r=Имя образа eq %1%
tasklist /fi "%f1r%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 exit /b 0
chcp 866>nul
set f1e=IMAGENAME eq %1%
tasklist /fi "%f1e%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 exit /b 0
set f1r=Имя образа eq %1%
tasklist /fi "%f1r%" /fo table /nh | find /i "%1%">nul
if %ERRORLEVEL%==0 exit /b 0
exit /b -1
:GetPIDExit
set /a zPID=0
set f1e=IMAGENAME eq %1%
set f1r=Имя образа eq %1%
for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1e%" /FI "%f2%"') do (set /a zPID=%%i)
if %zPID%==0 (for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1r%" /FI "%f2%"') do (set /a zPID=%%i))
if %zPID%==0 (
chcp 1252
set f1e=IMAGENAME eq %1%
set f1r=Имя образа eq %1%
for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1e%" /FI "%f2%"') do (set /a zPID=%%i)
if %zPID%==0 (for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1r%" /FI "%f2%"') do (set /a zPID=%%i))
)
if %zPID%==0 (
chcp 1251
set f1e=IMAGENAME eq %1%
set f1r=Имя образа eq %1%
for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1e%" /FI "%f2%"') do (set /a zPID=%%i)
if %zPID%==0 (for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1r%" /FI "%f2%"') do (set /a zPID=%%i))
)
if %zPID%==0 (
chcp 866
set f1e=IMAGENAME eq %1%
set f1r=Имя образа eq %1%
for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1e%" /FI "%f2%"') do (set /a zPID=%%i)
if %zPID%==0 (for /f "skip=3 tokens=2 delims= " %%i in ('tasklist /FI "%f1r%" /FI "%f2%"') do (set /a zPID=%%i))
)
exit /b %zPID%