Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

1000 Ordner eine Ebene hoch verschieben

Frage Entwicklung Batch & Shell

Mitglied: bodyparts

bodyparts (Level 2) - Jetzt verbinden

19.11.2009 um 12:13 Uhr, 4196 Aufrufe, 8 Kommentare

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ß
Mitglied: Komabaer
19.11.2009 um 16:16 Uhr
Na du hast dir ja was vorgenommen.

Aber schau mal ob nicht xcopy oder robocopy mit ihren Parametern weiterhelfen können.
Bitte warten ..
Mitglied: Biber
19.11.2009 um 19:48 Uhr
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:
01.
move "f:\downloads\sqldeveloper\BC4J" "f:\downloads\BC4J" 
02.
move "f:\downloads\sqldeveloper\dvt" "f:\downloads\dvt" 
03.
move "f:\downloads\sqldeveloper\ide" "f:\downloads\ide" 
04.
move "f:\downloads\sqldeveloper\j2ee" "f:\downloads\j2ee" 
05.
move "f:\downloads\sqldeveloper\jdbc" "f:\downloads\jdbc" 
06.
move "f:\downloads\sqldeveloper\jdev" "f:\downloads\jdev" 
07.
move "f:\downloads\sqldeveloper\jdk" "f:\downloads\jdk" 
08.
move "f:\downloads\sqldeveloper\jlib" "f:\downloads\jlib" 
09.
move "f:\downloads\sqldeveloper\lib" "f:\downloads\lib" 
10.
move "f:\downloads\sqldeveloper\rdbms" "f:\downloads\rdbms" 
11.
move "f:\downloads\sqldeveloper\sqldeveloper" "f:\downloads\sqldeveloper" 
12.
move "f:\downloads\sqldeveloper\timingframework" "f:\downloads\timingframework" 
13.
move "f:\downloads\scalabium\msgview" "f:\downloads\msgview" 
14.
move "f:\downloads\scalabium\fdv" "f:\downloads\fdv" 
15.
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
Bitte warten ..
Mitglied: dog
20.11.2009 um 00:32 Uhr
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
Bitte warten ..
Mitglied: bodyparts
20.11.2009 um 11:22 Uhr
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ß
Bitte warten ..
Mitglied: Biber
20.11.2009 um 16:29 Uhr
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?
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.
Bitte warten ..
Mitglied: bodyparts
20.11.2009 um 19:23 Uhr
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:

01.
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***
Bitte warten ..
Mitglied: Biber
23.11.2009 um 11:29 Uhr
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:
01.
for /d %i in (f:\abc\*) do if not exist "%i\*.txt" rd "%i"
Grüße
Biber
Bitte warten ..
Mitglied: bodyparts
23.11.2009 um 12:29 Uhr
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... ;>((
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...