Dateien aus wechselnden Verzeichnissen löschen

Mitglied: Ozzili

Ozzili (Level 1) - Jetzt verbinden

12.08.2006, aktualisiert 20.08.2006, 9228 Aufrufe, 9 Kommentare

Hallo,

ich habe folgendes Problem. Ich muß für ein Optimierungsprogramm eine Batch Datei schreiben. Dabei sollen bestimmte Daten in ein Verzeichnis kopiert werden, dann soll ein Simulationsprogramm (MATLAB) ausgeführt werden und schließlich sollen Dateien, die zur Auswertung nicht benötigt werden gelöscht werden.

Mein Programm sah bisher so aus:

copy c:\Verzeichnis\Datei1 .
copy c:\Verzeichnis\Datei2 .
copy c:\Verzeichnis\Datei3 .

Führe Matlab file aus

del Datei2

Das Optimierungsprogramm führt dabei 500 Einzelsimulationen durch und legt für jede Simulation ein Verzeichnis an. Vor der ersten Simulation legt es ein Verzeichnis mit dem Namen "Design_0001" an, dann führt es die Batch Datei aus. Nach einem Lauf legt es dann das Verzeichnis "Design_0002" an, und führt das Batch Programm aus.

Das Problem ist, daß wenn die Matlab Simulation fehlschlägt, das Optimierungsprogramm alle laufenden Befehle unterbricht und zur nächsten Simulation übergeht, d.h. in der Batch Datei der Teil unter dem Matlabbefehl nicht mehr ausgeführt wird. Dadurch werden die nicht benötigten Dateien im "Design_wxyz" nicht gelöscht und es sammeln sich riesige Datenmengen an.
Also hatte ich mir überlegt, einfach im Batch Programm am Anfang die Dateien des Vorgängerlaufs zu löschen. D.h. das Batch Programm müßte den aktuellen Verzeichnisnamen auslesen können, um dann die Dateien im Vorgängerverzeichnis zu löschen.

Leider kenne ich mich überhaupt nicht damit aus und es wäre nett, wenn mir jemand helfen könnte. Achja, Betriebssystem Win XP.

Viele Grüße,
Ozzili
Mitglied: Biber
12.08.2006 um 20:39 Uhr
Moin Ozzili,

wilkommen im Forum.
Wenn c:\temp\matlab das Verzeichnis wäre, unter dem diese "Design_????"-Ordner angelegt werden, dann bau folgendes in Deinen Batch ein:
Gruß
Biber

[Edit]
Grad gemerkt, Du willst ja wohl gar nicht alle Design_*-Verzeichnisse löschen, sondern nur diejenigen, die für einen abgebrochenen MatLab-Lauf angelegt wurden.
Wenn dem so ist, dann wäre der "richtige" Weg, den ErrorLevel des jeweiligen MatLab-Laufs zu prüfen und das "jüngste" Design_*-Verzeichnis zu löschen, falls ErrorLevel einen Fehler anzeigt.

sprich:
Bitte warten ..
Mitglied: Ozzili
12.08.2006 um 21:14 Uhr
Hallo und danke für Deine Hilfe erstmal.
Leider hab ich mich wohl schlecht ausgedrückt, denn das Problem ist ein wenig komplizierter.

Ich benutze für meine Arbeit ein Optimierungsprogramm (optiSLang), in diesem gebe ich die batch Datei an. Das Optimierungsprogramm führt 500 Simulationen durch. Das bedeutet für den ersten Lauf, es startet die batch Datei und führt die darin enthaltenen Befehle aus. Zunächst kopiert diese Datei einige Daten in das Designverzeichnis Design_0001, das optiSLang für jeden dieser 500 Läufe anlegt. Dort startet es dann MatLab mit dem Befehl

matlab /nosplash /nojvm /r skript

Ist die einzelne Matlab Simulation beendet, so führt es den Rest der Batch-Datei aus. Dieser enthält den Befehl, unbenötigte Dateien in diesem Verzeichnis zu löschen. Also nicht alle. Danach startet das Optimierungsprogramm den nächsten Lauf, es wird das nächste Designverzeichnis angelegt (Design_0002) und es beginnt von vorne. Usw.

Das Problem ist nun, daß nicht nur Matlab einen Lauf als ungültig ansehen kann (dann würde das batch Programm einfach zu ende ausgeführt), sondern daß optiSLang eine Zeitbeschränkung auferlegt wurde (in optiSLang), wie lang ein Lauf maximal dauern darf. Tritt also eine Zeitüberschreitung ein (was sehr oft passiert), dann beendet optiSLang automatisch Matlab und dummerweise auch die batch Datei, die dann nicht abgearbeitet wird und damit die Dateien nicht löscht. Das erzeugt dann dummerweise riesige Dateimengen.

Mein Gedanke war nun also, daß die Batch-Datei die nicht benötigten Dateien des vorherigen Laufs zu Anfangs löscht und danach erst die neuen Dateien kopiert und Matlab startet.

Das Problem dabei ist, daß die Batch Datei sich z.B. vor zweiten Lauf im Verzeichnis "Design_0002" befindet, ich aber Dateien aus Verzeichnis "Design_0001" löschen will und danach wieder in das Verzeichnis "Design_0001" wechseln, die neuen Dateien kopieren und MATLAB starten möchte.

Ich hoffe, ich habe das Problem halbwegs verständlich erklärt.

Viele Grüße,
Ozzili
Bitte warten ..
Mitglied: Ozzili
12.08.2006 um 21:17 Uhr
Nachtrag: Die betreffenden Dateien sollen immer gelöscht werden, nicht nur im Falle eines Abbruchs! Darum die Idee, die Dateien des vorherigen Designs vor dem aktuellen Lauf löschen zu lassen.

Viele Grüße,
O.
Bitte warten ..
Mitglied: Biber
12.08.2006 um 23:46 Uhr
Sorry, Ozzily,

manchmal bin auch etwas schwer von Begriff... aber mit Geduld tasten wir uns ran... ;-) face-wink

also... angenommen einer der vielen Bätsche startet .... z.B. der im Unterverzeichnis "Design_0047"...
..dann sollte in diesem und in allen anderen Skripten stehen:
Gruß
Biber
P.S. Das wäre der Output der beiden @echo-Zeilen oben:
ThisDir:[design_0047] ...ab Stelle7 [0047]
dirVorher=Design_0046

Beide Echo-Zeilen sind nur zum Testen sinnvoll - danach auskommentieren.
Bitte warten ..
Mitglied: Ozzili
13.08.2006 um 00:43 Uhr
Ah, vielen Dank! Da sieht sehr vielversprechend aus. Werde es morgen auf der Arbeit gleich mal ausprobieren. Dankeschön!
Bitte warten ..
Mitglied: Ozzili
13.08.2006 um 21:30 Uhr
Sodele, ein kleiner Test verlief prima und hat schön funktioniert. In der harten Realität sah es aber anders aus. Irgendwie hat's nicht geklappt. Aber egal. Habe jetzt einfach den Befehl del /s eingebaut. Dann isses auch wurscht, ob 5,10 oder 100 Simulationen fehlschlagen. Solange eine durchkommt, rasiert sie die Dateien aus den anderen Simulationen auch weg.

Is leider nicht sehr elegant, aber funktioniert.

Vielen Dank für Deine Mühe, Biber. Für den Moment muß dann eben die Holzhammer Methode reichen, statt der schönen Lösung von Dir.

Viele Grüße,
Ozzili
Bitte warten ..
Mitglied: Biber
16.08.2006 um 12:34 Uhr
Hm, Ozzili,

ich kann natürlich damit leben, wenn meine Skizze in der Realität nicht funktioniert und Du nun doch alles pauschal wegschrubbelst...

...aber interessieren würde mich der Denkfehler schon. Was tut denn in der Realität nicht?

Gruß
Biber
Bitte warten ..
Mitglied: Ozzili
16.08.2006 um 15:58 Uhr
Es ist mir auch nicht verständlich.

In dem Optimierungsprogramm, das die .bat ausführt, sieht man jeden Schritt, den das Batch gerade abarbeitet. Daran ist ganz klar zu erkennen, daß er sich jeweils in einem der Design Verzeichnisse befindet. Aber löschen tut er dennoch nicht. Er macht alle anderen Befehle, die ich eingebaut habe ohne Murren, nur eben das Löschen nicht. Ich hab wirklich keine Ahnung warum er das nicht tut. Dieser Teil steht dann auch nicht im Optimierungsprogramm.
Die Batch-Datei ist so aufgebaut, daß es erst die Dateien in das aktuelle Verzeichnis kopiert, dann mit Hilfe Deines Stücks die Dateien aus dem vorherigen Verzeichnis löscht, dann MATLAB ausführt.
Im Optimierungsprogramm wird der Kopiervorgang gezeigt und danach direkt MATLAB gestartet. Keine Fehlermeldungen bei der "Löschen" Stelle, diese wird gar nicht erwähnt. Ganz komisch.

Viele Grüße,
Ozzili
Bitte warten ..
Mitglied: Biber
20.08.2006 um 17:20 Uhr
Hm, Ozzili,

kann ichmir auch nicht erklären. Bei mir klappt es auch, wenn ich es hier teste.
Einzige (schwache) Erklärung wäre, dass sich die jeweilige Batchdatei ("%~p0.") eben nicht in dem Verzeichnis "...\..\Design_0047" befindet.

Aber das würdest Du ja auch erkennen an der "ECHO %thisdir%"-Ausgabe...

Kurz gesagt, ich muss da passen - keine Idee mehr... :-( face-sad

Deshalb meine Bitte: Wenn Du jetzt eine andere Lösung gefunden hast, setze bitte diesen Beitrag auf gelöst.

Danke und schönen Sonntag
Biber
Bitte warten ..
Heiß diskutierte Inhalte
Zusammenarbeit
Klimaschutz
NebellichtVor 22 StundenTippZusammenarbeit48 Kommentare

Hallo friends, (friends in Anlehnung an die vielen Fs in dem englischen von FFF: fridays for future. Übrigens am 19.03.2021 gibts wieder einen globalen ...

Notebook & Zubehör
Tipp für festgefressene Scharniere bei Lenovo V120 Notebook?
gelöst LochkartenstanzerVor 1 TagFrageNotebook & Zubehör20 Kommentare

Moin Kollegen, Ich habe hier ein Lenovo V120 mit einem laut Internet üblichen Problem von "festgefressenen" Scharnieren. Ich könnte jetzt aufwendig das Notebook zerlegen ...

Microsoft Office
Microsoft365 und Outlook verbinden
ratzekahl1Vor 1 TagFrageMicrosoft Office30 Kommentare

Guten Morgen zusammen, ich habe einige Probleme / Fragen. Ich habe Office 365 auf den ersten Rechnern installiert. Admin angelegt, Benutzer usw. Da ich ...

Microsoft Office
Wechsel von Office - Exchange on premise zu Office 365 - Exchange Online
jann0rVor 1 TagAllgemeinMicrosoft Office14 Kommentare

Moin, ich weiß nicht so richtig, unter welche Überschrift man dieses Thema hier am besten packen kann, daher mal als allg. Beitrag / Erfahrungsbericht. ...

Viren und Trojaner
Ryuk Ransomware Warnzeichen
SchlemihlVor 1 TagFrageViren und Trojaner8 Kommentare

Guten Abend, nachdem ich hier und hier erfahren habe, wie sich die Ransomware Ryuk verhält, musste ich feststellen, dass unser kleines Netzwerk für eine ...

Internet
Sichere Verbindung von zu Hause zu einem Firmenpc
haiflosseVor 1 TagFrageInternet6 Kommentare

Hallo! Ich suche eine Lösung mit der ich eine sichere Verbindung (ohne das ein Virus, Trojaner oder Ransom Virus den Computer bzw. Netzwerk zerstört) ...

Windows 10
Leeres Desktop bei neuen Usern - möglich?
gelöst istike2Vor 1 TagFrageWindows 104 Kommentare

Hallo, in dem aktuellen Windows 10 Image haben wir leider vergessen das Desktop zu bereinigen. Wir haben also bei jedem neuen User einen vollen ...

TK-Netze & Geräte
2 x VPN site-to-site möglich?!
RicoPausBVor 1 TagFrageTK-Netze & Geräte6 Kommentare

Moin aktuell haben wir hier ein site-to-site vpn via IPsec. Das ganze läuft stabil aber langsam mit 2 x AVM6490 an Vodafone-Anschlüssen. Nun gibt ...