Dateien aus wechselnden Verzeichnissen löschen
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 37867
Url: https://administrator.de/forum/dateien-aus-wechselnden-verzeichnissen-loeschen-37867.html
Ausgedruckt am: 29.04.2025 um 13:04 Uhr
9 Kommentare
Neuester Kommentar
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:
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:
...
...
For /f %%i in ('dir /b /a:d d:\temp\matlab\Design*') do @rd %%i /s /q
...
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:
...
..
matlab.exe [parameter...]
set lastDesignDir=
if errorlevel 1 for /f %%i in ('dir /b /a:d /o:d c:\temp\matlab\design*') do set lastDesigndir=%%i
if defined lastdesigndir rd /s /q lastdesigndir
...
Sorry, Ozzily,
manchmal bin auch etwas schwer von Begriff... aber mit Geduld tasten wir uns ran...
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.
manchmal bin auch etwas schwer von Begriff... aber mit Geduld tasten wir uns ran...
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:
@echo off & setlocal
....
For %%i In ("%~p0.") Do (Set "thisDir=%%~ni")
@echo ThisDir:[%thisDir%] ...ab Stelle7 [%thisDir:~7%]
Set /a lfdnr=1%thisDir:~7% -1
set "dirVorher=Design_%lfdnr:~1%"
@echo dirVorher=Design_%lfdnr:~1%
if exist ..\%dirVorher% (
PushD ..\%dirVorher%
REM --- nun bist Du im Vorgängerverzeichnis "Design_0046"
REM Del dieseUndJene.dat
REM .....
PopD
REM ...wieder im Verzeichnis "Design_0047"
)
...
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.
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...
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
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...
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