Per Batch nach bestimmten Ordnern und Dateien suchen
Hallo zusammen,
ich sitze aktuell an einem Problem und komme einfach nicht ganz ans Ziel. Ich habe schon einige Ansätze hier im Forum gefunden, trotzdem benötige ich noch Hilfe.
Ich hoffe ihr könnt mir helfen.
Ich möchte nach bestimmten Ordner und Dateien suchen (die Dateien sollen letztlich kopiert werden).
Der Part "c:\temp\csv_bereich1\Maschine\Prod Daten" ist dabei immer fix.
Darunter können dann viele Ordner liegen.
Es sind aber nur die Ordner relevant, die aus einer 6-stelligen Zahl bestehen, also z.B.
c:\temp\csv_bereich1\Maschine\Prod Daten\123456
Darunter liegt dann jeweils noch die zwei Ordner "Bilder" und "Fehler". Hier ist wiederum nur der Ordner "Fehler" relevant, in der letztlich die Zieldatei liegt.
Die Zieldatei besteht dabei genau aus 6 Zahlen des Ordners oben, also
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Fehler\123456.txt
Diese Datei will ich finden (und kopieren).
So kann die gesamte Verzeichnisstruktur aussehen:
c:\temp\csv_bereich1\Maschine\Prod Daten\123456
c:\temp\csv_bereich1\Maschine\Prod Daten\123456_NOT
c:\temp\csv_bereich1\Maschine\Prod Daten\TEST
c:\temp\csv_bereich1\Maschine\Prod Daten\654321
c:\temp\csv_bereich1\Maschine\Prod Daten\blabla
usw...
Ich habe es mit findstr und regulären Ausdrücken versucht, aber komme nicht ganz ans Ziel.
Kann man damit auch nach Ordnern suchen, so dass eben nur die Ordner "123456" und "654321" betrachtet werden?
Also 1. Suche:
c:\temp\csv_bereich1\Maschine\Prod Daten\123456
c:\temp\csv_bereich1\Maschine\Prod Daten\654321
Dann könnte es so weiter aussehen:
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Bilder\b1.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Bilder\b2.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Bilder\b3.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Fehler\123456.txt
c:\temp\csv_bereich1\Maschine\Prod Daten\654321\Bilder\b1.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\654321\Bilder\b2.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\654321\Fehler\654321.txt
Endergebnis sollendann also nur die 2 Dateien "123456.txt" und "654321.txt" sein, die ich dann kopiere.
Ich hoffe, ich habs verständlich erklärt.
Da unter dem Ordner "\Prod Daten" sehr viele Ordner sein können, wäre es außerdem sehr gut, wenn ich zusätzlich über das Datum einschränken könnte.
D.h. es sollen nur Ordner betrachtet werden, deren "Geändert am"-Datum nicht älter ist als 2 Tage. Geht das?
Ich habe gelesen, dass bei "XCOPY /D" eine Datumsangabe möglich ist, aber idealerweise sollte diese Einschränkung nicht erst beim Kopieren erfolgen...
Vielen Dank im Voraus!
ich sitze aktuell an einem Problem und komme einfach nicht ganz ans Ziel. Ich habe schon einige Ansätze hier im Forum gefunden, trotzdem benötige ich noch Hilfe.
Ich hoffe ihr könnt mir helfen.
Ich möchte nach bestimmten Ordner und Dateien suchen (die Dateien sollen letztlich kopiert werden).
Der Part "c:\temp\csv_bereich1\Maschine\Prod Daten" ist dabei immer fix.
Darunter können dann viele Ordner liegen.
Es sind aber nur die Ordner relevant, die aus einer 6-stelligen Zahl bestehen, also z.B.
c:\temp\csv_bereich1\Maschine\Prod Daten\123456
Darunter liegt dann jeweils noch die zwei Ordner "Bilder" und "Fehler". Hier ist wiederum nur der Ordner "Fehler" relevant, in der letztlich die Zieldatei liegt.
Die Zieldatei besteht dabei genau aus 6 Zahlen des Ordners oben, also
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Fehler\123456.txt
Diese Datei will ich finden (und kopieren).
So kann die gesamte Verzeichnisstruktur aussehen:
c:\temp\csv_bereich1\Maschine\Prod Daten\123456
c:\temp\csv_bereich1\Maschine\Prod Daten\123456_NOT
c:\temp\csv_bereich1\Maschine\Prod Daten\TEST
c:\temp\csv_bereich1\Maschine\Prod Daten\654321
c:\temp\csv_bereich1\Maschine\Prod Daten\blabla
usw...
Ich habe es mit findstr und regulären Ausdrücken versucht, aber komme nicht ganz ans Ziel.
Kann man damit auch nach Ordnern suchen, so dass eben nur die Ordner "123456" und "654321" betrachtet werden?
Also 1. Suche:
c:\temp\csv_bereich1\Maschine\Prod Daten\123456
c:\temp\csv_bereich1\Maschine\Prod Daten\654321
Dann könnte es so weiter aussehen:
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Bilder\b1.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Bilder\b2.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Bilder\b3.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\123456\Fehler\123456.txt
c:\temp\csv_bereich1\Maschine\Prod Daten\654321\Bilder\b1.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\654321\Bilder\b2.bmp
c:\temp\csv_bereich1\Maschine\Prod Daten\654321\Fehler\654321.txt
Endergebnis sollendann also nur die 2 Dateien "123456.txt" und "654321.txt" sein, die ich dann kopiere.
Ich hoffe, ich habs verständlich erklärt.
Da unter dem Ordner "\Prod Daten" sehr viele Ordner sein können, wäre es außerdem sehr gut, wenn ich zusätzlich über das Datum einschränken könnte.
D.h. es sollen nur Ordner betrachtet werden, deren "Geändert am"-Datum nicht älter ist als 2 Tage. Geht das?
Ich habe gelesen, dass bei "XCOPY /D" eine Datumsangabe möglich ist, aber idealerweise sollte diese Einschränkung nicht erst beim Kopieren erfolgen...
Vielen Dank im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 142946
Url: https://administrator.de/contentid/142946
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
probiere mal dies (ungetestet):
Wenn die Ausgabe korrekt erscheint das Echo vor copy entfernen.
Gruß
LotPings
Edit: ein Anführungszeichen nachgereicht
probiere mal dies (ungetestet):
@Echo off
Set "Base=c:\temp\csv_bereich1\Maschine\Prod Daten\1"
Pushd %Base%
For /f "delims=" %%A in (
'Dir /B/AD ?????? ^|Findstr "^[0-9][0-9][0-9][0-9][0-9][0-9]$"'
) Do if Exist "%Base%\%%A\Fehler\%%A.txt" Echo Copy "%Base%\%%A\Fehler\%%A.txt" "X:\wohinauchimmer\"
Wenn die Ausgabe korrekt erscheint das Echo vor copy entfernen.
Gruß
LotPings
Edit: ein Anführungszeichen nachgereicht
Zitat von @LPRathmann:
Das Optimum wäre jetzt, wenn ich nur in den Verzeichnissen suchen muss, deren Änderungsdatum nicht älter als 2 Tage
ist. Denn das Verzeichnis unter \Prod Daten kann riesig werden...
Geht sowas?
Das Optimum wäre jetzt, wenn ich nur in den Verzeichnissen suchen muss, deren Änderungsdatum nicht älter als 2 Tage
ist. Denn das Verzeichnis unter \Prod Daten kann riesig werden...
Geht sowas?
Das geht schon, macht die Batchdatei aber erheblich komplexer, da Datumsberechnungen in purem Batch eine Qual sind.
Es sind ja die unterschiedlichsten Datumsformate zu berücksichtigen (Ich habe zum Beispiel JJJJ-MM-TT eingestellt).
Als ersten Schritt kannst du hinter dem Dir zusätzlich die Option /O-D einfügen, dann geht er nach absteigendem Datum vor - die neuesten werden also zuerst geprüft.
Gruß
LotPings
Edit: Deine vorherige Interpretation des Batches ist korrekt - hab ich vergessen zu erwähnen.
Zitat von @LPRathmann:
Ok, vielen Dank dann soweit!
Ich setze das ganze mal auf gelöst, auch wenn ich das mit dem Datum (nicht älter als 2 Tage) idealerweise auch brauchen
würde...
Aber wenn das wirklich soviel Zusatzaufwand ist, dann lassen wir das erstmal.
Wie lange braucht denn jetzt ein kompletter Durchlauf?Ok, vielen Dank dann soweit!
Ich setze das ganze mal auf gelöst, auch wenn ich das mit dem Datum (nicht älter als 2 Tage) idealerweise auch brauchen
würde...
Aber wenn das wirklich soviel Zusatzaufwand ist, dann lassen wir das erstmal.
Wieviele Ordner sind es denn insgesamt?
Es läßt sich lösen mit purem Batch, aber wenn du durch die zusätzlichen Berechnungen keine Zeit sparst - wöfür?
Datum-Zeit des Ordners lässt sich in der Schleife mit
"%%~tA"
abfragen aber da mus die Zeit abgeschnitten werden, und solange du kein sortierfähiges Datumsformat hast, kann nicht einfach das Datum mit größer als vergleichen.Einen Vergleichswert Datum minus 2 Tage musst du auch erst errechnen.
Diese Berechnungen kann mit einer VBscript Hilfs-Routine viel einfacher durchführen, aber dann kann man auch gleich das ganze mit besserer Laufzeit in VBS machen. Das ist aber dann deutlich umfangreicher. Wenn ich Zeit habe schau ich mal danach.
Gruß
LotPings
Zitat von @LPRathmann:
ich hab noch ein weiteres Problem, hoffe das ist ok, wenn ich gleich hier weiterschreibe.
ich hab noch ein weiteres Problem, hoffe das ist ok, wenn ich gleich hier weiterschreibe.
So als erziehreische Maßnahme, nein
Im Ernst, Änderungen hier sehen nur die, die bereits beteiligt waren und die Erinnereung gesetzt haben.
Du vergrößerst deine Chancen auf Antworten mit einem neuen Beitrag, den ALLE sehen.
Ich übersehe auch schon etwas und habe auch nicht immer si Zeit zu reagieren.
Ich habe deshalb auch deine Frage gar nicht weiter durchgelesen.
Gruß
LotPings