alex81m
Goto Top

Batch-Programmierung Ergebnis einer FOR-Schleife übergeben

Batch-Programmierung Ergebnis einer FOR-Schleife übergeben

Hallo Zusammen,

hänge gerade an einem Problem bei welchem ich Hilfe benötige.
Ich möchte ein Batch-Skript bauen, welches mir in allen Verzeichnissen und Unterverzeichnissen nach MP3 Dateien sucht und die Ergebnisse dann weiterverarbeiten. Nun steh ich vor der Herausforderung die For-Schleifen-Ergebnisse auszulesen.
Aktuell habe ich folgenden CODE
for /f "delims=" %%i IN ('dir /b /s *.mp3') do (   
SET myString="%%i"  
echo Ergebnis Forschleife: %%i
echo Ergebnis Variable: %myString%
REM ToDo Splitstring, Move
)
Nun bekomme ich jedoch folgende Ausgaben:
c:\temp>Script.cmd
Ergebnis Forschleife: c:\temp\Ordner 1\Unterordner 1\1.mp3
Ergebnis Variable: "c:\temp\Ordner 1\Unterordner 3\3.mp3"  
Ergebnis Forschleife: c:\temp\Ordner 1\Unterordner 2\Unterordner 2.1\2.mp3
Ergebnis Variable: "c:\temp\Ordner 1\Unterordner 3\3.mp3"  
Ergebnis Forschleife: c:\temp\Ordner 1\Unterordner 3\3.mp3
Ergebnis Variable: "c:\temp\Ordner 1\Unterordner 3\3.mp3"  
Mir ist absolut schleierhaft warum ich immer nur den letzten Wert der For-Schleife in der Variablen habe.
Bin für Ideen und Tipps offen.
Danke

Content-Key: 168547

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: bastla
bastla Jun 23, 2011, updated at Oct 18, 2012 at 16:47:23 (UTC)
Goto Top
Hallo Alex81m und willkommen im Forum!
Mir ist absolut schleierhaft warum ich immer nur den letzten Wert der For-Schleife in der Variablen habe.
Wird es nicht mehr sein, wenn Du Dich etwas mit "delayedExpansion" beschäftigst - Du findest einiges zu diesem Stichwort hier im Forum. Schau Dir auch Friemlers Tutorial zur FOR-Schleife an.
Abgesehen davon ist es uU gar nicht erforderlich, die gefundenen mp3-Dateipfade in eine Variable zu übernehmen - was hast Du denn konkret damit vor?

Grüße
bastla
Member: Alex81m
Alex81m Jun 23, 2011 at 23:30:23 (UTC)
Goto Top
Hi Bastla,

danke für den Tipp werde mir mal "delayedExpansion" anschauen .
Was ich damit vor habe? Ich möchte die Dateien aus dem Quellverzeichnis in ein neues Verzeichnis verschieben und genau die Ordnerstruktur der Quelle auf dem Ziel abbilden.
Beispiel Quelle: C:\Dir1\Dir2\Dir3\Dir4\1.mp3 nach Ziel D:\Dir1\Dir2\Dir3\Dir4\1.mp3
Mein Ansatz wäre nun ein Stringsplit um den Dateinamen zu erhalten und das Ziel zu replacen.

Grüße Alex81m
Member: bastla
bastla Jun 23, 2011 at 23:46:11 (UTC)
Goto Top
Hallo Alex81m!

Wenn es tatsächlich nur darum ginge, "C:" durch "D:" zu ersetzen, sollte ja
for /f "delims=" %%i IN ('dir /b /s C:\temp\*.mp3') do (  
    echo xcopy /dy "%%i" "D:%%~pnxi*"  
    REM xcopy /dy "%%i" "D:%%~pnxi*" && del "%%i"  
)
genügen ...

Zum Testen wird nur der Kopierbefehl angezeigt - wenn es vernünftig aussieht, kannst Du die Zeile 2 und das REM vor der Zeile 3 entfernen; dann wird zuerst kopiert ("xcopy" kann nämlich, anders als "move", den Zielpfad bei Bedarf erstellen) und, wenn kein Fehler aufgetaucht ist (deshalb die Verknüpfung mit "&&") danach die Quelldatei gelöscht.

Grüße
bastla