Top-Themen

Aktuelle Themen (A bis Z)

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 zum loeschen leerer Ordner

Frage Entwicklung Batch & Shell

Mitglied: fresh-m

fresh-m (Level 1) - Jetzt verbinden

07.08.2012 um 10:58 Uhr, 3538 Aufrufe, 8 Kommentare

Hallo Zusammen,

habe vom netten Bastla einen Batch Code gefunden. Diese soll aber nur dann leere Ordner und Unterodner löschen, wenn sich in keinem der Ordner eine Datei befindet.

Also:

Basisordner 1
Unterordner 1
Unterordner 2 --> Ordner 1 wird komplett gelöscht, da auch keine Datei in den Unterordnern ist
Unterordner 3

Basisordner 2
Unterordner 1
(Datei vorhanden)
Unterordner 2
(Keine Datei vorhanden) --> Ordner 2 und deren Unterordner (auch wenn einige leer sind) werden "nicht" gelöscht, da in
einem der Unterordner eine Datei vorhanden ist
Unterordner 3
(Keine Datei vorhanden)

Basisordner 3
Unterordner 1
Unterordner 2 --> Ordner 3 wird komplett gelöscht, da auch keine Datei in den Unterordnern ist
Unterordner 3
usw.

Die Ordner haben die gleiche Struktur.

Anbei der Code von Bastla, der etwas modifiziert werden müsste.

@echo off & setlocal
set D=%temp%\DelEmptyFolders.vbs
echo DeleteEmptyFolders(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments(0)))>%D%
echo Sub DeleteEmptyFolders(Ordner):For Each Unter In Ordner.SubFolders:DeleteEmptyFolders(Unter)>>%D%
echo If (Unter.SubFolders.Count+Unter.Files.Count)=0 Then:Unter.Delete:End If:Next:End Sub>>%D%
cscript //nologo %D% "%~dp0"
del %D%

Ich hoffe ihr könnt mir helfen.

Gruß
fresh-m
Mitglied: Darkprodukt
07.08.2012 um 15:21 Uhr
Hallo fresh-m,

Ich will nur mal kurz anmerken, dass das keine Batch richtige ist.

Das ist eine Batch die ein VBS Skript schreibt, was dan die aufgabe löst und danach wieder gelöscht wird.
Wiso eigentlich so umständlich? Mach doch gleich eine VBS Datei.

Da ich mich mit VBS leider nicht auskenne kan ich nicht leider nicht Helfen, dachte ja auch es sei ein Batch Problem...

Grüße
Darkprodukt
Bitte warten ..
Mitglied: pieh-ejdsch
07.08.2012 um 17:11 Uhr
moin freshm,

Dazu musst Du aber sagen ab welcher Tiefe gelöscht werden soll:

01.
@echo off 
02.
setlocal 
03.
set "Wurzel=D:\" 
04.
 rem "Ordner\Unterordner\UnterUnterOrdner" entspricht UnterUnterOrdner=3 
05.
set /a loescheAbBasisInTiefe = 3 
06.
 
07.
set /a end = loescheAbBasisInTiefe 
08.
pushD "%Wurzel%" 
09.
:Sub 
10.
if %loescheAbBasisInTiefe% gtr 0 for /d %%i in (*) do (set /a loescheAbBasisInTiefe-=1 
11.
  pushD "%%~i" 
12.
  set "Del=" 
13.
  call :sub 
14.
  popD 
15.
  if defined Del @echo rd /s /q "%%~i" 
16.
  set /a loescheAbBasisInTiefe+=1 
17.
18.
 
19.
if %loescheAbBasisInTiefe% equ %end% popD 
20.
if %loescheAbBasisInTiefe% gtr 0 exit /b 
21.
dir /s /b /a-d |find /v "" <nul || set "Del=1" 
22.
exit /b
Gruß Phil
Bitte warten ..
Mitglied: bastla
07.08.2012 um 23:26 Uhr
Hallo PH!

Sehr hybsch ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
07.08.2012 um 23:42 Uhr
Hallo fresh-m!

Wenn ich das richtig interpretiere, geht es nicht darum, ev leere Unter-/UnterUnterordner zu löschen, sondern es soll für jeden Basisordner nur ein "alles oder nichts" geben: Löschen des Basisordners, wenn es darunter keine einzige Datei gibt, oder die gesamte Ordnerstruktur behalten, wenn auch nur eine einzige Datei existiert - wenn ja, dann ginge das einfacher (zum Testen direkt in CMD, daher jeweils nur "%i" anstatt wie im Batch "%%i":
01.
for /d %i in ("D:\*") do @dir /s/b/a-d "%i">nul 2>nul||echo rd /s /q "%i"
Natürlich kannst Du "D:\" entsprechend anpassen, sodass auf einer tieferen Ebene begonnen wird - vor dem * muss aber immer ein \ stehen.

So wie im Vorschlag von PH ist auch hier ein "Sicherheits-echo" eingebaut, damit Du gefahrlos testen kannst, da so die Löschbefehle nur angezeigt, aber nicht ausgeführt werden ...

Grüße
bastla
Bitte warten ..
Mitglied: fresh-m
08.08.2012 um 09:37 Uhr
Hallo zusammenn,

schönen dank an pieh-ejdsch und bastla. Hat alles wieder einmal super geklappt!!

Hab den Code von bastla genommen,da dieser ewtas "Leaner" ist.

Grüße
fresh-m
Bitte warten ..
Mitglied: hackyli
09.08.2014 um 15:27 Uhr
Hallo bastla, ich schon wieder

Ich habe auch den o.g. Code leicht modfiziert von Dir genutzt, um Ordner zu löschen, die keine Datei mit einer bestimmten Endung enthalten. Das funktioniert aber leider nur, wenn die Datei genau den gleichen Namen hat wie der Ordner. Was müsste ich denn ändern, um beliebige Dateinamen mit einer bestimmten Endung zu berückstigen?

Mein aktueller Code:
for /d %%i in ("E:\Bilder\*") do @dir /s/b/a-d "%%i"*.jpg || rd /s /q "%%i"
Bitte warten ..
Mitglied: bastla
09.08.2014 um 16:36 Uhr
Hallo hackyli!

Eine Kleinigkeit wäre zu ändern (ungetestet):
for /d %%i in ("E:\Bilder\*") do dir /s/b/a-d "%%i\*.jpg" || rd /s /q "%%i"
Grüße
bastla

P.S.: Wie "Code"-Formatierung vorzunehmen ist, steht hier ...
Bitte warten ..
Mitglied: hackyli
09.08.2014 um 17:01 Uhr
Danke. Da hätte ich auch selbst drauf kommen können. Wegen dem Code habe ich verstanden. Werde ich zukünftig beachten.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Verknüpfungen von leeren Ordnern löschen
Frage von AmiKegoBatch & Shell2 Kommentare

Hallo, ich schreibe gerade ein Skript mit Batch das leere Ordner mit Unterordner löscht. Jetzt will ich es ein ...

Batch & Shell
Powershell - Wenn ein Ordner leer ist, diesen auch löschen hinzufügen?
gelöst Frage von pixel0815Batch & Shell2 Kommentare

Hallo zusammen, das Skript läuft gut und ich dachte kurz darüber Nach ob es möglich ist ohne großen Aufwand ...

Batch & Shell
Ordner löschen per Batch
gelöst Frage von MarcysBatch & Shell3 Kommentare

Hallo, Ich möchte aus einem Verzeichnis einen den Ordner "MC" löschen: C:\Programme\HYP\MC Dies möchte ich per Batch machen. Wie ...

Exchange Server
Exchange Postfach leeren - nicht löschen
Frage von AndreasOCExchange Server12 Kommentare

Hallo, um etwas Platz auf unseren Exchange zu schaffen möchte ich gerne von allen deaktvieren Benutzern die Postfächer leeren, ...

Neue Wissensbeiträge
Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 15 MinutenWindows 10

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 3 StundenMicrosoft Office13 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 9 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office10 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

Batch & Shell
Dateien verschieben mit batch
gelöst Frage von michi-ffmBatch & Shell13 Kommentare

Hallo Zusammen hat jemand evtl eine Idee? Zunächst hier das Skript: Leider werden keine UNC-Pfade unterstüzt, kann mir jemand ...