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

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

Frage Entwicklung Batch & Shell

Mitglied: bobbby

bobbby (Level 1) - Jetzt verbinden

17.02.2014, aktualisiert 19.02.2014, 1828 Aufrufe, 6 Kommentare, 1 Danke

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:
http://www.administrator.de/frage/ordnerhierarchie-auf-eine-ebene-reduz ...

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.
Mitglied: bastla
17.02.2014 um 12:32 Uhr
Hallo bobbby und willkommen im Forum!

Im einfachsten Fall würde für das Verschieben schon ein Batch der Art
01.
@echo off & setlocal 
02.
if [%1]==[] goto :eof 
03.
 
04.
pushd %1 
05.
for %%i in (*) do move "%%i" .. 
06.
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
Bitte warten ..
Mitglied: bobbby
17.02.2014 um 13:06 Uhr
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.
Bitte warten ..
Mitglied: bastla
LÖSUNG 17.02.2014, aktualisiert 19.02.2014
Hallo bobbby!

Neuer Versuch:
01.
@echo off & setlocal 
02.
if [%1]==[] goto :eof 
03.
 
04.
pushd %1 
05.
for /f "delims=" %%i in ('dir /b/a') do if not exist "..\%%i" (move "%%i" ..) else (echo "%%i" bereits vorhanden!) 
06.
popd 
07.
rd %1 2>nul 
08.
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
Bitte warten ..
Mitglied: bobbby
19.02.2014 um 15:33 Uhr
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
Bitte warten ..
Mitglied: bastla
LÖSUNG 19.02.2014, aktualisiert um 22:31 Uhr
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:
01.
@echo off & setlocal 
02.
if [%1]==[] goto :eof 
03.
 
04.
set "P=" 
05.
pushd %1 
06.
for /f "delims=" %%i in ('dir /b/a') do if not exist "..\%%i" (move "%%i" ..) else (echo "%%i" bereits vorhanden! & set "P=true") 
07.
popd 
08.
rd %1 2>nul 
09.
if defined P pause
Kann ich das Ganze irgendwie ins Kontextmenü (Rechtsklickmenü) bekommen?
http://www.administrator.de/search/detail.php?what=questions&query= ...

Grüße
bastla
Bitte warten ..
Mitglied: bobbby
19.02.2014 um 22:35 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Dateien nach Inhalt umbenennen (4)

Frage von Icemaniac zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Leerzeichen in nur bestimmten Spalten entfernen? (2)

Frage von Komoran12 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(2)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Netzwerkprotokolle
gelöst Leiten "dumme" Switches VLAN-Tags mit durch? (26)

Frage von coltseavers zum Thema Netzwerkprotokolle ...

Netzwerkgrundlagen
Kann auf Freigabe nicht Zugreifen (19)

Frage von leon123 zum Thema Netzwerkgrundlagen ...

Windows Server
gelöst Neues KB für W10 1607 und W2K16 wieder mal nicht im WSUS 3.0, hat das noch jemand? (16)

Frage von departure69 zum Thema Windows Server ...

Windows Server
DC virtualisieren + wie sichern (SingleDC-Environment) (12)

Frage von KMUlife zum Thema Windows Server ...