Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Differenz von einer referenz txt per batch

Frage Entwicklung Batch & Shell

Mitglied: connecthor

connecthor (Level 1) - Jetzt verbinden

16.12.2011, aktualisiert 12:17 Uhr, 2774 Aufrufe, 12 Kommentare

guten tag an alle;

weiterführend zu meinem letzten beitrag [http://www.administrator.de/index.php?content=177735[ hätte ich nun eine frage wie ich es hinbekomme, die ausgabedatei mit einer erstellten referenzdatei zu vergleichen und den unterschied, falls vorhanden, in eine separate txt auszugeben.

FC hilft dabei nach meinen versuchen nicht, da immer die differenz aus beiden dateien geschrieben wird.

Referenzdatei wie folgt (z.b):

01.
c:\windows\certutil.exe: 	MD5:	711db2ef10b6c2ab2080698aec6c6d08 
02.
c:\windows\explorer.exe: 	MD5:	418045a93cd87a352098ab7dabe1b53e 
03.
c:\windows\hh.exe: 	MD5:	4ba83377214a999fbc9511604a924f9e 
04.
c:\windows\NOTEPAD.EXE: 	MD5:	8a29b5b5a881c6709f31ff5203f0fac9 
05.
c:\windows\regedit.exe: 	MD5:	ad9226bf3ced13636083bb9c76e9d2a2 
06.
c:\windows\robocopy.exe: 	MD5:	592be1ad0ed83c36d5e68ca7a014a510 
07.
c:\windows\TASKMAN.EXE: 	MD5:	3a0c664583a0ba6c34fab808e9021798
zu prüfende datei z.b. wie folgt:

01.
c:\windows\certutil.exe: 	MD5:	711db2ef10b6c2ab2080698aec6c6d08 
02.
c:\windows\twunk_16.exe: 	MD5:	f36a271706edd23c94956afb56981184 
03.
c:\windows\explorer.exe: 	MD5:	418045a93cd87a352098ab7dabe1b53e 
04.
c:\windows\hh.exe: 	MD5:	4ba83377214a999fbc9511604a924f9e 
05.
c:\windows\NOTEPAD.EXE: 	MD5:	8a29b5b5a881c6709f31ff5203f0fac9 
06.
c:\windows\regedit.exe: 	MD5:	ad9226bf3ced13636083bb9c76e9d2a2 
07.
c:\windows\robocopy.exe: 	MD5:	592be1ad0ed83c36d5e68ca7a014a510 
08.
c:\windows\xcacls.exe: 	MD5:	64e4a4603752801be14dc6647dd6b167 
09.
c:\windows\TASKMAN.EXE: 	MD5:	3a0c664583a0ba6c34fab808e9021798
ich möchte die 2 einträge aus der vergleichsdatei in eine datei ausgeben, aber nur die werte, die nicht in der vergleichsdatei stehen.

danke
Mitglied: cse
16.12.2011 um 12:49 Uhr
Hi,

auf die schnelle würde ich das mit SVERWEIS im Excel machen.

Überall da wo ein #NV steht hättest du dann die Werte die nicht vorhanden sind.

In dem Fall hier würde ich in der zweiten Liste eine Spalte rechts daneben machen --> Sverweis(A1;erste Liste;1;falsch).

Grüße!
Bitte warten ..
Mitglied: connecthor
16.12.2011 um 13:52 Uhr
Hi CSE,

vielen dank, aber ich ermittle die werte in eine txt, dann möchte ich die ungern in eine csv umwandlen und die se dann importieren, diese dann checken und diese dann exportieren oder so augeben das ich die dann wieder in eine txt als liste geben kann/muss.

da problem liegt eher in der vielzahl (~900) unterschiedlichen dateien die ich mit der einer referenzdatei verglichen muss.

:-\

danke

connecthor
Bitte warten ..
Mitglied: cse
16.12.2011 um 14:19 Uhr
hui,

ok 900 dateien, das ist dann schon ne hausnummer - da kann ich dir auch nicht helfen

viel erfolg
Bitte warten ..
Mitglied: bastla
16.12.2011 um 14:31 Uhr
Hallo connecthor!

Versuch es (zunächst für eine Datei) so:
01.
@echo off & setlocal 
02.
set "Ref=referenz.txt" 
03.
set "Test=test.txt" 
04.
set "Diff=diff.txt" 
05.
 
06.
del "%Diff%" 2>nul 
07.
set "Header=### Nicht wie in Referenz:" 
08.
for /f "usebackq delims=" %%i in ("%Test%") do findstr /x /c:"%%i" "%Ref%">nul || ( 
09.
    if defined Header echo %Header% 
10.
    set "Header=" 
11.
    echo %%i 
12.
)>>"%Diff%" 
13.
set "Header=### Fehlend:" 
14.
for /f "usebackq" %%i in ("%Ref%") do findstr /b /c:"%%i" "%Test%">nul || ( 
15.
    if defined Header echo %Header% 
16.
    set "Header=" 
17.
    echo %%i 
18.
)>>"%Diff%"
Soll für die 900 Dateien eine Gesamtdatei mit den Abweichungen oder jeweils eine eigene Differenzdatei erstellt werden, und welche Information(en) soll(en) enthalten sein?

Außerdem: Wenn es nur um MD5-Hashes gehen sollte, könnte vielleicht "fciv" oder ein anderes Commandline-MD5-Tool die bessere Wahl sein ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
19.12.2011 um 18:41 Uhr
moin,

@bastla
sollte es nicht genügen den Ausdruck mit Findstr rauszufiltern?

Das einzige was in die zu Durchsuchende Datei muss ist ein abschliessender Linefeed.
01.
@echo off &setlocal 
02.
 
03.
set "Ref=D:\testa" 
04.
set "Test=D:\testb" 
05.
set "Diff=D:\diff" 
06.
 
07.
:: nur Fehlenden LineFeed setzen 
08.
for /f %%i in ('findstr /n "^" "%Test%"^|find /c ":"') do for /f %%j in ('^(findstr /n "^" "%Test%"^&echo :^)^|find /c ":"') do if %%i == %%j (set "LineFeed=") else set "LineFeed=>nul" 
09.
>>"%Test%" %LineFeed% echo( 
10.
 
11.
>"%Diff%" findstr /v /l /g:"%Ref%" "%Test%"
Gruß Phil
Bitte warten ..
Mitglied: bastla
19.12.2011 um 19:24 Uhr
@PH
sollte es nicht genügen den Ausdruck mit Findstr rauszufiltern?
Grundsätzlich ja - allerdings brauchst Dein Ansatz zwei verschachtelte Schleifen ...

Abgesehen davon ist aber weiterhin die Frage offen, was als Ergebnis gewünscht wird (nicht zuletzt auch hinsichtlich jener Zeilen der Referenzdatei, zu denen es in der Testdatei keine Entsprechung gibt) ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
20.12.2011 um 11:40 Uhr
moin bastla,

ja eigentlich wollte ich nur mit den zwei Schleifchen auf den Fehlenden Linefeed testen.
more fügt zwar auch einen fehlenden LF an die Ausgabe - aber leider entfernt er auch alle Tabs. Somit stimmt die OriginalZeile nicht mehr mit der Überprüfenden Zeile überein.
Bleibt nur noch find/v "" <datei um den fehlenden LF ohne große Umwege zu erzeugen.
01.
@echo off &setlocal 
02.
 
03.
set "Ref=D:\testa" 
04.
set "Test=D:\testb" 
05.
set "Diff=D:\diff" 
06.
 
07.
find /v "" < "%Test%" |findstr /v /l /g:"%Ref%" >"%Diff%" 
[Edit]
Ach Käse. Die Befehlverkettung fügt auch bei type und findstr usw. also immer einen LineFeed an.
schäm ...
Aber eine Einfacherere Art um auf LF am Ende zu Testen habe ich dafür gefunden.
01.
findstr /v /l /g:Datei Datei 1>nul && echo KEIN LF am Ende.||echo LF ist am Ende.
[Edit]

Gruß Phil
Bitte warten ..
Mitglied: connecthor
20.12.2011 um 13:15 Uhr
Hallo Bastla & Phil,

nicht das das hier in ein wildes haare-ziehen-und-beissen ausartet.

erst einmal vielen dank für eure hilfe/vorschläge.

grund meiner fragestellung ist:

firma ~900 rechner; einmal in der woche sollen von allen rechnern die md5 werte der .EXE dateien auf dem gesamten system ermittelt werden und mit denen in einer referenzdatei hinterlegten werten verglichen werden. die werde die nicht übereinstimmen sollen dann in eine z.b. RECHNERNAME-DIFF.TXT geschrieben werden.

natürlich ist das schwierig, da die wöchentlichen werte in eine verzeichniss laufen und ALLE dateien mit der referenz verglichen und die unterschiede dann auch ich jeweils eine NEUE datei geschrieben werden sollen..

z.z. würde ich dass dann irgendwie händisch machen müssen...

bin also für vorschläge die mir die arbeit vereinfachen SEHR offen

danke
Bitte warten ..
Mitglied: pieh-ejdsch
20.12.2011 um 21:00 Uhr
Hallo connecthor,

wenn die Diffs wieder in den Selben Ornder sollen könnten ja auch gleich die wöchentlichen Vergleichsdateien gelöscht werden.
Gibt es da Pro Rechnername eine Referenzdatei (Rechnername-Ref.txt)? Im selben/anderen Verzeichnis?
Wie holst Du denn die Vergleichsdaten von den Maschinen ab? Vllt kann in diesem Prozedere gleich der Diifferenzialwert ausgegeben in eine *-diff.txt erstellt werden.

Gruß Phil
Bitte warten ..
Mitglied: connecthor
21.12.2011 um 08:28 Uhr
guten morgen, moin phil.

wie gaaaaanz oben beschrieben werden die werte per SIGCHECK von sysinternals ausgelesen. und ja, pro pc eine datei in einem bestimmten ordner( auf nem netzlaufwerk). von mir aus geht natürlich auch ein sortieren schon "am pc". wenn das mit dem vergleich klappt hätte ich das bestimmt irgendwann schon umgebaut.

danke und noch einen schönen tag
Bitte warten ..
Mitglied: pieh-ejdsch
21.12.2011 um 16:07 Uhr
moin
Ich meinte mit Wie ... - ob auf den Rechnern ausgeführt oder Zentral und Deine sigcheck Zeile

hier ist es pro Maschine
01.
@echo off &setlocal 
02.
 
03.
set "RefFile=X:\Sigchecks\%Computername%-RefF.txt" 
04.
set "DifFile=X:\Sigchecks\%computername%-Diff.txt" 
05.
 
06.
set "l=" 
07.
 
08.
> "%DifFile%" cmd /von /c"(for /f "delims=" %%i in (' sigcheck.exe /h /q "%windir%\*.exe" ^|findstr "\ 5:" ') do @if not defined l (set "l=1"& <nul set/p="%%i ") else (set "l=" & echo %%i))" |findstr /v /l /g:"%RefFile%"
Gruß Phil
Bitte warten ..
Mitglied: connecthor
22.12.2011 um 16:12 Uhr
hi phil, danke für die schnelle antwort. die daten sollen per logon-script gelesen werden. ich werde deinen vorschlag testen ... aber erst im nächsten jahr. bis dahin wünsche ich euch allen ein gesegnetes und beschehrungsreiches weihnachtsfest und einen gesunden rutsch... na ja, bei dem wetter werden wir wohl laufen müssen
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...