Jump to content
Sign in to follow this  
krumvn

batch findstr %errorlevel%

Recommended Posts

Hallo zusammen,

 

ich erstelle gerade eine batch-Datei, die die Aufgabe hat, zwei Verzeichnissstrukturen zu vergleichen. Ich suche die beiden Verzeichnisse rekursiv durch, dann werden die Namen der Dateien+Verzeichnisse in 1.txt und 2.txt gespeichert.

Z.B 1.txt

\Documents and Settings\user\Desktop\testverzeichnis\test\1.exe

\Documents and Settings\user\Desktop\testverzeichnis\test\3_3_.dbd

\Documents and Settings\user\Desktop\testverzeichnis\test\4_8.dll

\Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 3_3_.dbd

\Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 4_8.dll

\Documents and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd

 

und 2.txt (identisch)

 

\Documents and Settings\user\Desktop\testverzeichnis\test\1.exe

\\Documents and Settings\user\Desktop\testverzeichnis\test\3_3_.dbd

\Documents and Settings\user\Desktop\testverzeichnis\test\4_8.dll

\Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 3_3_.dbd

\Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 4_8.dll

\Documents and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd

 

und jetzt das Problem:

 

wenn ich die Dateien 1.txt und 2.txt zeilenweise vergleiche:

.....

:COMPARE
set "Arg1=struct.SOLL.txt"
set "Arg2=struct.IST.txt"
            set "COMPARE=1vs2.txt"
for /f "usebackq delims==" %%f in (%Arg1%) do call:Processline "%%f"
goto:EOF

:Processline
set "var1=%~1"
if -compare EQU %var1% (goto:COMPARE)
if struct.IST EQU %var1% (goto:EOF)
findstr /b /e /c:"%var1%" "%Arg2%">nul
if %ERRORLEVEL% EQU 0 (echo +from %Arg1% ... %var1% found in %Arg2% >>%COMPARE%) else (echo %ERR_LEV% %ERRORLEVEL% ! %Arg1% --- %Arg2% %var1% from %Arg1% not found in %Arg2% >> %COMPARE%)

goto:EOF

 

dann bekommen ich in 1vs2.txt folgendes:

 

from struct.SOLL ... \Documents and Settings\user\Desktop\testverzeichnis\test\1.exe found in struct.IST

from struct.SOLL ... \Documents and Settings tings\user\Desktop\testverzeichnis\test\3_3_.dbd found in struct.IST

from struct.SOLL ... \Documents and Settings\user\Desktop\testverzeichnis\test\4_8.dll found in struct.IST

from struct.SOLL ... \Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 3_3_.dbd found in struct.IST

from struct.SOLL ... \Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 4_8.dll found in struct.IST

1 ! struct.SOLL --- struct.IST \Documents and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd from struct.SOLL not found in struct.IST

from struct.IST ... \Documents and Settings\user\Desktop\testverzeichnis\test\1.exe found in struct.SOLL

from struct.IST ... \Documents and Settings\user\Desktop\testverzeichnis\test\3_3_.dbd found in struct.SOLL

from struct.IST ... \Documents and Settings\user\Desktop\testverzeichnis\test\4_8.dll found in struct.SOLL

from struct.IST ... \Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 3_3_.dbd found in struct.SOLL

from struct.IST ... \Documents and Settings\user\Desktop\testverzeichnis\test\Kopie von 4_8.dll found in struct.SOLL

1 ! struct.IST --- struct.SOLL \Documents and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd from struct.IST not found in struct.SOLL

 

d.h dass die letzte Zeile in beiden Dateien nicht richtig verglichen werden kann (wahrscheinlich wg. "\_")

 

Wie kann ich die Sonderzeichen umgehen und endlich die Zeilen auf Gleichheit prüfen? :confused:

 

MfG

Krum

Share this post


Link to post

Du kannst %Errorlevel% immer nur 1x abfragen. Den Inhalt also vorher in eine andere Variable speichern.

 

-Zahni

Share this post


Link to post
Du kannst %Errorlevel% immer nur 1x abfragen. Den Inhalt also vorher in eine andere Variable speichern.

 

-Zahni

 

Hi Zahni,

 

da liegt aber mein Problem nicht, sondern, dass findstr %ERRORLEVEL% ungleich 0 liefert, trotz Trefer und zwar genau wenn die Zeichenkmbination "\_" in \Documents and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd exsistiert.

z.B

set "string1=\Documents and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd"

set "string2=\Documents and Settings\user\Desktop\testverzeichnis\test\4_8.dll"

REM in datei.txt gibt es 2 Zeilen: 
REM \Documents and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd
REM \Documents and Settings\user\Desktop\testverzeichnis\test\4_8.dll

set datei=datei.txt

findstr /c:"%string1%" "%datei%"
echo %ERRORLEVEL%
findstr /c:"%string2%" "%datei%"
echo %ERRORLEVEL%

 

Output ist:

C:\Documents and Settings\user\Desktop\testverzeichnis>findstr /c:"\Document

s and Settings\user\Desktop\testverzeichnis\test\blabla\_shell.pyd" "datei.txt"

 

 

C:\Documents and Settings\user\Desktop\testverzeichnis>echo 1

1

 

C:\Documents and Settings\user\Desktop\testverzeichnis>findstr /c:"\Document

s and Settings\user\Desktop\testverzeichnis\test\4_8.dll" "datei.txt"

\Documents and Settings\user\Desktop\testverzeichnis\test\4_8.dll

C:\Documents and Settings\malikrrw\Desktop\testverzeichnis>echo 0

 

 

Was kann ich machen damit findstr alles richtig macht???:confused:

 

Auf jeden Vorschlag würde ich mich freuen.

 

MfG

krum

Share this post


Link to post

Hab grad mal damit rumgespielt...

Wenn da ...\blabla\\_shell... gesucht wird, findet er ...\blabla\_shell... in der Textdatei.

Leider hilft keiner der Findstr-Parameter, um das zu umgehen :(

 

"Irgendwie" vorher solche Kombinationen zu ersetzen, wenn man nicht weiß, was es da noch alles gibt, ist auch schwierig...

 

Evtl. das Script auf Powershell oder VBS umschreiben?

Share this post


Link to post

Hallo nochmal :),

 

also danke für die Rückmeldung.

 

Ich habe mich entschlossen die Zeichenkombination zu ersetzen.

 

Also falls der ERRORLEVEl von findstr nicht gleich 0 ist, baue ich ein "Filter", falls ERRORLEVEL wg. Sonderzeichen != 0, ersetze ich "/_" mit "/"


set string1=%string1_1:\_=\%

REM wenn string1 != string1_1 heisst es: Änderung ist vorgenommen,
REM geänderte string wird in einer tmp-datei gespeichert

if %string5% NEQ %string1_1% (echo %string1_1%>>tmp.txt) else (echo Findstr hat es richtig gemacht)

REM da bei mir zwei tmp-dateien sind und jetzt mit sauberen Inhalt
REM (o. Sonderzeichen) kann ich die nochmal mit findstr durchsuchen
REM und richtig auswerten)

 

Das alles funktioniert momentan, aber im Dauer soll ich was shlaueres rausfinden.

 

Also Danke nochmal!

 

MfG

Krum

Share this post


Link to post
Was ist denn dein Ziel? Evtl. kann man das anderst lösen.

 

Mein Ziel ist zwei Textdateien zeilenweise* zu vergleichen und die unterschiedliche Zeilen mit Erläuterung in dritte datei zu speichern.

 

*z.B.

 

text1 text2

a b

b d

c a

d z

e

f

 

text 3

e von text1 nich gefunden in text2

f von text1 nich gefunden in text2

c von text1 nich gefunden in text2

z von text2 nich gefunden in text1

 

Ich hoffe so ist mein ziel klar.

LG

Krum

Share this post


Link to post

Wie kommen die Daten in die Textfiles?

 

Sind da 2 Verzeichnisbäume zu vergleichen oder wurden diese an verschiedenen Zeiten aufgezeichnet?

 

Ich würden mir das ganze unter PS oder VBS anschauen.

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...