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

Alle (Unter-)Unterordner per Batch in darüberliegendes Verzeichnis verschieben

Frage Entwicklung Batch & Shell

Mitglied: Larz

Larz (Level 2) - Jetzt verbinden

02.11.2008, aktualisiert 18:29 Uhr, 8227 Aufrufe, 13 Kommentare

Hallo zusammen,

Ausgangssituation:
ich habe einen PC mit einer Verzeichnisstruktur die für Windows zu lange ist.

Resultat:
Ordner können nicht mehr gelöscht werden, obwohl keine Dateien und voller Zugriffsrechte vorhanden sind.

Bisherige Versuche:
Durch Recherche im Netz habe ich erfahren dass man die Ordner zumindest noch verschieben kann, also vom Unterordner in den Hauptordner (und das über ca. 20 - 25 Ebenen).
Danach ist ein Löschen möglich. Ich wollte nun mit dem Move-Befehl die Verzeichnisse verschieben, aber das scheint ja nur mit Dateien zu funktionieren...
Weiß jemand wie das mit den (Unter-(Unter-(Unter-(usw.))))Unterordnern geht?


Gruß
Larz
Mitglied: bastla
02.11.2008 um 10:25 Uhr
Hallo Larz!

Sollte eigentlich so gehen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Dein\langer\Pfad\zu\den\Unterordnern" 
03.
set "Ziel=D:\KurzerPfad" 
04.
 
05.
if not exist "%Ziel%" md "%Ziel%" 
06.
for /d %%i in ("%Quelle%\*.*") do if not exist "%Ziel%\%%~nxi" move "%%i" "%Ziel%"
Ansonsten sollte der Zugriff auf die tiefer liegenden Ordner aber auch klappen, wenn Du den "Weg" mit
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern"
verkürzt (anstelle von "K" tut es natürlich jeder freie Laufwerksbuchstabe).

Mit
subst K: /d
gibst Du den Buchstaben "K" wieder frei.

Grüße
bastla

[Edit] Pfadangabe bei "subst" korrigiert. [/Edit]
Bitte warten ..
Mitglied: Larz
02.11.2008 um 10:42 Uhr
Moin Bastla,

danke für die schnelle Antwort. Problem ist nur, dass dein Script die Ordner zwar alle verschiebt, aber in der bestehenden Ordnerstruktur belässt, d.h. wieder zu lange Verzeichnispfade abbildet; d.h. ich kann die leeren Verzeichnisse wieder nicht löschen

Im Prinzip müsste es so eine Art Schleife sein, die vom untersten Ordner aus alles ins obertse Verzecihnis verschiebt...


Gruß
Larz
Bitte warten ..
Mitglied: bastla
02.11.2008 um 10:51 Uhr
Hallo Larz!
... zwar alle verschiebt, aber in der bestehenden Ordnerstruktur belässt ...
... was ich ja grundsätzlich sinnvoll finde ...

Eigentlich sollte es doch genügen, wenn Du den Großteil des Pfades (durch Angabe als %Quelle%) entfernst (wodurch, in meinem Beispiel oben, aus "D:\Dein\langer\Pfad\zu\den\Unterordnern\EinUnterordner" dann eben "D:\KurzerPfad\EinUnterordner" und damit wieder vernünftig handhabbar wird) - oder verstehe ich da etwas gründlich falsch?

Grüße
bastla
Bitte warten ..
Mitglied: 60730
02.11.2008 um 10:52 Uhr
Moinsen larz,

an deiner Stelle würde ich den 2. Ansatz von Bastla weiterverfolgen.

Woher soll das Script "wissen" welcher Ordner gerade noch zu erkennen ist - aber dann nicht mehr zu verschieben ist, weil der Pfad zu lange ist...

"Normalerweise" hat so eine Unterunterunter struktur ja auch irgendeinen Sinn - da würde ich lieber selbst Hand anlegen, als eine Batch zu bemühen.

Gruß
Bitte warten ..
Mitglied: bastla
02.11.2008 um 10:57 Uhr
@TimoBeil
Sehe ich zwar grundsätzlich ebenfalls so, aber mit "subst" musst Du ja auch auf einer bestimmten Ebene ansetzen - dann kannst Du diese Ebene aber auch gleich als Quellpfad für den Batch verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: 60730
02.11.2008 um 11:02 Uhr
@ Bastla
eh klar

ich würde - nachdem ich mr die frage nochmal angesehen habe - eher zu folgender (ungetester Lösung) tendieren:
01.
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern" 
02.
FOR /F "delims=" %%i in ('dir /b /s /ad k:') do rd "%%i" 2>NUL
Er will ja eigentlich nicht moven, sondern nur die leeren löschen.
Und dann "schön" manuell eine neue Ordnung - oder mittels Batch schaffen.

PS: Ich hatte noch keinen Kaffe - möglich das der Ansatz voll daneben ist.
Bitte warten ..
Mitglied: Larz
02.11.2008 um 11:50 Uhr
Hallo zusammen,

danke für eure Beiträge soweit. Es ist tatsächlich wie TimoBeil sagt - ich will die gesamte Struktur eigentlich "nur" löschen. Aufgrund der Unterunterunter-Ordner geht das aber nicht. D.h. alle Unterordner sollten einfach mal in den Root-Ordner verschoben werden, dann kann man die 34567 oder was weiß ich wie viele Ordner flach löschen.

@TimoBeil: Das hat so nicht geklappt, innerhalb der Batch sagt er immer wieder "Verzeichnisname zu lang" - wolltest Du damit direkt löschen? "delims" sagt mir leider nichts...

Gruß
Larz
Bitte warten ..
Mitglied: bastla
02.11.2008 um 12:03 Uhr
Hallo Larz!

Wenn der Pfad noch immer zu lang ist, dann vielleicht besser so:
01.
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern" 
02.
FOR /D %%i in (k:\*.*) do rd /s /q "%%i" 2>NUL
Damit wird nur die in der ersten Zeile angegebene Ebene abgearbeitet, wobei die Unter-Unterordner gleich mit gelöscht werden.

Sollte das noch immer nicht klappen, musst Du eben den Pfad in Zeile 1 noch tiefer ansetzen.

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
02.11.2008 um 12:21 Uhr
Ich hätte da noch 2 Ideen für einen ganz anderen Ansatz. Ist aber nur so ein Tip ins blaue hinein. Aber so hat das bei mir schonmal innem ähnlcihen Fall funktioniert:
Lösche einfach ganz normal den ordner, verwende dazu allerdings die Kurzen Verzeichnisnamen.

Die andere idee wäre einfach nur den obersten Ordner (also der indem die unterordner liegen). Also:
01.
 rd /s C:\Ab_Hier_viele_Unterordner
Bitte warten ..
Mitglied: Larz
02.11.2008 um 18:15 Uhr
Hey Bastla,

die Lösung bringt's, danke! Endlich sind diese lästigen Verzeichnisse weg....
Könntest Du mir kurz erläutern, was die zweite Zeile so macht? Z.B. %%i und 2>NUL ?
Schließlich will ich verstehen, nicht nur kopieren...

Danke nochmal

Gruß
Larz
Bitte warten ..
Mitglied: bastla
02.11.2008 um 18:28 Uhr
Hallo Larz!
Könntest Du mir kurz erläutern, was die zweite Zeile so macht?
Grundsätzlich findest Du zu allen verwendeten Befehlen Hilfestellung durch Eingabe von "Befehl /?", also etwa "for /?" in der Kommandozeile ...

FOR /D %%i in (k:\*.*) do
Gehe alle Ordner ("directories") in "K:\" (Name egal) durch und speichere den Ordnerpfad in "%%i"
rd /s /q "%%i"
Lösche den durch "%%i" angegebenen Ordner samt Unterordnern ("subdirectories"), und das ohne lästige Fragen ("quiet")
2>NUL
Schicke ev auftretende Fehlermeldungen (Fehlerkanal = 2) nach "Nirgendwo" ("NUL") und verhindere damit eine Bildschirmanzeige selbiger - wäre hier (bei einer einmaligen Aktion) eigentlich nicht nötig gewesen (sieht aber, vor allem bei regelmäßig verwendeten - und schon gut getesteten - Batches, eleganter aus )

Grüße
bastla
Bitte warten ..
Mitglied: truecolor
11.03.2011 um 14:11 Uhr
Hallo,

ich habe (oder besser ich hatte) hier 5000 RAR-Archive.

(log0001.rar , log0002.rar , ...)

Beim Entpacken wurde für jede RAR-Datei ein Verz. erstellt. Soweit ok.

Nun war der Inhalt selbst in einem Verzeichnis mit gepackt.
NACH dem entpacken und Löschen der RAR-Dateien hab ich jedoch leider pro Verzeichnis ein Verzeichnistiefe zu viel:

Ursprung:

log0001.rar


entpackt:

log0001/log0001/dat001.log
log0001/log0001/dat002.log
log0001/log0001/dat003.log
usw.


So sollte es ausschauen:

log0001/dat001.log
log0001/dat002.log
log0001/dat003.log
usw.

Wie bekomme ich in jedem der 5000 Verzeichnisse jeweils eines Verzeichnis gelöscht?

Kann ich die Lösung von bastla 1:1 übernehme?

01.
subst K: "D:\Dein\langer\Pfad\zu\den\Unterordnern" 
02.
FOR /D %%i in (k:\*.*) do rd /s /q "%%i" 2>NUL
Gruß ... tc
Bitte warten ..
Mitglied: bastla
11.03.2011 um 16:27 Uhr
Hallo truecolor!

Ist eigentlich eine andere Fragestellung ...

Ausgehend von einem "Überordner" (im Beispiel "D:\Entpackt", daher gäbe es also "D:\Entpackt\og0001\log0001\dat001.log" usw) könnte das so gehen:
01.
@echo off & setlocal 
02.
pushd "D:\Entpackt" 
03.
for /f "delims=" %%i in ('dir /b /ad') do if exist "%%i\%%i\" ( 
04.
    echo move "%%i\%%i\*.*" "%%i" 
05.
    echo rd "%%i\%%i" 
06.
07.
popd 
08.
pause
Die "echo"-Befehle vor "move" und "rd" sollen ein gefahrloses Testen ermöglichen - solange die da stehen, werden die Verschiebe- und Löschbefehle nur angezeigt, aber nicht ausgeführt ...

Grüße
bastla

[Edit] Auf "for /f" umgestellt [/Edit]
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...