
@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系统电脑里已安装的所有应用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)