grisur
Goto Top

For Schleife für Abgleich mit Text-Datei und Unterverzeichnisse

Hallo zusammen,
habe mich extra angemeldet, da ich bei einem kleinen Problem nicht so schnell weiterkomme. Bin Batch-Anfänger und lese mich grad von einem ins Nächste und komm nicht weiter. OS ist Windows 10.

Das Urproblem wurde hier schon öfters behandelt. Dateien nach Abgleich mit einer Liste verschieben.
Habe deswegen auch schon folgende funktionierende Batch.
md Test
FOR /F "DELIMS=," %%i IN (Test_red.csv) do move "%%i" "Test\%%i"  

Jetzt würde ich das ganze aber nicht nur im aktuellen Verzeichnis, sondern auch in allen Unterverzeichnissen machen.
Sprich in allen Unterverzeichnissen, soll ein Test-Verzeichnis erstellt werden, wohin die abgeglichenen Dateien aus dem Oberverzeichniss verschoben werden.

Hab auch nach langem suchen keine Syntax für die Anwendung von /F und /R gleichzeitig gefunden. Wie muss ich das machen?

Danke für die Hilfe!

Content-Key: 325300

Url: https://administrator.de/contentid/325300

Ausgedruckt am: 19.03.2024 um 10:03 Uhr

Mitglied: bastla
Lösung bastla 03.01.2017 um 10:06:11 Uhr
Goto Top
Hallo grisur und willkommen als Mitglied!

Du wirst eine zweite Schleife benötigen - ungetestet etwa so:
for /d %%u in (*) do (
    pushd "%%~u"  
    md Test
    FOR /F "DELIMS=," %%i IN (Test_red.csv) do move "%%i" "Test\%%i"  
    popd
)
Grüße
bastla
Mitglied: Kriegstreiber
Kriegstreiber 03.01.2017 aktualisiert um 12:35:42 Uhr
Goto Top
Ich hänge mich hier mal an, ich kann dir helfen. Die Schleife die du suchst wäre:

FOR /F "delims=*" %%I IN ('dir /b /s Test_red.csv') do if not exist "%%~dpITest" md "%%~dpITest" && move "%%I" "%%~dpITest"   

Es wird jetzt das ausführende BAT Verzeichnis mit Unterordner durchsuchst, in jedem Ordner wo eine Test_red.csv existiert wird ein Unterordner Test erstellt (falls er nicht schon existiert) und die Datei dahin verschoben. Aber Achtung ! führst du das 2x hintereinander aus, wird die Datei aus dem Test Ordner natürlich wieder gefunden und wieder verschoben. Um das zu verhindern müsste man die Schleife anweisen den Ordner Test zu ignorieren.


Womit wir jetzt bei meinem Problem wären...

Das %%I wäre bei mir jetzt : E:\!TEST!\USRDIR\TEST\Test_red.csv

Ausgeführt habe ich die Batch im Verzeichnis !TEST!

Wie kann ich das hinkriegen das mir nicht der ganze Verzeichnisbaum angezeigt wird in der Ausgabe, sondern nur ab root des Ausführens !

Meine Ausgabe sollte sein : USRDIR\TEST\Test_red.csv

Mit dem Kürzel %%~dI kann ich nicht Arbeiten, selbst da ist der komplette Baum !TEST!\USRDIR\TEST. Ich brauche aber nur ab ROOT.

Danke für Hilfe
Mitglied: grisur
grisur 03.01.2017 aktualisiert um 13:08:03 Uhr
Goto Top
Hallo bastla,

den pushd Befehl kenn ich jetzt auch, Danke face-smile

Unterverzeichnisse auslesen und mit pushd jeweils dahin springen, klingt gut.
Kann's erst heute nacht testen und geb dann Rückmeldung.

Gruß,
grisur

PS: Eine Frage noch dazu: Wo muss sich die Test_red.csv dann befinden? In jedem Unterverzeichniss? Falls ja kann ich die auch per Pfad referenzieren und nur einmal platzieren?
Mitglied: grisur
grisur 04.01.2017 aktualisiert um 03:57:19 Uhr
Goto Top
So konnte es nun testen und hat einwandfrei geklappt. Die csv hab ich ins Basisverzeichnis gelegt und absolut als Pfad referenziert. Auch mehrere Befehle in der Schleife klappen.
Gruß und vielen Dank!!,
grisur