bobbby
Goto Top

Batch-datei gesucht um (Zwischen)-Ordner zu entfernen, Inhalte aber zu belassen

Hallo liebe Experten für Batch-files unter Win (7, 64bit),


Meine Problemstellung:

In meinem Workflow beim Importieren von Bilddaten und Katalogen habe ich häufig die Situation
dass ich nachträglich gerne einen überflüssigen Ordner aus der Hierarchie entfernen möchte.
Die Dateien und Ordner in dem überflüssigen Ordner sollten nach einer batch-aktion einfach einen "Stock höher" sein.

Das bräuchte ich:

OrdnerA
...datei 1
...unterordner_überflüssig
datei 2
unterunterordner1
datei 3

möglichst durch drag´n drop des "unterordner_überflüssig" auf batchfile umwandeln in:

OrdnerA
...datei 1
...datei 2
...unterunterordner1
datei3

Cool wäre auch das im Kontextmenü zu haben und mit Rechtsklick auslösen zu können,
aber da weiß ich schon gar nicht wie man das hinbekommt.

In einem Lösungsansatz auf Administrator.de vor 6 Jahren wurde ein sehr ähnliches Problem
schon genial gelöst (darum habe ich mich hoffnungsvoll hier angemeldet).
Ich habe im Netz ansonsten lange und vergeblich nach einer Lösung gesucht.

Ich beziehe mich auf diesen geschlossenen Beitrag:
Ordnerhierarchie auf eine Ebene reduzieren?

Das funktioniert zwar prima...aber es verschwinden leider sämtliche Unterhierarchien, ich möchte nur das
alle einen Stock höher rücken, also nur ein Ordner mittendrin verschwindet.
Ich nehme mal an, in Programmierer-Logik bedeutet das sowas wie:
Kopiere Inhalt aus dem angezeigten Ordner in den Übergeordneten und lösche dann den angezeigten Ordner?

Wär toll wenn jemand mir da genauso helfen könnte wie dem Fragesteller vor 6 Jahren geholfen wurde.

Content-Key: 230125

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

Printed on: April 23, 2024 at 09:04 o'clock

Member: bastla
bastla Feb 17, 2014 at 11:32:49 (UTC)
Goto Top
Hallo bobbby und willkommen im Forum!

Im einfachsten Fall würde für das Verschieben schon ein Batch der Art
@echo off & setlocal
if [%1]== goto :eof

pushd %1
for %%i in (*) do move "%%i" ..  
popd
genügen - allerdings wäre eine Voraussetzung, dass es keine Namenskollisionen zwischen den Inhalten von "OrdnerA" und "unterordner_überflüssig" gibt ...

Grüße
bastla
Member: bobbby
bobbby Feb 17, 2014 at 12:06:59 (UTC)
Goto Top
Hallo Bastla,

Danke für die schnelle Antwort.

Das Script hat etwas gemacht...aber nicht das Erwartete.

Der Ordner "überflüssig" war noch da.
Es kamen Ordner hinzu die den Namen von ehemaligen dateien trugen.

Ich habe die Batchdatei neben den zu entfernenden Ordner gelegt und dann den Ordner drauf gezogen.
Habe ich das richtig gemacht?

Zu der von dir angekündigten Limitation:
Meistens habe ich da keine Doppelten Dateien, wenn, dann wäre es schön wenn ich das merken würde
bevor ich mir da was überschreibe....aber das ist eher sekundär.
Member: bastla
Solution bastla Feb 17, 2014, updated at Feb 19, 2014 at 14:27:48 (UTC)
Goto Top
Hallo bobbby!

Neuer Versuch:
@echo off & setlocal
if [%1]== goto :eof

pushd %1
for /f "delims=" %%i in ('dir /b/a') do if not exist "..\%%i" (move "%%i" ..) else (echo "%%i" bereits vorhanden!)  
popd
rd %1 2>nul
pause
Wenn es gleichnamige Dateien / Ordner gibt, werden sie nicht verschoben sondern bleiben im "überflüssigen" Ordner (der dann natürlich erhalten bleiben muss) ...

Grüße
bastla
Member: bobbby
bobbby Feb 19, 2014 at 14:33:53 (UTC)
Goto Top
Suuuper!

Genial und beneidenswert was man mit den entsprechenden Kenntnissen alles aus einem Betriebsystem wie Windows herauszukitzeln vermag.
Vielen herzlichen Dank für die schnelle unkomplizierte Hilfe.

Frage:
Kann ich die Bestätigungsmeldung abschalten?
Kann ich das Ganze irgendwie ins Kontextmenü (Rechtsklickmenü) bekommen?

In jedem Fall bin ich begeistert.
Danke
Member: bastla
Solution bastla Feb 19, 2014 updated at 21:31:45 (UTC)
Goto Top
Hallo bobbby!
Kann ich die Bestätigungsmeldung abschalten?
Dazu würde es genügen, die Zeile 8 wegzulassen; damit aber die Ausgabe der ev bereits vorhandenen Dateien / Ordner trotzdem gelesen werden kann, vielleicht besser:
@echo off & setlocal
if [%1]== goto :eof

set "P="  
pushd %1
for /f "delims=" %%i in ('dir /b/a') do if not exist "..\%%i" (move "%%i" ..) else (echo "%%i" bereits vorhanden! & set "P=true")  
popd
rd %1 2>nul
if defined P pause
Kann ich das Ganze irgendwie ins Kontextmenü (Rechtsklickmenü) bekommen?


Grüße
bastla
Member: bobbby
bobbby Feb 19, 2014 at 21:35:02 (UTC)
Goto Top
Perfekt!
Aus meiner Sicht (der ich dieser Programmiersprache nicht mächtig bin),
sieht das aus wie Zauberei.
So viel Inteligenz in den paar Zeilen... beeindruckend.
Danke