已安装软件的批处理文件

时间:2016-08-22 14:29:52

标签: batch-file

我刚接触批处理的新手。我同意从网站上无耻地取消此代码。这是我想要显示已安装软件列表的代码,但只有一个问题,版本和软件显示在不同的行中。我怎么能同时拥有两条线?

例如:如果您运行批处理,您将看到开头的版本,然后是软件。

非常感谢任何帮助。提前谢谢。

@echo off
If Exist C:\Final.txt Del C:\Final.txt
regedit /e C:\regexport.txt "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall"
regedit /e C:\regexport2.txt "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall"
regedit /e C:\regexport3.txt "HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
find "DisplayName" C:\regexport.txt > C:\regprogs.txt
find "DisplayName" C:\regexport2.txt >> C:\regprogs.txt
find "DisplayName" C:\regexport3.txt >> C:\regprogs.txt
for /f "tokens=2 delims==" %%a in (C:\regprogs.txt) do echo %%~a >> C:\installedprogs.txt

find "DisplayVersion" C:\regexport.txt > C:\regprogs.txt
find "DisplayVersion" C:\regexport2.txt >> C:\regprogs.txt
find "DisplayVersion" C:\regexport3.txt >> C:\regprogs.txt
for /f "tokens=2 delims==" %%a in (C:\regprogs.txt) do echo %%~a >> C:\installedprogs.txt

del C:\regexport.txt
del C:\regexport2.txt
del C:\regexport3.txt
del C:\regprogs.txt
sort C:\installedprogs.txt > C:\alles.txt
del C:\installedprogs.txt


:: script om alle dubbele lijnen eruit te gooien
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL EnABLEDELAYEDEXPANSION

REM -- Prepare the Prompt for easy debugging -- restore with prompt=$p$g
prompt=$g

rem The finished program will remove duplicates lines

:START
set "_duplicates=TRUE"

set "_infile=C:\alles.txt"
set                        "_oldstr=the"
set                                    "_newstr=and"

call :BATCHSUBSTITUTE %_infile% %_oldstr% %_newstr% 
pause
goto :SHOWINTELL
goto :eof


:BATCHSUBSTITUTE

type nul> %TEMP%.\TEMP.DAT

if "%~2"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %1|find /n /v """') do (
    set "_line=%%B"
    if defined _line (
        if "%_duplicates%"=="TRUE" (
            set "_unconverted=!_line!"
            set "_converted=!_line:"=""!"
            FIND "!_converted!" %TEMP%.\TEMP.DAT > nul
            if errorlevel==1 (
                >> %TEMP%.\TEMP.DAT echo !_unconverted!
            )
        ) 
    ) ELSE (
        echo(>> %TEMP%.\TEMP.DAT
    )
)
goto :eof


:SHOWINTELL
@echo A|move %TEMP%.\TEMP.DAT C:\allesnietdubbel.txt
del C:\alles.txt

::Alle lijnen weggooien waar 'KB' in voor komt
type C:\allesnietdubbel.txt | findstr /V KB > C:\drivers\Final.txt
goto :eof



exit

1 个答案:

答案 0 :(得分:0)

尝试下一步方法。 已修改 - 将输出保存到csv文件(rfc4180 compliant)

@ECHO OFF 
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_csvfile=%TEMP%\%COMPUTERNAME%_39082171.csv" change to match your needs
> "%_csvfile%" (
      rem (facultative, optional) CSV header
  echo "version","displayname","comment"
  call :getsw "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall"
  call :getsw "HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall"
  call :getsw "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
)
ENDLOCAL
goto :eof

:getsw
for /F "delims=" %%g in ('reg query "%~1" 2^>NUL') do (
    set "_swRegKey=%%~g"
    set "_swName="
    set "_swVers="
    for /F "tokens=1,2,*" %%G in ('
      reg query "%%~g" /V DisplayName 2^>NUL ^| findstr /I "DisplayName"
                                  ') do set "_swName=%%~I" 
    for /F "tokens=1,2,*" %%G in ('
      reg query "%%~g" /V DisplayVersion 2^>NUL ^| findstr /I "DisplayVersion"
                                  ') do set "_swVers=%%~I"
    call :echosw 
) 
goto :eof

:echosw
  SETLOCAL EnableDelayedExpansion
    if "%_swName%%_swVers%"=="" (
        rem comment up next ECHO command if you don't require such information 
        ECHO "","","unknown !_swRegKey:HKEY_LOCAL_MACHINE=HKLM!"
    ) else (
        echo "!_swVers!","!_swName!",""
    )
  ENDLOCAL
goto :eof

示例输出(在此大大缩小以进行演示):

==> D:\bat\SO\39082171.bat

==> type "%TEMP%\%COMPUTERNAME%_39082171.csv"|findstr /I "comment KB unknown"
"version","displayname","comment"
"","","unknown HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager"
"12.0.31101","Visual Studio 2013 Update 4 (KB2829760)",""
"12.0.30112","Update for Microsoft Visual Studio 2013 (KB2932965)",""
"1","Update for  (KB2504637)",""

==>

资源(必读):