# Mit Batch-Datei verzeichnisse löschen



## grindelaner (26. Nov 2009)

Ich will eine Batch-Datei schreiben, mit der man ein Verzeichnis komplett löscht. (Inklusive Unterordner und Dateien)

Dafür habe ich eine Batch-Datei erstellt:


```
@echo off
echo entferne Anwendung
ping -n 1 -w 5000 1.2.3.4
RD /S /Q "C:\Programme\Anwendung"
```

Diese Datei funktioniert auch so weit, wenn ich diese direkt starte. Starte ich diese Datei aber aus Java heraus, werden *nur* die Dateien gelöscht.


```
String[] cmd = {"cmd", "/c", anwendungPath + "/cleanup.bat"};
        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command(cmd);
        try {
          processBuilder.start();
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
```

Kann es sein, dass eine BAT-Datei sich anders verhält, wenn Sie aus Java heraus aufgerufen wird?


----------



## FArt (26. Nov 2009)

grindelaner hat gesagt.:


> Kann es sein, dass eine BAT-Datei sich anders verhält, wenn Sie aus Java heraus aufgerufen wird?



Nein.


----------



## max40 (26. Nov 2009)

andere Frage, warum benutzt du nicht Java zum löschen?
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14 Dateien und Datenströme


----------



## grindelaner (26. Nov 2009)

Nach Beenden der Java-Anwendung will ich diese Anwendung automatisch löschen. Darum kann ich nicht Java zum löschen nutzen.

Die Anwendung ruft über... 

```
Runtime.getRuntime().addShutdownHook(new Thread() {...});
```
...die besagte bat-Datei auf.


----------



## KrokoDiehl (26. Nov 2009)

> Nach Beenden der Java-Anwendung will ich diese Anwendung automatisch löschen.


Eine sich selbst vernichtende Anwendung?


----------



## eRaaaa (26. Nov 2009)

grindelaner hat gesagt.:


> Nach Beenden der Java-Anwendung will ich diese Anwendung automatisch löschen. Darum kann ich nicht Java zum löschen nutzen.
> 
> Die Anwendung ruft über...
> 
> ...



ist die anwedung denn eine jar oder dergleichen? ich hab das selber noch nie gemacht, aber du kannst dir ja ein file-objekt erstellen, mit dem pfad zur aktuellen jar, und dann einfach mit folgender methode löschen lassen:


> deleteOnExit()
> Requests that the file or directory denoted by this abstract pathname be deleted when the virtual machine terminates.



ob das nun so funktioniert wie du dir das vorstellst--> wie gesagt, noch nie gemacht


----------



## grindelaner (26. Nov 2009)

Jop 

Problem ist, dass die bat-Datei nicht genau das macht, was sie machen soll...


----------



## grindelaner (26. Nov 2009)

deleteOnExit() Löscht zwar Dateien und auch Verzeichnise... Aber die Anwendung kann sich nicht selber löschen...  darum die Bat-Datei...


----------



## KrokoDiehl (27. Nov 2009)

Aber wird die Bat-datei nicht auch das gleiche Problem haben? Du startest aus deiner Java-Anwendung heraus ein Prozess, der die bat ausführt. Diese will dein Java-Programm löschen, wird aber merken, dass diese noch benutzt wird...

Ansonsten kann ich mir nur vorstellen, dass die Pfade bzw. das Arbeitsverzeichnis der Bat anders sind, wenn du sie aus dem Java-Programm aus aufrufst. Sie wird in dem Fall wohl dessen Arbeitsverzeichnis haben.


----------



## FArt (27. Nov 2009)

Noch ein Tipp: der "wait-Versuch" über den Ping funktioniert nicht zuverlässig. Verschiedene Router antworten nämlich u.U. sofort, auch wenn der angefragte Host nicht existiert.

Überdenke dein Vorhaben noch einmal, das ist schon eine sehr seltsame Anforderung.


----------

