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, 1755 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 ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

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

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...