mp2711
Goto Top

Batch Schleife als FOR-SCHLEIFE

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter komme Frage ich hier mal face-wink

Was ich erzielen möchte ist folgendes. Dateien die in einer Textdatei mit PATH und Dateiname hinterlegt sind so zu Splitten, dass ich den PATH vom Dateinamen getrennt habe.

Wenn nun die Frage noch aufkommen sollte, wofür ich das brauche ist. Ich möchte per Batch mehrere einzelne Dateien aus verschiedenen Ordner in einen anderen Zielordner kopieren / verschieben. Da man nicht von ausgehen kann, dass man keine Leerzeichen im Path oder Datei hat habe ich dies nur bislang so hinbekommen. Nun fehlt es nur noch, dass es in einer verschachtelten FOR-Schleife ist.

Aber im Moment habe ich wohl ein Brett vorm Kopf.

Wer kann mir helfen

Die Erste FOR-Schleife um diese Textdatei auszulesen ist ja noch einfach:

BACKUPDATEI enthält:
"c:\testordner\testdatei nur 1.txt"
"d:\zweiter Ordner\zweite Testdatei.txt"

Batchdatei enthält bislang
for /f "delims=" %%i in (%BACKUPDATEI%) do (
Echo - %%i
)

nun möchte ich in meiner Batchdatei in der FOR-SCHLEIFE folgendes noch einbauen, dass der den Eintrag bis zum ersten Backslash kürzt. Dies habe ich in außerhalb einer For-Schleife so hinbekommen:

So sollte es vielleicht werden:

for /f "delims=" %%i in (%BACKUPDATEI%) do (
Echo - %%i
<PART1>
<PART2>
<PART3>

... dann mit dem Ergebnis was kopieren oder verschieben.
)

Hier meine PART's die hintereinander außerhalb einer FOR-Schleife schon funktionieren

PART 1 von 3: Den Dateinamen "löschen" so dass nu noch der Path übrig bleibt.

:start_ordner
set Ordner="d:\zweiter Ordner\zweite Testdatei.txt"
:schleife_ordner
set Ordner=%Ordner:~0,-1%
if "%Ordner:~-1%"=="\" goto ende_ordner
if not "%Ordner:~-1%"=="\" goto schleife_ordner
:ende_ordner

PART 2 von 3 : Nun habe ich die Zeichenlänge des Ordners mit Hilfe einer weiteren Forschleife berechnet

for /f delims^= %%i in (' cmd /u /von /c "echo !Ordner_ohne!"^|find /v ""^|findstr .^|find /c /v ""
') do set /a ordnerlength = %%i

Part 3 von 3: Den PATH nnun "löschen", so dass nur noch der Dateiname übrig bleibt

set Datei="d:\zweiter Ordner\zweite Testdatei.txt"
set /A countdown=%ordnerlength%+1
:start_Datei
set /A countdown=%countdown%-1
set Datei=%Datei:~1%
if not "%countdown%" == "0" goto start_Datei


kleiner Schönheitsfehler ist hier zwar noch drin, dass der ORDNER noch mit einem " beginnt und die DATEI mit einem " endet.

Content-Key: 304975

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

Printed on: April 23, 2024 at 11:04 o'clock

Mitglied: 129413
129413 May 20, 2016 updated at 15:23:55 (UTC)
Goto Top
Wieso so umständlich, wenn's dafür schon die passenden Variablen gibt face-smile
@echo off
for /f "usebackq delims=" %%a in ("c:\Ordner\datei.txt") do (  
    echo Laufwerk: %%~da
    echo Ordnername: %%~dpa
    echo Dateiname: %%~nxa
)
ein for /? zeigt dir die möglichen Expansionen

Gruß skybird
Member: mp2711
mp2711 May 20, 2016 at 15:10:02 (UTC)
Goto Top
Tzz ... manchmal würde ich nun sagen, warum einfach, wenn es auch ...

OK face-smile

Ich meinite ich hatte es schon Probiert, aber Du hast natürlich recht.

Es funktioniert.

schönes WE
mp2711