如何使用bat脚本获取电脑上所有windows服务的信息

如何使用bat脚本获取电脑上所有windows服务的信息,第1张

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::

::   获取本机服务列表  By 依梦琴瑶 2017-3-25

::

::

:: 如非必要,请勿随意修改代码,以免运行出错。

:: 尊重劳动成果,保留版权声明。

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

@echo off & setlocal enabledelayedexpansion

cd /d %~dp0 & set PROG=获取本机服务列表

if not "%~n0"=="%PROG%" move /y "%~0" "%PROG%%~x0" >nul&start "" "%PROG%%~x0"

color 0a & title %PROG% By 依梦琴瑶

echo 正在努力获取本机服务列表,请稍后。。。

(echo 显示名称^|^|^|^|服务名称^|^|^|^|描述^|^|^|^|状态^|^|^|^|启动类型^|^|^|^|登录为^|^|^|^|执行路径

for /f "tokens=2 delims=:" %%a in ('sc query state^= all ^| findstr "^SERVICE_NAME: \<STATE"') do (

    for %%c in (DISPLAY_NAME,SERVICE_NAME,DESCRIPTION,STATE,START_TYPE,SERVICE_START_NAME,BINARY_PATH_NAME) do if not defined %%c set "%%c=(无)"

    set /a Num+=1

    if !Num! equ 2 (

        echo "%%a" | findstr "RUNNING" >nul && set "STATE=已启动" || set "STATE=已停止"

        set Num=0

        echo !DISPLAY_NAME!^|^|^|^|!SERVICE_NAME!^|^|^|^|!DESCRIPTION!^|^|^|^|!STATE!^|^|^|^|!START_TYPE!^|^|^|^|!SERVICE_START_NAME!^|^|^|^|!BINARY_PATH_NAME!

    ) else (

        for /f "tokens=2 delims=:" %%b in ('sc qdescription%%a') do (

            set "DESCRIPTION=%%b"

            set "DESCRIPTION=!DESCRIPTION:~2!"

        )

        for /f "tokens=2 delims==" %%b in ('sc GetDisplayName%%a') do (

            set "DISPLAY_NAME=%%b"

            set "DISPLAY_NAME=!DISPLAY_NAME:~1!"

        )

        for /f "delims=" %%b in ('sc qc%%a ^| findstr "\<START_TYPE \<BINARY_PATH_NAME \<SERVICE_START_NAME"') do (

            set /a Cut+=1

            if !Cut! equ 3 (

                echo "%%b" | findstr /i "LocalService" >nul && set "SERVICE_START_NAME=本地服务" || (

                    echo "%%b" | findstr /i "LocalSystem" >nul && set "SERVICE_START_NAME=本地系统" || (

                        echo "%%b" | findstr /i "NetworkService" >nul && set "SERVICE_START_NAME=网络服务" || (

                            set "SERVICE_START_NAME=%%b"

                            set "SERVICE_START_NAME=!SERVICE_START_NAME:        SERVICE_START_NAME : =!"

                        )

                    )

                )

                set Cut=0

            ) else (

                if !Cut! equ 2 (

                    set "BINARY_PATH_NAME=%%b"

                    set "BINARY_PATH_NAME=!BINARY_PATH_NAME:        BINARY_PATH_NAME   : =!"

                ) else (

                    echo "%%b" | findstr "DELAYED" >nul && set "START_TYPE=自动(延迟启动)" || (

                        echo "%%b" | findstr "AUTO_START" >nul && set "START_TYPE=自动" || (

                            echo "%%b" | findstr "DEMAND_START" >nul && set "START_TYPE=手动" || set "START_TYPE=禁用"

                        )

                    )

                )

            )

        )

        set "SERVICE_NAME=%%a"

        set "SERVICE_NAME=!SERVICE_NAME:~1!"

    )

))>ymqy$

:SortingList

for /f "skip=1 tokens=1 delims=[]" %%a in ('find /n "::SortingListVBS::" "%~0"') do set Line=%%~a

more +%Line% "%~0">SortingVBS

(cscript //nologo //e:jscript "SortingVBS" < ymqy$)>"%~dp0%COMPUTERNAME%_服务列表Log"

del /f/q ymqy$ SortingVBS

cls & echo 本机服务列表已输出至 "%~dp0%COMPUTERNAME%_服务列表Log"

echo, & echo 请按任意建退出 & pause>nul

exit

::SortingListVBS::

var i = 0, arr = [], max = [];

var reg = /[^\x00-\xff]/g;

while(!WSHStdInAtEndOfStream){

    var strLine = WSHStdInReadLine();

    if(!/^\s$/test(strLine)) {

        arr[i] = strLinesplit('||');

        for(var j=0; j<arr[i]length; j++) {

            var len = arr[i][j]replace(reg, '')length;

            if(!max[j] || len > max[j]) max[j] = len;

        }

        i++;

    }

}

for(var i=0; i<arrlength; i++) {

    var s = '';

    for(var j=0; j<arr[i]length; j++) {

        var len = max[j] - arr[i][j]replace(reg, '')length;

        var space = ' ';

        for (var k=0; k<len; k++) space += ' ';

        s += arr[i][j] + space;

    }

    WScriptEcho(s);

}

迟到的回答,实在抱歉,事儿有点多。生成的列表信息保存在脚本目录下,名字为当前系统的本机名。后缀为Log。

你运行,看看符不符合你的要求。

获取路径:

TCHAR szPath[MAX_PATH];

SHGetFolderPath(NULL, CSIDL_COMMON_DOCUMENTS, NULL, SHGFP

当前用户文档路径?

不太明白什么意思,不过可以有个相对路径格式

/save/abcexe 程序所在根目录下save文件夹下的abcexe文件

/save/abceexe 程序所在上级菜单中save文件夹下的abceexe文件

可以创建文件

string sDir = 文件路径;

DirectoryInfo dinfo = new DirectoryInfo(sDir);

if (!dinfoExists)

{

dinfoCreate(); //没有则创建

}

也可以通过输入输出流往创建的文件中写入文字

以上就是关于如何使用bat脚本获取电脑上所有windows服务的信息全部的内容,包括:如何使用bat脚本获取电脑上所有windows服务的信息、windows 如何获取当前账户下我的文档的路径、C# 开发的windows 服务 不能获取当前用户的文档路径吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10056885.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存