the-jay
Goto Top

Mit FOR-Schleife Ordner anhand Eingabeliste umbenennen und verschieben

Hallo,

irgendwie zweifel ich grad an mir selbst... aber vielleicht kann mir ja einer ein bisschen auf die Sprünge helfen.

Ich habe mehrere Ordner mit Inhalt (Dateien und weitere Ordner), diesen Inhalt möchte im selben Ordner in einen Neu erstellten Ordner verschieben.

Struktur:
C:\Temp\ab
C:\Temp\ab\Kopie von 01
C:\Temp\ab\Kopie von 02
C:\Temp\ab\Kopie von 03

C:\Temp\cd
C:\Temp\cd\Kopie von 01
C:\Temp\cd\Kopie von 02
C:\Temp\cd\Kopie von 03

C:\Temp\ef
C:\Temp\ef\Kopie von 01
C:\Temp\ef\Kopie von 02
C:\Temp\ef\Kopie von 03


Mit Hilfe der Kommandozeile wäre ich so vorgegangen:
md dummy
ren "bestehender Ordner zb ab" "XYZ"  
move XYZ dummy
ren dummy ab

Das Ganze möchte ich für eine Liste durchführen, die ich mit diesem Befehl erstellt habe:
cmd /u /c dir *. /b /o:n > folderlist.txt

Inhalt von folderlist.txt
ab
cd
ef

Mit Hilfe der FOR-Schleife sieht dies bei mir dann so aus:
@echo on & setlocal
set "liste=c:\temp\folderlist.txt"  
cmd /u /c dir *. /b /o:n > folderlist.txt

for /d %%i in ("%liste%") do call :work "%%i"  
goto :eof

:work
md dummy
ren %%i XYZ
move XYZ dummy
ren dummy %%i

Das Ergebnis könnt ihr euch sicher vorstellen, aber ich weiß woran es liegt... Entweder wird meine Liste nicht richtig verarbeitet, oder die Variable nach der Sprungmarke ist totaler Mist.

Danke schon mal

Content-ID: 158848

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

Ausgedruckt am: 26.11.2024 um 18:11 Uhr

pieh-ejdsch
pieh-ejdsch 18.01.2011 um 02:07:14 Uhr
Goto Top
moin jay,

Biber hätt jetzt gesagt: Mach da mal nicht soviel Heckmeck drum...

einmal in der CMD abgefeuert...
pushD "D:\Mein Verzeichnis"&for /d %i in (*) do md "%i\%i" & for /r "%i" %j in (*) do @if not "%~fi\%i" == "%j" @move "%j" "%~fi\%i"  
[Edit]eine Forvariable Funktioniert in einer Sub nicht dazu nimmst Du Parameter, welche in der Forschleife beim Call übergebn werden oder setzt vor den Call eine Variable - welche dann in der Sub verarbeitet wird[/Edit]

Gruß Phil
tHe-jAy
tHe-jAy 18.01.2011 um 15:20:28 Uhr
Goto Top
Hallo Phil,

leider haut das bei mir nicht hin. Es wird zwar ein gleichnamiger Ordner im selbigen erstellt, aber das Verschieben erfolgt nicht. Natürlich habe ich "D:\Mein Verzeichnis" durch "C:\Temp" wie es bei mir ist ersetzt.

Des Weiteren wollte ich nicht einen gleichnamigen Ordner in dem selbigen erstellen, sondern einen Ordner mit einer fixen Zeichenfolge. Dies war jetzt für den Test aber erstmal egal, da ich ja nur die Variable durch eine fixe Bezeichng ersetzen müsste.

gruß
jay
pieh-ejdsch
pieh-ejdsch 18.01.2011 um 18:13:43 Uhr
Goto Top
ja mein Fehler...

die for /r schleife war etwas falsch
und beim move war der Pfad zu Kurz
dann aber in etwa so
(for %h in ("ExtraOrdner") do pushD "D:\Mein Verzeichnis"&for /d %i in (*) do @md "%i\%~h" & @for /f "delims=" %j in ('dir /a/b "%~i\*"') do @if not "%i\%~h" == "%i\%j" @move /y "%i\%j" "%i\%~h")&popD  

Gruß Phil
tHe-jAy
tHe-jAy 18.01.2011 um 18:37:25 Uhr
Goto Top
BÄM!

Punktlandung. Jetzt test ich noch n bisl und sofern das alles hinhaut darf das Datenarchiv dran glauben. Falls das auch alles klappt, markier ich den Beitrag als gelöst.


Vielen Dank