2016-08-22 3 views
0

Я очень новичок в том, что вы только что узнали. Я согласен с тем, что бесстыдно снял этот код с веб-сайта. Это код, который я хочу для отображения списка установленного программного обеспечения, но есть только одна проблема: версия и программное обеспечение отображаются в разных строках. Как я могу взять оба в одной строке?Пакетный файл для установленного программного обеспечения

Ex: Если вы запустите пакет, вы увидите версии в начале и затем в программном обеспечении.

Любая помощь была бы принята с благодарностью. Заранее спасибо.

@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 
+2

Если вы «новичок в пакет ", тогда вам будет лучше не изучать его прямо сейчас - Microsoft перешла к этому 30-летнему языку, и рекомендуемая среда для сценариев в Windows теперь - PowerShell. Чтобы найти установленное программное обеспечение, класс WMI ['Win32_Product' - это то, что вы хотите посмотреть] (https://blogs.technet.microsoft.com/heyscriptingguy/2011/11/13/use-powershell-to-quickly-find -install-software /), по крайней мере, для начала. – alroc

+0

Спасибо alroc, я знаю, что PS хорош, но я близок к тому, чтобы найти то, что я хочу, поэтому я настаиваю на этом. - Я также прочитал, что класс WMI не отображает все установленные программные средства. Это делают только записи в реестре. – SS97

ответ

0

Попробуйте следующий подход. Edited - сохраняет вывод в 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)","" 

==> 

Ресурсы (обязательное чтение):

+0

Удивительный, вы, сэр, гений. – SS97

+0

У меня только один вопрос, и мне хорошо идти. Мне нужно сохранить это как вывод в файле csv. Я пробовал это, но хорошо, мой статус новичка не помог chdir> C: \ drivers: \% COMPUTERNAME% .csv. Идея состоит в том, чтобы сохранить вывод в файл csv с именем computername. И спасибо за ссылки. Я прочитаю и немного поучусь. – SS97

+0

@SiddharthSheshadri ответ обновлен. Если бы мой ответ был полезным, пожалуйста, подумайте о его маркировке. [См. Эту страницу] (http://meta.stackexchange.com/questions/5234/) для объяснения того, почему это важно. – JosefZ

Смежные вопросы