Filtern von Ordnern
einen schönen guten Tag
ich brauche wieder mal eure Hilfe!
Ich habe einen Quellordner in dem Order im Format ABCDE012 liegen. Beim durchsuchen des Quellordners wird einerseits der Zielordner im Format ABCDE angelegt
und andererseits die bereits kopierten Ordner in eine Datei eingetragen.
Das ging solange die o.g. Struktur stimmte.
Nun kommen aber Order dazu welche einerseits ohne Zahlen und andererseits länger oder auch kürzer sind wie ABCDE. Wie kann ich aus den neu hinzugekommenen
(Quell)Ordnern gleichnamige Zielordner erstellen ohne dabei die alte Funktion zu verändern?
Evtl. müssten die Ordner welche dem Format entsprechen vorher ausgefiltert werden und vorerst nur die anderen kopiert werden. In dem Fall müsste dann Zeile 5 weg.
Wie bekommt man das zusammen? Ich bin mir sicher ihr könnt mir helfen!
ich brauche wieder mal eure Hilfe!
Ich habe einen Quellordner in dem Order im Format ABCDE012 liegen. Beim durchsuchen des Quellordners wird einerseits der Zielordner im Format ABCDE angelegt
und andererseits die bereits kopierten Ordner in eine Datei eingetragen.
for /f %%a in ('dir /b /a:D "%quelle%" ^| findstr /v /g:%exclude%') do (
echo. >> %log%
echo [%%a] >> %log%
set dir=%%a
set dir=!dir:~0,5!
robocopy %quelle%\%%a %ziel%\!dir!\%%a >>%log%
echo. #############################################>> %log%
echo %%a >>%exclude%
)
Nun kommen aber Order dazu welche einerseits ohne Zahlen und andererseits länger oder auch kürzer sind wie ABCDE. Wie kann ich aus den neu hinzugekommenen
(Quell)Ordnern gleichnamige Zielordner erstellen ohne dabei die alte Funktion zu verändern?
Evtl. müssten die Ordner welche dem Format entsprechen vorher ausgefiltert werden und vorerst nur die anderen kopiert werden. In dem Fall müsste dann Zeile 5 weg.
Wie bekommt man das zusammen? Ich bin mir sicher ihr könnt mir helfen!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 337344
Url: https://administrator.de/contentid/337344
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo nummer5,
teste mal folgendes:
Ich habe ein paar Verbesserungen hinzugefügt:
Grüße
Friemler
teste mal folgendes:
>>"%log%" (
for /f "tokens=* delims=" %%a in ('dir /b /a:D "%quelle%" ^| findstr /v /g:"%exclude%"') do (
echo(
echo [%%a]
set "dir=%%a"
echo %%a|findstr /r /c:"^.....[0-9][0-9][0-9]$" && (
set "dir=!dir:~0,5!"
)
robocopy "%quelle%\%%a" "%ziel%\!dir!\%%a"
echo. #############################################
>>"%exclude%" echo %%a
)
)
Ich habe ein paar Verbesserungen hinzugefügt:
- Die Ausgabe der kompletten
FOR
-Schleife wird in die Ausgabedatei umgeleitet. Das führt zu einer höheren Performance, da die Ausgabedatei nur einmal geöffnet werden muss. - Bei der
FOR
-Schleife die Optionen"tokens=* delims="
hinzugefügt, damit auch Verzeichnisnamen mit Leerzeichen korrekt verarbeitet werden. - Alle Ausdrücke, die Datei-/Verzeichnisnamen darstellen, in Anführungszeichen gesetzt (ebenfalls zur Absicherung von Namen mit Leerzeichen).
- Die Zuweisungen bei
SET
-Befehlen in Anführungszeichen gesetzt, damit nicht ungewollt eingegebene Leerzeichen mit in die Zuweisung aufgenommen werden. - Durch die Schreibweise
echo(
wird die Performance erhöht. Der Befehlecho.
führt dazu, dass zunächst im aktuellen Verzeichnis und dann in allen Verzeichnissen, die in derPATH
-Variablen stehen, nach einer Datei namensEcho.exe
gesucht wird. Nur wenn diese Datei nicht gefunden wurde, wird der interneECHO
-Befehl mit der gewünschten Wirkung (Leerzeile ausgeben) ausgeführt. - Durch die Schreibweise
>>"%exclude%" echo %%a
wird beim Schreiben der Verzeichnisnamen in die Datei kein Leerzeichen mehr angehängt.
Grüße
Friemler
Hallo nummer5,
ist die verzögerte Variablenerweiterung mittelsin einer Zeile vor der
Wenn Du den Filter in Zeile 8 in einer separaten Batchdatei testen willst, musst Du die Zeilen 6 bis 9 in eine Batchdatei schreiben.
Grüße
Friemler
ist die verzögerte Variablenerweiterung mittels
setlocal enabledelayedexpansion
FOR
-Schleife aktiviert worden? Nur dann wird aus !dir!
etwas sinnvolles.Wenn Du den Filter in Zeile 8 in einer separaten Batchdatei testen willst, musst Du die Zeilen 6 bis 9 in eine Batchdatei schreiben.
Grüße
Friemler