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

Mehrere Dateien in abhängigkeit voneinander Löschen

Mitglied: master-chief

master-chief (Level 1) - Jetzt verbinden

18.09.2008, aktualisiert 19.09.2008, 3080 Aufrufe, 7 Kommentare

Hallo Leute,

ich brauch ein wenig Hilfe oder den richtigen Anstoß.

Ich habe folgendes Problem. In einem Ordner befinden sich x Dateien. Die dateien fangen alle mit 4 Zahlen an die eindeutig sind. Es gibt immer 3 Dateien mit diesem "Schlüssel". Also in etwa so:

6344_test_1.txt
6344_test_2.txt
6344_test_3.txt
4125_test_1.txt
4125_test_2.txt
4125_test_3.txt
1532_test_1.txt
1532_test_2.txt
1532_test_3.txt

In diesen Datein KANN etwas stehen, muss aber nicht. Falls in alle 3 Dateien mit gleichem Schlüssel leer sind werden sie gelöscht. Beispiel

6344_test_1.txt 0kB
6344_test_2.txt 0kB
6344_test_3.txt 0kB
4125_test_1.txt 1kB
4125_test_2.txt 0kB
4125_test_3.txt 0kB
1532_test_1.txt 4kB
1532_test_2.txt 6kB
1532_test_3.txt 1kB

Wenn mein Programm durchgelaufen ist sollten die ersten 3 Dateien verschwunden sein.

Ich habe das Problem schon in C# realiesiert. Der Kern des ALgorithmus ist der:

for (int i = 0; i <= dateien.Length-2; i=i+3)
{
if ((dateien[i].Length == 0) && (dateien[i+1].Length == 0) && (dateien[i+2].Length == 0)
{
dateien[i].Delete();
dateien[i+1].Delete();
dateien[i+2].Delete();
}
}

Das funktioniert auch Prima. Nun möcht ich aber gerne das Problem auch über eine Batch Datei lösen, ist das überhaupt möglich?

Ich hatte mir gedacht ich hol mir erstma den Ordner mit Dir * und schreib das in eine Datei. Mit einer For-Schleife wollte ich dann irgendwie die Dateien die Raus müssen in eine andere Datei schreiben. Ich hatte mir gedacht es wäre ersteinmal hilfreich wenn die Dateien, mit Semikolon getrennt, aufgelistet sind. Etwa so:

6344_test_1.txt;6344_test_2.txt;6344_test_3.txt
4125_test_1.txt;4125_test_2.txt;4125_test_3.txt
1532_test_1.txt;1532_test_2.txt;1532_test_3.txt

Allerdings bin ich mir nicht sicher ob das mit Batch überhaupt möglich ist, wegen der Zeilenweise abarbeitung.

Ich hoffe ihr könnt mir einen Tipp oder hinweis geben in welche Richtung das ganze gehen sollte damit es funktioniert. Ich bin noch totaler Batch-Newbie, verlange aber keine fertigen Scripts, über denkanstöße und kleine Hilfen dir mir auf den Weg zum Ziel helfen wäre ich sehr dankbar.
Mitglied: miniversum
18.09.2008 um 13:13 Uhr
Ich würde das eher so lösen dass du die dateien einzeln durchgehst. Du nimmst die erste, schuchst die beiden andern dazu, prüfst die dateigröße und löscht wenn alle drei 0 sind.
Das würde dann so gehen (ungetestet):
01.
@echo off 
02.
set "Ordner=C:\dateien\" 
03.
set "filter=*.txt" 
04.
FOR /F "delims=" %%i in ('dir /B /A-D "%Ordner%%filter%"') do call:check "%%i" 
05.
goto:eof 
06.
 
07.
:check 
08.
set "filename=%~1" 
09.
if not exist "%Ordner%%filename%" goto:eof 
10.
set delit=0 
11.
FOR /F "tokens=3 delims= " %%j in ('dir /A-D "%Ordner%%filename:~0,4%%filter%"') do if "%%j" neq "0" set delit=1 
12.
if "%delit%" equ "1" ECHO del "%Ordner%%filename:~0,4%%filter%" /Q 
13.
goto:eof
Bitte warten ..
Mitglied: master-chief
18.09.2008 um 14:20 Uhr
Danke für deine schnelle Antwort. Ich habe mich jetzt versucht ein wenig in den Code rein zu denken. Leider funkioniert er nicht 100%ig, er will immer alle dateien Löschen. Allerdings sind es ja schonmal alle.

Allerdings sind mir beim Versuch das Script zu verstehen 2 Sachen aufgefallen.

Zeile 11: Müsste das zweite "%j" mit 2 %-Zeichen versehen werden?
Und, immernoch Zeile 11 direkt nach dem do. Muss da nicht eine Klammer hin damit die beiden If-Befehle innerhalb der For-Schleife abarbeitet werden ?

Aufjedenfall schonmal danke für die super Hilfe, bin schon einen Großen Schritt weiter.
Bitte warten ..
Mitglied: miniversum
18.09.2008 um 15:21 Uhr
Ja mit der Zeile 11 hast du recht.
Aber es müssen nicht beide Ifs in die Klammer um For. Dafür kann Zeile 13 entfallen.
Ich habs oben korrigiert.

Versuchs mal damit:
01.
@echo off 
02.
set "Ordner=C:\dateien\" 
03.
set "filter=*.txt" 
04.
FOR /F "delims=" %%i in ('dir /B /A-D "%Ordner%%filter%"') do call:check "%%i" 
05.
goto:eof 
06.
 
07.
:check 
08.
set "filename=%~1" 
09.
if not exist "%Ordner%%filename%" goto:eof 
10.
set delit=1 
11.
FOR /F "tokens=3 delims= " %%j in ('dir /A-D "%Ordner%%filename:~0,4%%filter%"') do if "%%j" neq "0" set delit=0 
12.
if "%delit%" equ "1" ECHO del "%Ordner%%filename:~0,4%%filter%" /Q 
13.
goto:eof
in "check" werden alle dateien gesucht mit den gleichen 4 anfangsbuchstaben wie die übergebene Datei. Ist eine Dieser Datien größer 0 Byte wird das Flag "delit" auf 0 gesetzt. Ist anschließend das flag auf 1 werden alle Dateien gelöscht, da ja alle leer sein sollten. Hier war ein Fehler beim setzen des Flags. So sollte es gehen.
Wenn dann richtig gelöscht werden soll das "ECHO" entfernen.
Bitte warten ..
Mitglied: master-chief
18.09.2008 um 15:46 Uhr
Super, nochmal danke für die rasante Hilfe.
Es funktioniert leider immer nochnicht so wie gewollt.

Von der Theorie her sollte es funktioniert. Zumindest ist das setzen des Flags alles korrekt. (in dem Quellcode oben muss in Zeile 10 das flag auf 1 vordefiniert werden oder = )

Allerdings funktioniert es leider nicht, es wird genau nichts ausgegeben. Ich hab das Script noch nicht alles 100%ig verinnerlicht aber langsam wirds.
In der ersten For-Schleife wird jede Datei einzeln ausgewählt. Dann werden in der 2ten Schleife alle Dateienzusammengesammelt die sich in den ersten 4 Zeiche gleichen. Wenn eine dieser Dateien >0 ist wird das flag auf 0 gesetz. Ist am ende der Schleife das Flag immernoch auf eins sind also alle 3 Datein 0kb groß und können weg.

So ist jetzt meine Vorstellung wie das Script funktioniert, nur tut es das leider nicht

Edit: gänzlich unklar ist mir noch die Syntax mit den Variablen. Bei der deklarieung steht um delite normal da. Bei der Belegung auch. Beim auslesen des Werts in "%%". Ich dachte bisher immer Varibalen werden in %% oder mit % am Anfang geschrieben ?
Bitte warten ..
Mitglied: miniversum
18.09.2008 um 16:16 Uhr
Der Ablauf wie du ihn Beschrieben hast stimtm auch und war auch genau so geplant.
Bei der Verwendung von Variabeln benutzt man die mit % (bzw. mit ! wenn delayed expansion verwendet wird). Bei der Zuweisung von Werten mit set aber ohne %.
Ich hab das bei mir hier mal getestet jetzt und mich auf die Fehlersuche gemacht. Herausgekommen ist das hier:
01.
@echo off & setlocal 
02.
set "Ordner=" 
03.
set "filter=*.txt" 
04.
FOR /F "delims=" %%i in ('dir /B /A-D "%Ordner%%filter%"') do call:check "%%i" 
05.
goto:eof 
06.
 
07.
:check 
08.
set "filename=%~1" 
09.
if not exist "%Ordner%%filename%" goto:eof 
10.
set delit=1 
11.
FOR /F "delims=" %%j in ('dir /B /A-D "%Ordner%%filename:~0,4%%filter%"') do ( 
12.
set "size=" 
13.
FOR /F "skip=5 tokens=3 delims= " %%k in ('dir /A-D "%%~j"') do if not defined size ( 
14.
set "size=%%k" 
15.
if "%%k" neq "0" set delit=0 
16.
17.
18.
if "%delit%" equ "1" del "%Ordner%%filename:~0,4%%filter%" /Q 
19.
goto:eof
Die ermittlung der Größe ging schief udn daher stand imemr der Gleiche wert drin. Daher auch imemr die gleichen ergebnisse. So sollte es jetzt funktionieren (zumindest bei meinem kurzen Test hier).
Bitte warten ..
Mitglied: master-chief
19.09.2008 um 08:31 Uhr
Gute morgen miniversum,

Nach einer klitzekleinen änderung Funktioniert jetzt alles bestens.
(Zeile 13, in-klausel muss lauten ("%ordner%%%~j"), dann funktioniert alles prima)

Ich danke dir nochmal für deine MÜhe. Eine kleine Frage habe ich aber noch. Was bewirkt der ~ vor dem "j" in der dritten For-Schleife ?
Bitte warten ..
Mitglied: miniversum
19.09.2008 um 10:21 Uhr
%%j würde ja den Dateinamen darstellen.
%%~j Stellt auch den Dateinamen dar mit dem Unterschied dass eventuell vorhandene Anführungszeichen am Anfang und Ende (was bei Dateinamen mit Leerzeichen vielleicht vorkommen könnte) entfernt werden. Da der ganze ausdruck in anführungszeichen ist macht das allerdings nichts aus. Je nach dem kann mann auch ein einfaches %%j nehmen aber es stört auch nicht. Genauer kannst Du das nachlesen in der Hilfe zum for befehl (For /?).
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Löschen in Abhängigkeit vom verfügbaren Speicherplatz

gelöst Frage von hugohugoBatch & Shell5 Kommentare

Hallo Allerseits, ich sichere meine Daten per simplen copy-job auf wechselnde externe HDDs. Jeden Abend wird ein nach Tagesdatum ...

HTML

Abhängigkeiten in einer HTML-Datei finden

Frage von StefanKittelHTML8 Kommentare

Hallo, ich arbeite gerade an einem Projekt in PHP (7.0) um webseiten statisch abzulegen. Um alle Folgeseiten und Abhängigkeiten ...

Batch & Shell

Textdatei aus mehreren .sfx Dateien löschen

gelöst Frage von BustedDiceBatch & Shell3 Kommentare

Hallo zusammen brauch mal wieder Hilfe bei einem Batch.Ich möchte eine .txt mit dem Name hilfe.txt aus ca. 200 ...

Batch & Shell

Dateien in Abhängigkeit des Dateinamens auf eine bestimmte Zeichenzahl kürzen und verschieben

gelöst Frage von Booster07Batch & Shell11 Kommentare

Hallo zusammen, ich habe zwei Probleme, bei denen ich auf Eure kompotente Hilfe hoffe: Problem 1: Ich habe sehr ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 8 StundenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 12 StundenCPU, RAM, Mainboards5 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 1 TagRouter & Routing7 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...