Jump to content

batch findstr %errorlevel%


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar
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

Link zu diesem Kommentar

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?

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...