[BATCH] Skrypt listujący pliki exe i dll i ich wersje z folderu i podfolderów


(Michal Postek) #1

Witam, udało mi się napisać coś takiego, niestety szukam i nie mogę za bardzo połączyć to co znalazłem, a doświadczenia w kwestii skryptów batchowych nie mam. Szukam skryptu batch który po uruchomieniu wypluje mi listę z plikami z katalogu w którym plik został uruchomiony i z podkatalogów w tym katalogu, a także wyświetli wersję dla każdego z nich. Udało mi się napisać jak dotąd (co nie jest żadnym wyczynem, zdaje sobie sprawę):

@ECHO OFF
for /R %%f in (*) do echo %%f
PAUSE

Co daje efekt:

 

post-104167-0-34516100-1416398989_thumb.

 

Gdzieś obok, w tej samej linijce chciałbym uzyskać wersję danego pliku, posiadam Windows 7 i na tej wersji będę uruchamiał ten skrypt.

Proszę o pomoc, z góry dziękuję i pozdrawiam :slight_smile:


(Grzelix) #2

http://support.microsoft.com/kb/913111/en-us


(Michal Postek) #3

Zapomniałem napisać, że chodzi o Windows 7.


(Grzelix) #4
@echo off
setlocal disableDelayedExpansion
set "root=%cd%"
set "output=output.txt"

set "tempFile=%temp%\dir_ts_%random%.txt"
(
  for /r "%root%" %%F in (.) do (
    set "folder=%%~pnxF\"
    set "drive=%%~dF"
    setlocal enableDelayedExpansion
    2>nul wmic datafile where "drive='!drive!' and path='!folder:\=\\!' AND Extension='dll'" get name, version
    endlocal
  )
) >"%tempFile%
sort "%tempFile%" >"%output%"
del "%tempFile%"

type "%output%"

Spróbuj z tym kodem.


(Michal Postek) #5

Dziękuję bardzo. Hm, działa tylko dla DLL, co z reszta wynika z kodu, jak dodać obsługę EXE? 


(Grzelix) #6
@echo off
setlocal disableDelayedExpansion
set "root=%cd%"
set "output=output.txt"

(
  for /r "%root%" %%F in (.) do (
    set "folder=%%~pnxF\"
    set "drive=%%~dF"
    setlocal enableDelayedExpansion
    2>nul wmic datafile where "drive='!drive!' and path='!folder:\=\\!' AND (Extension='dll' OR Extension='exe')" get name, version
    endlocal
  )
) > "%output%"

type "%output%"

(Michal Postek) #7

Dzięki serdeczne :slight_smile: Działa jak należy. 

W międzyczasie napisałem sobie na szybko w C# taki kod, może komuś się przyda:

 

 

Kod jest trywialny, napisany na szybko, ale działa :) 


(Grzelix) #8

Trzeba było mówić, że w C# może być.