bodyparts
Goto Top

1000 Ordner eine Ebene hoch verschieben

Hallo,

ich habe ca. 1000 Ordner.

Unter c:\abc\dfg\ hier liegen 1000 Ordner mit je einem Unterordner, jetzt sollen alle Unterordner direkt in c:\abc\dfg\liegen. Die Namen sollten vom Unterordner übernommen werden. Wenn es einen Ordner gibt der keine Unterordner hat so solle dieser nicht verschoben werden.

Gruß

Content-Key: 129755

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

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

Member: Komabaer
Komabaer Nov 19, 2009 at 15:16:11 (UTC)
Goto Top
Na du hast dir ja was vorgenommen.

Aber schau mal ob nicht xcopy oder robocopy mit ihren Parametern weiterhelfen können.
Member: Biber
Biber Nov 19, 2009 at 18:48:25 (UTC)
Goto Top
Moin bodyparts,

wo treibt ihr immer so abstruse Szenarien auf??

Egal... im Prinzip würde ich es so abfackeln (Demo am CMD-Prompt; ">" ist mein Prompt/nicht mit abtippen)
>for /d %i in (f:\downloads\s*) do @for /d %j in ("%i\*") do @echo move "%i\%~nxj" "%~dpi%~nxj"
Würde bei mir zu folgender Ausgabe führen:
move "f:\downloads\sqldeveloper\BC4J" "f:\downloads\BC4J"  
move "f:\downloads\sqldeveloper\dvt" "f:\downloads\dvt"  
move "f:\downloads\sqldeveloper\ide" "f:\downloads\ide"  
move "f:\downloads\sqldeveloper\j2ee" "f:\downloads\j2ee"  
move "f:\downloads\sqldeveloper\jdbc" "f:\downloads\jdbc"  
move "f:\downloads\sqldeveloper\jdev" "f:\downloads\jdev"  
move "f:\downloads\sqldeveloper\jdk" "f:\downloads\jdk"  
move "f:\downloads\sqldeveloper\jlib" "f:\downloads\jlib"  
move "f:\downloads\sqldeveloper\lib" "f:\downloads\lib"  
move "f:\downloads\sqldeveloper\rdbms" "f:\downloads\rdbms"  
move "f:\downloads\sqldeveloper\sqldeveloper" "f:\downloads\sqldeveloper"  
move "f:\downloads\sqldeveloper\timingframework" "f:\downloads\timingframework"  
move "f:\downloads\scalabium\msgview" "f:\downloads\msgview"  
move "f:\downloads\scalabium\fdv" "f:\downloads\fdv"  
move "f:\downloads\scalabium\testfiles" "f:\downloads\testfiles"  

weil ich ja geschrieben hatte:
.......... for /d %i in (f:\downloads\s*) do @for /d %j in ("%i\*") do @echo move "%i\%~nxj" "%~dpi%~nxj"

Aufgedröselt...
  • for /d %i in (f:\downloads\s*) do mit allen Unterzeichnissen von Downloads. die der Wildcard "s*" entsprechen...
  • ... @for /d %j in ("%i\*") do ... verfahre, FALLS sie eine Ordnerebene darunter haben, wie folgt...
  • ...@echo move "%i\%~nxj" "%~dpi%~nxj" ...MOVE diesen Ordner eine Ebene höher (oder zeig es wenigstens an per ECHO)

Soweit die Strategie.
Zwei Unwägbarkeiten:
a) Kollisionen werden nicht behandelt. Der erste Unter-Unterordner mt dem Namen "source" wird verschoben... die nächsten Gleichnamigen schauen in die Röhre.
b) es wird eine Liste von Unterverzeichnissen mit FOR /D abgearbeitet und während der Abarbeitung verändert. Kann klappen, muss aber nicht.

Also für dich nachzuarbeiten
a) Wie umgehen mit Kollisionen? Klar, du wirst sagen: "Kann nicht vorkommen.."*lach* ---> dein Problem.
b) Liste ändert sich während Verarbeitung--> zeitlich entzerren. Die Ausgabe oben in eine neue Text/bat-Datei schreiben und die NACH SICHTKONTROLLE starten.

Grüße
Biber
Member: dog
dog Nov 19, 2009 at 23:32:45 (UTC)
Goto Top
wo treibt ihr immer so abstruse Szenarien auf??

Irgendwo im Internet gibt es sicher einen Biber-Fan-Club, der sich den ganzen Tag neue Batch-Probleme ausdenkt, damit sie dir beim Scripten zugucken können face-devilish
Member: bodyparts
bodyparts Nov 20, 2009 at 10:22:55 (UTC)
Goto Top
Biber ich kann nur sagen das reale Leben bringt sowas hervor.... ;>)

im Ernst eine Anwendung hat diese Ordner geschrieben und sie jetzt besser zu verwalten, müsse sie gemoved werden.

Klappt super, aber...... kann man die "leeren" Ordner jetzt löschen, oder besser die in den keine Datei sind?

Gruß
Member: Biber
Biber Nov 20, 2009 at 15:29:25 (UTC)
Goto Top
Moin bodyparts,

Zitat von @bodyparts:
Biber ich kann nur sagen das reale Leben bringt sowas hervor.... ;>)
Ich will dich ja nicht frustieren, aber wenn das reale Leben sich reduziert auf Anwendungen, die 1000 Unterordner mit je einem Unterordner anlegen...
... aber das würde den beschränkten Horizont dieses Skriptbereichs sicherlich sprengen...
Klappt super, aber......
Wo bleibt dann der güllefarbene Haken? face-wink
kann man die "leeren" Ordner jetzt löschen, oder besser die in den keine Datei sind?
*grübel*
*grübel*

Ohmm....

*grübel*

Was genau war jezz' noch mal der Unterschied zwischen "leeren Ordnern" und "besser die in den keine Datei sind"?
*kopfkratz*

Abgesehen davon... nur Mut!

Ich hab doch jetzt vorgekaspert, wie sich ein Oneliner aufdröseln lässt.
Jetzt machst Du das Ganze noch mal umkehrt (zusammenbraten statt aufdröseln) und mit einer kleinen Variation (Prüfung IF NOT EXIST o.ä.).

Ach ja - und poste das Ergebnis bitte

Schönes Wochenende
Biber


P.S. Sollte es wider Erwarten irgendwo klemmen... wir sind hier.
Member: bodyparts
bodyparts Nov 20, 2009 at 18:23:19 (UTC)
Goto Top
okay... Biber...

habe es wohl nicht sauber gepostet.
Dachte das man mit einem Rutsch nach dem moven die leeren Ordner sofort löscht.

Test Script läuft, Hauptscript arbeitet, dauert wohl noch etwas, die Platten sind nicht besonders schnell.

Dann soll dies laufen:

for /d %i in (f:\abc\*) do if not exist %i\*.txt rd %i

es löscht alle Ordner in den keine txt Datei sit, aber sowas siehts du ja sofort....

Gruß, melde mich wenn fertig

ähhmmm.... darf ich nochmals wegen der Nachricht fragen, die ich dir gesendet habe

thanks


kl Rückmeldung.... da stehen Sonderzeichen in den Ordnern, also [xcvbnm] sgsgsdf usw.... die werden wohl nicht verschoben, jedenfalls bleiben die unverändert....

M***
Member: Biber
Biber Nov 23, 2009 at 10:29:50 (UTC)
Goto Top
Moin bodyparts,

kl Rückmeldung.... da stehen Sonderzeichen in den Ordnern, also [xcvbnm] sgsgsdf usw....
die werden wohl nicht verschoben, jedenfalls bleiben die unverändert....

könnte sein, dass dort "Leerzeichen im Dateinamen" enthalten sind.
Dieses Problemchen ließe sich durch "Anführungszeichen drumherum" beheben.

Beispiel:
for /d %i in (f:\abc\*) do if not exist "%i\*.txt" rd "%i"  

Grüße
Biber
Member: bodyparts
bodyparts Nov 23, 2009 at 11:29:11 (UTC)
Goto Top
Moin Biber....

es geht erst noch ums verschieben, dort werden wohl die Sonderzeichen nicht berücksichtigt... das Löschen kommt erst, wenn alle Ordner fertig gemoved sind. Da ich eine Datei prüfen und die in einem Ordner nicht liegt in dem nocht ein Unterordner ist, würde der Ordner auch mit Unterordner gelöscht werden.... somit gehen mir Dateien verloren... ;>((