Findstr Befehl modifizieren
Hallo alle zusammen,
ich habe leider ein Problem und finde einfach keine Lösung im Internet. Ich bin mal gespannt, ob mir hier jemand weiterhelfen kann.
Inhalt meines Ordners Motive
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
Datei-Inhalt index.txt
1.txt
2.txt
3.txt
Mein Skript soll folgende Arbeit erledigen:
Nun möchte ich die index.txt mit dem Motive-Ordner abgleichen. -> Wenn eine Datei aus Ordner Motive nicht in der index.txt vorhanden ist, soll diese in ergebnis.txt ausgegeben werden. Ich habe hier im Forum bereits einiges darüber gefunden, aber irgendwie macht mein Skript nicht das was es soll:
Inhalt ergebnis.txt
c:\test\motive\1.txt
c:\test\motive\2.txt
c:\test\motive\3.txt
c:\test\motive\4.txt
c:\test\motive\5.txt
c:\test\motive\6.txt
Richtig wäre:
c:\test\motive\4.txt
c:\test\motive\5.txt
c:\test\motive\6.txt
Das kleine Skript was ich einsetze baut sich wie folgt auf:
)
)
Hat jemand eine Idee von euch? Ich bin so langsam wirklich durch mit den Nerven. Ich möchte es nur ungern in VB programmieren, wenn es auch mit Boardmittel geht.
Ich bin für jede Anregung oder Hinweise dankbar!!!
LG
Tommy
ich habe leider ein Problem und finde einfach keine Lösung im Internet. Ich bin mal gespannt, ob mir hier jemand weiterhelfen kann.
Inhalt meines Ordners Motive
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
Datei-Inhalt index.txt
1.txt
2.txt
3.txt
Mein Skript soll folgende Arbeit erledigen:
Nun möchte ich die index.txt mit dem Motive-Ordner abgleichen. -> Wenn eine Datei aus Ordner Motive nicht in der index.txt vorhanden ist, soll diese in ergebnis.txt ausgegeben werden. Ich habe hier im Forum bereits einiges darüber gefunden, aber irgendwie macht mein Skript nicht das was es soll:
Inhalt ergebnis.txt
c:\test\motive\1.txt
c:\test\motive\2.txt
c:\test\motive\3.txt
c:\test\motive\4.txt
c:\test\motive\5.txt
c:\test\motive\6.txt
Richtig wäre:
c:\test\motive\4.txt
c:\test\motive\5.txt
c:\test\motive\6.txt
Das kleine Skript was ich einsetze baut sich wie folgt auf:
)
Hat jemand eine Idee von euch? Ich bin so langsam wirklich durch mit den Nerven. Ich möchte es nur ungern in VB programmieren, wenn es auch mit Boardmittel geht.
Ich bin für jede Anregung oder Hinweise dankbar!!!
LG
Tommy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 145666
Url: https://administrator.de/contentid/145666
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
22 Kommentare
Neuester Kommentar
moin,
das die Zeile überhaupt was anderes, als einen Fehler auswirft - ist (ungetestet aus dem Bauch aber bemerkenswert)
gruß
ungetestet aus dem Bauch
das die Zeile überhaupt was anderes, als einen Fehler auswirft - ist (ungetestet aus dem Bauch aber bemerkenswert)
for %%i in (c:\test\motive\*.*) do findstr "%%i" "c:\test\index.txt" || echo put %%i>>C:\test\ergebnis.txt
gruß
ungetestet aus dem Bauch
Hallo Philosoph,
ich bin zwar nicht bastla aber ich kann dir vielleicht trotzdem weiterhelfen:
ungetestet !!!
ich bin zwar nicht bastla aber ich kann dir vielleicht trotzdem weiterhelfen:
for /f "eol=$" %%i in ("C:\Test\Motive\*.*") do findstr /x /c:"%%~nxi" "C:\Test\index.txt" >nul || >>C:\Test\ergebnis.txt echo put %%i
ungetestet !!!
Moin Philosoph,
willkommen im Forum.
Es war nie die Rede von "Unterordner" oder "Verzeichnisstruktur".
Grüße
Biber
willkommen im Forum.
Zitat von @Philosoph:
put C:\Test\Motive\7.txt
Das ist leider das falsche Ergebnis!
Mir ist eben aufgefallen, dass das Skript keine Unterordner durchsucht, sondern nur die erste Ebene.
Lies bitte noch mal deine Beschreibung des Problems, für das hier Lösungen gepostet wurden.put C:\Test\Motive\7.txt
Das ist leider das falsche Ergebnis!
Mir ist eben aufgefallen, dass das Skript keine Unterordner durchsucht, sondern nur die erste Ebene.
Es war nie die Rede von "Unterordner" oder "Verzeichnisstruktur".
Anscheinend kann findstr keine Verzeichnisstruktur durchsuchen. Sehr schade.
Unzulässige Schlussfolgerung. Aber da kann Findstr bei "FindStr /?" selbst antworten.Deshalb ist der Filter mit $ sogut wie ohne Nutzen.
Okay, wenn du in den Autozubehörhandel gehst und einen Spoiler bestellst, dann kannst du hinterher auch nicht lamentieren"Öhh.., jetzt hab ich so viel Geld bezahlt und meinen Trabi überholen immer noch alle."
Hat jemand von euch eine Idee wie ich das Problem anders lösen kann?
Jepp. Formuliere die Anforderung genauer.Grüße
Biber
Moin Philosoph,
das liegt dann wohl eher an dem was FOR machen soll (zB /R ekursiv . (punkt) für Ordnerstruktur)
das $ im FINDSTR mit [Zeichensatz] suchen lassen
Gruß Phil
das liegt dann wohl eher an dem was FOR machen soll (zB /R ekursiv . (punkt) für Ordnerstruktur)
das $ im FINDSTR mit [Zeichensatz] suchen lassen
for /r "C:\Test\Motive\" %%i in (.) do @echo %%~nxi|findstr /b [$]||for %%j in ("%%~fi\*.*") do findstr /x /c:"%%~nxj" "C:\Test\index.txt" >nul || >>C:\Test\ergebnis.txt echo put %%i
Gruß Phil
Hallo Philosoph!
Da Du nicht nach Dateien mit einem bestimmten Inhalt, sondern nach Dateinamen suchtst, wird "/s" nicht helfen ...
Versuche es eher mit dem Ansatz von pieh-ejdsch (unter Berücksichtigung meines Hinweises) oder zB so:
Grüße
bastla
Da Du nicht nach Dateien mit einem bestimmten Inhalt, sondern nach Dateinamen suchtst, wird "/s" nicht helfen ...
Versuche es eher mit dem Ansatz von pieh-ejdsch (unter Berücksichtigung meines Hinweises) oder zB so:
for /f "delims=" %%a in ('dir /s /b /ad "C:\Test\Motive" ^|findstr /v /b "\$"') do for %%i in ("%%a\*.*") do findstr /x /c:"%%~nxi" "C:\Test\index.txt" >nul || >>C:\Test\ergebnis.txt echo put %%i
bastla
Hallo Philosoph!
In den guten "alten" DOS-Zeiten hätte das meiste, was Du hier an Batches findest, nicht funktioniert - jetzt sind die guten neuen "CMD-Zeiten" ...
Vielleicht als Hinweis zur Fehlersuche: Mit "
Grüße
bastla
In den guten "alten" DOS-Zeiten hätte das meiste, was Du hier an Batches findest, nicht funktioniert - jetzt sind die guten neuen "CMD-Zeiten" ...
Vielleicht als Hinweis zur Fehlersuche: Mit "
findstr /x
" wird eine Übereinstimmung mit der kompletten Zeile verlangt - soferne es jetzt in der "index.txt" auch Pfade gibt, wäre dementstsprechend nicht mehr mit "%%~nxi", sondern mit "%%i" zu vergleichen (oder eben wieder mit "/e" nur das Ende des Pfades).Grüße
bastla
Hallo Tommy!
Wie sieht denn inzwischen Deine "index.txt" aus (davon hängt es ab, ob per "/x" oder per "/e" geprüft werden muss)?
Wenn Du das "/b" aus dem ersten "
Grüße
bastla
Wie sieht denn inzwischen Deine "index.txt" aus (davon hängt es ab, ob per "/x" oder per "/e" geprüft werden muss)?
Wenn Du das "/b" aus dem ersten "
findstr
" entfernst, werden alle Pfade, in denen ein "$" vorkommt, "ausgeblendet" - wenn das so nicht richtig wäre, müsste zusätzlich jeder Ordnername geprüft werden, womit wir wieder beim Vorschlag von pieh-ejdsch wären:for /r "C:\Test\Motive\" %%i in (.) do echo %%~nxi|findstr /b "\$">nul || for %%j in ("%%~fi\*.*") do findstr /x /c:"%%~j" "C:\Test\index.txt" >nul || >>C:\Test\ergebnis.txt echo put %%j
bastla
Hallo Tommy!
Wenn Du tatsächlich nur den ersten Teil des Dateinamens (also auch ohne Pfadangabe) erhalten willst, brauchen wir noch eine kleine Extra-Schleife:
Mit Pfad dann analog:
Grüße
bastla
P.S.: Nur als Anmerkung: Der letztlich funktionierende Code stammt zu nahezu 100 % von @pieh-ejdsch ...
Wenn Du tatsächlich nur den ersten Teil des Dateinamens (also auch ohne Pfadangabe) erhalten willst, brauchen wir noch eine kleine Extra-Schleife:
for /r "C:\Test\Motive\" %%i in (.) do echo %%~nxi|findstr /b "\$">nul || for %%j in ("%%~fi\*.*") do findstr /x /c:"%%~j" "C:\Test\index.txt" >nul || for /f "delims=-" %%a in ("%~nj") do >>C:\Test\ergebnis.txt echo put %%a%%~xj
for /r "C:\Test\Motive\" %%i in (.) do echo %%~nxi|findstr /b "\$">nul || for %%j in ("%%~fi\*.*") do findstr /x /c:"%%~j" "C:\Test\index.txt" >nul || for /f "delims=-" %%a in ("%~nj") do >>C:\Test\ergebnis.txt echo put %%~dpj%%a%%~xj
bastla
P.S.: Nur als Anmerkung: Der letztlich funktionierende Code stammt zu nahezu 100 % von @pieh-ejdsch ...
@bastla
Danke für die Blumen! - Du hast es aber ja erst Richtig gangbar gemacht.
manchmal begreif ich eine Frage sofort; manchmal stehe ich dennoch auf'm Schlauch und in einigen Problembeschreibungen kommen eben zusätzliche Fragen zu der Eigentlichen Aufgabe doch erst innerhalb des Lösungsansatzes auf
Gruß Phil
Danke für die Blumen! - Du hast es aber ja erst Richtig gangbar gemacht.
manchmal begreif ich eine Frage sofort; manchmal stehe ich dennoch auf'm Schlauch und in einigen Problembeschreibungen kommen eben zusätzliche Fragen zu der Eigentlichen Aufgabe doch erst innerhalb des Lösungsansatzes auf
Gruß Phil