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

Dateien aus best. Verzeichnis mit der Grösse 0 KB löschen

Frage Entwicklung Batch & Shell

Mitglied: buxi

buxi (Level 1) - Jetzt verbinden

11.09.2006, aktualisiert 12.09.2006, 14370 Aufrufe, 8 Kommentare

Datei Löschscript für Dateien mit weniger als 1 kB oder genau 0 KB

Hallo liebes Administratoren.de-Team,

ich habe folgende Frage:
Wie kann ich unter Windows NT4/2000/Xp/2003 mit den Bordmitteln (Kommandozeile)
dieses Problem lösen.
Es sollen in einem bestimmten Verzeichnis die Dateien mit einer Grösse von 0 (KB, B) ermittelt und dann gelöscht werden.
Vieleicht ist es auch leichter, zu definieren Dateien mit weniger als 1 (KB,B) ?
Mit DIR kann ich nur sortieren und anzeigen lassen.

Danke für eure Unterstützung vorab.

Gruß
Buxi
Mitglied: Metzger-MCP
11.09.2006 um 13:13 Uhr
Du kannst das mit einer Batchdatei lösen.

Verzeichnisse größensortiert mit dem dir Befehl in eine Txt Datei schreiben.
Aus dieser Datei kannst du dann die 0KB Biester mit einer Forschleife extrahieren
in eine 2. TXT. Im Anschluß kannst du mit einer Forschleife die Datein löschen.

Da kann ich dir aber auch eine fertige Batchdatei zusenden geben.

Mit freundlichen Grüßen Metzger

Edit

Datei inhalt ohne Gewähr.
@echo off
echo. > dir1.txt
echo. > dir2.txt
echo. > dir3.txt
dir /OGS *.* > dir1.txt
for /F "eol=; tokens=1,2,3,4* delims= " %%i in (dir1.txt) do echo %%k %%l >> dir2.txt
for /F "eol=; tokens=1,2,3,4* delims= " %%i in (dir2.txt) do if /i %%i EQU 0 echo %%i %%j >> dir3.txt

rem for /F "eol=; tokens=1,2,3,4* delims= " %%i in (dir2.txt) do if /i %%i EQU 0 echo %%j >> dir3.txt
rem for /F "eol=; tokens=1,2,3,4* delims= " %%i in (dir3.txt) do del %%i

So wie die Datei oben ersichtlich ist, protokoliert sie in DIR3.txt alle Datein die gelöscht werden würden.

Wird vor der 2te Forschleife ein rem gesetzt und bei den unteren beiden Rem entfernt, so löscht sie alle 0KB augenblicklich. Die Protokolierung bleibt erhalten.
Bitte warten ..
Mitglied: Biber
11.09.2006 um 13:15 Uhr
Moin buxi,

vom CMD-Prompt aus:

01.
@for /R D:\temp\Backup1 %i in (*.*) do @if %~zi==0 del %i
...würde alles im Verzeichnis D:\temp\Backup1 und darunter löschen, was 0-Byte-Größe hat.
Wenn Du nicht in allen Verzeichnissen unterhalb löschen willst, musst Du noch eine Zusatzbedingung anhängen, ob denn die gefundene Datei auch im Verzeichnis, das vorn in der ersten Klammer steht, gefunden wurde.

01.
@for /R D:\temp\Backup1 %i in (*.*) do @if %~zi==0 if /i %~dpi==D:\temp\Backup1\ del %i
Als Batch mit einem Parameter "NameDesVerzeichnisses" sähe das so aus:
01.
::-------snipp Del0Files.bat 
02.
@for /R %1 %%i in (*.*) do @if %%~zi==0 @if /i [%%~dpi]==[%1\] echo del %%i 
Richtigerweise würde der Oneliner bei mir folgende 0-Byte-Datei finden:
01.
>f:\Del0Files.bat d:\temp\Backup1 
02.
del d:\temp\Backup1\AdobeWeb.log
Zum Test macht der Batch nur ein "echo del ..." ; zum Scharfmachen das Wort "echo" löschen.


Gruß
Biber
Bitte warten ..
Mitglied: buxi
11.09.2006 um 17:03 Uhr
Hallo Biber,

habe den 3. Teil ( mit Parameterübergabe )deiner Batch-Exkursion ausprobiert. Dieser funktioniert.
Leider bekomme ich bei Ausführung der 2. Batch :
@for /R D:\temp\Backup1 %i in (*.*) do @if %~zi==0 if /i %~dpi==D:\temp\Backup1\ del %i
-----folgende Fehlermeldung:
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters
ist ungültig: %~dpi==D:\temp\Backup1\ del %i
Hast Du eine zündende Idee ?
Ich habe mir die FOR-Synthax angeschaut (muss mich allerdings noch etwas damit beschäftigen) und ad-hoc keinen Fehler entdecken können.
Danke Dir für eine Antwort.

Gruß
buxi
Bitte warten ..
Mitglied: Biber
11.09.2006 um 17:34 Uhr
Moin buxi,

ja, ist erklärlich.
Der zweite Oneliner war gar nicht als Batch gedacht, sondern auch noch als Versuch am CMD-Prompt.
Da liefert genau diese Zeile (nur wieder mit "echo del" statt "del" am Ende):
--am CMD-Prompt:--
01.
>@for /R D:\temp\Backup1 %i in (*.*) do @if %~zi==0 if /i %~dpi==D:\temp\Backup1\ echo del %i 
02.
del D:\temp\Backup1\AdobeWeb.log
Als Oneliner-Batch müssen alle Zählvariablen (also die %i, %~dpi, %~zi) jewils mit 2 %%-Zeichen geschrieben werden.
Also wäre diese CMD-Anweisung oben als Batch so (siehe unten) zu schreiben:
01.
::---snipp Der2teOneliner.bat 
02.
@for /R D:\temp\Backup1 %%i in (*.*) do @if %%~zi==0 if /i %%~dpi==D:\temp\Backup1\ echo del %%i
... aber der wäre ja als Batch zu unflexibel, weil er sich ja immer nur auf das Verzeichnis "D:\temp\Backup1" bezieht.
Deshalb war dann ja als einzige Batch-Variante die 3. Fassung, die mit einem beliebigen Verzeichnis als Parameter herausgekommen.

Gruß
Biber
Bitte warten ..
Mitglied: buxi
11.09.2006 um 17:47 Uhr
Moin Biber, und Metzger ,

danke, danke sehr für die Hilfe. Langsam erschliesst sich mir die FOR-usability.
Werde mich in der nächsten Zeit mal aktiver hier beteiligen - give and take.

Thanks a lot.
Bitte warten ..
Mitglied: buxi
11.09.2006 um 19:31 Uhr
Hallo Biber,

ich habs nochmals durchgetestet.
Kleines Problem jetzt:
Wenn in dem Verzeichnis, in welchem die zu löschenden Dateien liegen,
eine Datei mit einem Leerzeichen z. B. "Neu Worddokument.doc" etc. liegt,
dann bekomme ich eine Fehlermeldung (liegt wohl am Space dazw. ).
f: \Neu konnte nicht gefunden werden
f: \Wordokument.doc konnte nicht gefunden werden.
Diese wird dann nicht gelöscht.
Kann man das elegant umgehen ?
Hochkommatas und /Q funzen da wohl nicht.

Brainstoooorming ..

Gruß
Buxi
Bitte warten ..
Mitglied: Biber
11.09.2006 um 20:49 Uhr
Moin buxi,
ja, das geht noch relativ stressarm.
Einfach das %%i nach dem "del" in Hochkommas setzen.

Aber: --> 2 oder 3 Fälle sind noch nicht abgefangen:
a) es kann ja Pfade mit Leerzeichen im Namen geben. Dazu muss auch der Parameter 1 bzw. die Prüfung leerzeichentauglich gemacht werden
01.
::-------snipp Del0Files.bat 
02.
@for /R %1 %%i in (*.*) do @if %%~zi== 0 @if /i "%%~dpi"=="%~1\" @echo del "%%i" 2>nul
b) Gerade bei diesen 0-Byte-Dateien sind einige "in Gebrauch" oder ReadOnly oder schlicht nicht löschbar. Dazu würde ich noch ans Ende der Zeile ein "2>nul" stellen.
Auf Deutsch: Unterdrücke Fehlermeldungen.

c) okay, Faulheit... ich prüfe ja nicht mal, ob ein Parameter übergeben wurde.
Ist also nicht gerade ein Schnipsel, den ich irgendeinem Uneingeweihten schenken würde.
Dir Prüfung sollte (wenn es als Batch irgendwo gespeichert werden soll) schon rein.


Auch wenn sich dadurch die Zeilenzahl langfristig verdoppeln sollte..
01.
::-------snipp Del0Files.bat 
02.
@if not [%1]==[] @for /R %1 %%i in (*.*) do @if %%~zi== 0 @if /i "%%~dpi"=="%~1\" @echo del "%%i" 2>nul
Gruß
Biber
P.S. Wer jetzt die ganze Geschichte mitgelesen hat, versteht jetzt eine ganz schön kryptische Batchzeile.
Die dürfte man/frau aber auch normalerweise niemandem vor dem Frühstück anbieten.
Bitte warten ..
Mitglied: Metzger-MCP
12.09.2006 um 11:11 Uhr
Gruß
Biber
P.S. Wer jetzt die ganze Geschichte mitgelesen hat, versteht jetzt eine ganz
schön kryptische Batchzeile. Die dürfte man/frau aber auch normalerweise niemandem
vor dem Frühstück anbieten.

he he ja so ist das ! Wer in den Rechner schaut bevor er ein Muntermacher genommen hat ist selber schuld ! aber abends ( 21:00 ) ist das ja noch so gerade verdauenbar.

Dieser kommentar kann gefahrlos überlesen werden.
Mit freundlichen Grüßen Metzger
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Windows Server
Verzeichnis lässt sich nicht löschen (7)

Frage von BPeter zum Thema Windows Server ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...