如何通过bat导出windows已安装程序列表,并且保存为文件名为计算机名.log到指定的目录下

如何通过bat导出windows已安装程序列表,并且保存为文件名为计算机名.log到指定的目录下,第1张

@echo off & setlocal enabledelayedexpansion

title 已安装程序列表获取脚本 By 依梦琴瑶

:: 设置日志文件保存路径,不存在时会自动创建

set LogSaveDir=D:\MyLog

set UnKey=Microsoft\Windows\CurrentVersion\Uninstall

if /i "%PROCESSOR_IDENTIFIER:~,3%"=="x86" goto x86

echo 正在努力获取本机已安装程序列表,请稍后。。。

(echo Name^|^|Version^|^|Publisher^|^|InstallDate

for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>ymqy$

(for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\Wow6432Node\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

(for /f "delims=" %%i in ('reg query "HKCU\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

goto SortingList

:x86

(echo Name^|^|Version^|^|Publisher^|^|InstallDate

for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>ymqy$

(for /f "delims=" %%i in ('reg query "HKCU\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

:SortingList

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

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

if not exist "%LogSaveDir%" md "%LogSaveDir%"

(cscript //nologo //e:jscript "SortingVBS" < ymqy$)>"%LogSaveDir%\%COMPUTERNAME%Log"

del /f/q ymqy$ SortingVBS

echo 本机已安装程序列表已输出至 "%LogSaveDir%\%COMPUTERNAME%Log"

pause

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);

}

最终的效果是这样的,比WMIC多了两个详细的项目,那就是软件发布者和安装时间。

使用命令行

最最简单的方式便是使用「命令提示符」,执行如下命令即可自动统计并在 D 盘输出当前 Windows 系统中所有已安装的软件列表:

wmic /output:D:\InstalledSoftwareListtxt product get name,version

使用PowerShell

CMD 都有了,怎么能少了强大的 PowerShell 呢,在 PowerShell 中执行如下命令同样可以输出 Windows 中已经安装的应用程序清单:

Get-WmiObject -Class Win32_Product | Select-Object -Property Name > D:\InstalledSoftwareListtxt

其实上面的 PowerShell 与 CMD 的方式一样,同样是调用了 WMI 来进行输出,如果以上命令在你的系统上无法正常输出内容,可以尝试使用如下 PowerShell 命令:

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize > D:\InstalledSoftwareListtxt

使用CCleaner

对于普通个人用户来说,如果你不习惯于使用命令提示符或 PowerShell,可以使用著名的 CCleaner 来输出 Windows 已安装软件清单。

只需在打开 CCleaner 之后点击「工具」—「卸载」,在应用程序列表中右击并选择「保存为文本文件」即可导出软件列表。

使用Geek Uninstaller

使用 Geek Uninsatller 这个绿色小工具同样可以输出 Windows 中的已安装软件清单,使用时只需点击「文件」菜单中的「导出为 HTML」即可。

就使用下来看,Geek Uninstaller 的输出结果最为人性化,它不仅列出了所有软件列表,还对应用程序总数和所占磁盘空间大小进行了汇总统计。

1,第一步,打开Windows10系统,在开始菜单的应用列表中找到“控制面板”,点击进入‘控制面板’。

2,第二步,在‘控制面板’中选择‘卸载程序’选项,点击进入‘卸载程序’。

3,最后,即可在Windows10电脑中所有已经安装的应用,问题解决。

说明之前已安装过此版本或者其它版本的framework,需要先将之前的版本进行卸载,再进行安装,卸载方法参考如下:

1、单击“开始”--》“控制面板”--》“程序与功能”;

2、在已安装程序列表中,找到 NET Framework,选中后单击”卸载“;

3、下载 Windows Installer 清理实用程序:

将其重命名为“msicuu2exe”,然后右击该安装包,选择“以管理员身份运行”;

4、安装完成之后,请单击“开始”--》“所有程序”--》“Windows Install Clean Up”;

在列表中,找到所有NET Framework相关的安装条目,然后删除;

packageManagergetInstalledApplications()返回一个列表都是安装在设备上的应用程序包。如果我们把 flag GET_UNINSTALLED_PACKAGES设定,一个列表中的所有应用,包括那些设置为dont_delete_data(部分已安装的应用程序的数据目录)将返回。

你可以看到附件中的截图,我们将创建一个列表显示所有已安装的应用程序。

snippet_list_rowxml--------------------这个布局是由ListView适配器用于表示应用程序的细节。它显示应用程序图标、应用程序名称和应用程序包。

<xml version="10" encoding="utf-8"><LinearLayout xmlns:android=">

在WIN下安装的软件,都是32位的或64位的。无法在DOS下查看。

唯一可以的是,可以用DOS打开目录。比如,D盘下,有OFFICE,AUTOCAD。

那么用命令:cd d:\

dir /w

两个命令可以看到这两个软件的安装目录。

点击开始菜单,然后选择“控制面板”。

在控制面板窗口中,选择“程序和功能”选项。

在“程序和功能”窗口中,您将看到您已安装的所有程序的列表。

单击程序列表顶部的“安装日期”列,以按安装日期排序。

找到您想要查找其安装位置的程序,并查看“位置”列。如果安装在C盘,则该列中将显示“C:”。

请注意,某些程序可能没有在“位置”列中列出,这可能是因为它们不需要安装在计算机上,或者它们可能存储在系统文件夹中,因此不会显示其位置。

以上就是关于如何通过bat导出windows已安装程序列表,并且保存为文件名为计算机名.log到指定的目录下全部的内容,包括:如何通过bat导出windows已安装程序列表,并且保存为文件名为计算机名.log到指定的目录下、如何自动统计windows已安装软件清单、怎样查看WIN10系统电脑里已安装的所有应用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://www.54852.com/zz/10002842.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存