ComradG
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Может кто сталкивался с подобным: как показать только необходимые значения реестра из запроса reg query. Лично мне надумалось только это: Код: @echo off setlocal for /f "skip=2 tokens=1,2,*" %%i in ('2^>nul reg query^ hklm\hardware\description\system\centralprocessor\0') do ( if %%i==ProcessorNameString ( set proc=%%k ) if %%i==Identifier ( set idnt=%%k ) if %%i==~MHz ( set /a tact=%%k ) if %%i==VendorIdentifier ( set vend=%%k ) ) echo. echo CPU: %proc% echo Extend: %idnt% echo MHz: %tact% echo Vendor: %vend% endlocal exit /b | Надеюсь не нужно объяснять, что for изначально отбрасывает часть значений вывода reg query, а с помощью оператора if находятся те ключи, которые удовлетворяют запросу. Да! Я пытаюсь решить с помощью батника одну, казалось бы простую задачу: вывести на экран консоли список всех .NET-процессов. Ковыряние wmic не принесло никаких результатов. Может я чего пропустил, ткните носом, пожалуйста. А вот на счет того, чтобы из батника использовать PS, идея похоже обречена в зародыше: те кто сидит под XP и Vista особо не парятся с его установкой. Хотя как удобно и просто было бы подобное реализовать с помощью командлета Get-WmiObject. Как итог, я решил провернуть, как кто-то говорил ранее, извращение со встроенными компиляторами самоий .NET: Код: @echo off setlocal 1>%~dp0app.vb ( echo Imports System echo Imports System.Diagnostics echo. echo Module NETLister echo Sub Main^(^) echo Dim clr As PerformanceCounterCategory = New PerformanceCounterCategory^(".NET CLR Memory"^) echo. echo For Each process As String In clr.GetInstanceNames^(^) echo If ^(process ^<^> "_Global_"^) echo Console.WriteLine^(process^) echo End If echo Next echo. echo End Sub echo End Module ) %systemroot%\microsoft.net\framework\v2.0.50727\vbc.exe /nologo /t:exe /out:%~dp0app.exe %~dp0app.vb start /b %~dp0app.exe del /f /q %~dp0app.vb endlocal exit /b | По поводу вопросов "А нафига на Васике?" или "А нафига вообще это нужно?" - во-первых, не все ли равно на каком языке, во-вторых, предложите альтернативы, тогда посмотрим. Еще раз повторюсь, что задача состояла втом, чтобы получить список .NET-процессов из самой консоли, а иного способа я пока что не нашел. Ну и последняя идея, которая у меня появилась вчера: как в пакетном режиме управлять процессами системы. Пользоваться хромоногим tasklist не очень-то удобно, ровно как и его собратом taskkill. Нужно было чего-то помощнее. Те, кто работал хоть раз в никсах, наверное, знает про ps (не путать с виндовым PowerShell'ом). В системе у меня всегда установлены Debugging Tools, в дистрибутив которой помимо отладчиков входят две крутые тулзы tlist и kill. Вот я и подумал их скрестить: Код: @echo off setlocal if /i "%1"=="" goto:help if /i "%1"=="/?" goto:help if /i "%1"=="/k" goto:kill if /i "%1"=="/t" goto:list goto:eof :help echo /t - print task list echo /k - kill process goto:eof :kill if "%2"=="" goto:eof 1>nul "%programfiles%\debugging tools\kill" -f %2 echo %2 killed. goto:eof :list "%programfiles%\debugging tools\tlist" -t goto:eof endlocal exit /b | Полные установочные пути Debugging Tools по умолчанию я не помню, у меня же они установлены в D:\tools. Так вот, если батник назвать ps, то процессами можно рулить намного быстрее. В общем предложения, брань (если она оправдана) и прочее рассматриваются Кто чего предложит. P.S>res2001 я начал разбирать windiws-1251. |