phlegma
Goto Top

batch datei soll ihren eigenen ordner löschen

moinmoin,

also ich hab folgendes problem:

bastla und biber kennen meine installations konstellation schon, aber nochmal für alle die das hier lesen:

ich schreibe an einem längeren batch der eine installation darstellt und deren funktionen hat.

nun auch die deinstallation...

eigentlich ist das ja schön einfach

rd Installordner

und schon feddisch

ne, das reicht mir leider nicht vorallem weil sich die installation im selben ordner befindet und probleme bei diesem löschen auftreten
nun sollen auch wirklich keine reste der installation verbleiben....

also was hab ich gemacht:

echo @echo off >%temp%\instdel.bat
echo title L"schen... >%temp%\instdel.bat  
echo ping -n 3 127.0.0.1 ^>nul >>%temp%\instdel.bat
echo cd\ >>%temp%\instdel.bat
echo rd /s /q "%zielpfad%" >>%temp%\instdel.bat  
echo echo. >>%temp%\instdel.bat
echo if not exist "%zielpfad%" (echo  L"schen erfolgreich beendet!) else goto miss>>%temp%\instdel.bat  
echo color 02 >>%temp%\instdel.bat
echo echo. >>%temp%\instdel.bat
echo goto end >>%temp%\instdel.bat
echo :miss >>%temp%\instdel.bat
echo color 0c >>%temp%\instdel.bat
echo echo  L"schen fehlgeschlagen! >>%temp%\instdel.bat  
echo :end >>%temp%\instdel.bat
echo ping -n 6 127.0.0.1 ^> nul >>%temp%\instdel.bat
echo del /q %%0 ^>nul 2^>nul >>%temp%\instdel.bat
echo exit >>%temp%\instdel.bat
start %temp%\instdel.bat
goto end
::[...]
del /q %0

nun das problem hier:
die datei löscht sich zwar,keine reste, aber:
die anzeige:

Batch datei wurde nicht gefunden
C:\>

das muss weg

zudem sollte eine prüfmöglichkeit eröffnet werden, die nachprüft ob die dateien (hauptordner) auch wirklich gelöscht wurde.


aber ich weiß nimmer weiter, helft mir bitte!

grüße, Ph

Content-Key: 54007

Url: https://administrator.de/contentid/54007

Ausgedruckt am: 28.03.2024 um 09:03 Uhr

Mitglied: maneich
maneich 14.03.2007 um 18:31:51 Uhr
Goto Top
Hallo,

wenn Du diese Sache mal ganz logisch betrachtest, ist das doch klar.

Wenn Du innerhalb einer Batch den Ordner löschst in dem die Batch liegt, löschst du ja auch die Batch mit.

Die CMD.EXE oder auch die Command.com wollen diese Batch aber zu Ende führen und finden sie plötzlich nicht mehr, also hagelt es Fehlermeldungen.

Du hast hier 2 Möglichkeiten:

1. Du erstellst in der ausführenden Batch vorher eine Batch außerhalb des zu löschenden Ordners mit dem Löschbefehl und setzt dann in den letzten Zeilen dieser Batch ein

cls
del /y %0>nul
und rufst diese ohne Call auf

und fertig ist das ganze.

2. gleicher Vorgang am Ende Deiner Batch, diese dann kopieren auserhalb des Ordners und
und aufrufen mit dem Parameter der Sprungvariablen.

MfG maneich
Mitglied: Phlegma
Phlegma 14.03.2007 um 19:18:16 Uhr
Goto Top
hi maneich,

danke für den vortrag, allerdings tritt das auch schon aus meinem post hervor wenn du genau liest... (beachte besonders codestreifen)

es is nur ein bischen komplizierter bei mir...
Mitglied: maneich
maneich 15.03.2007 um 00:46:12 Uhr
Goto Top
Hallo,

nun ja ich habe Deinen Codestreifen schon gelesen und daraus auch mein Urteil gebildet.

Mit cd\ in der 4. Zeile verlegst Du zwar die Ausführung der Batch auf das Drive und mit rd in der 5. Zeile löschst Du den Ordner. Aber

1. Deine Batch liegt physisch immer noch im gelöschten Ordner und der ist weg, also auch Deine Batch.
2. Nach dem löschen des Ordners läuft Deine Batch weiter obwohl sie nicht mehr vorhanden ist.

%0 setzt sich zusammen aus Laufwerk:\Verzeichnispfad\Dateinamen. Der pysische Verzeichnispfad existiert aber nach RD... nicht mehr.

Ergo, mit Cd\... kannst Du zwar die Ausführung einer Batch sonst wohin verlegen, es wird aber von dort immer auf den tatsächlichen Speicherort der Datei zurückgegriffen.

Selbst nachdem Du die Batch mit del /y löschen willst, was ja nicht mehr geht,da der Verzeichnispfad nicht mehr vorhanden ist, hast du noch weitere Zeilen in Deiner Batch angehängt, obwohl normal auch hier die Batch nicht mehr vorhanden ist.

Ein del %0 klappt nur in der letzten Zeile einer Batch, nachdem bereits vorher das Fenster geschlossen wurde. Insbesondere nach RD Order_xyz ist jede weitere Zeile in Deiner Batch sinnlos, da die Batch nicht mehr vorhanden ist.

Du muß also die Batch zum löschen von Verzeichnis und (neuer) Batch schon pysisch mit copy nach außerhalb des Ordners verlegen, wie auch bereits in meinem ersten Thread dargelegt,

MfG maneich
Mitglied: Phlegma
Phlegma 15.03.2007 um 12:36:05 Uhr
Goto Top
hi,

danke,

beachte bitte dass ich hier die hauptbatch gepostet habe (und auch nur teilweise);
diese liegt im ordner %zielpfad%, spielt keine rolle, normalerweise ist das C:\Programme\XXX...
nun, diese erstellt (wie auch im codestreifen ersichtlich) eine batch im %temp% um den ganzen ordner %zielpfad% zu löschen, weil meine batch sich nicht selbst, und schon gar nicht den ordner mitlöschen kann (sie ist in eine exe convertiert).

also vorgang:
%temp%-batch wird geschrieben
der ping ist dafür dass gewartet wird bis die hauptbatch ausläuft...
das cd\ ist dafür dass die commando zeile sich nichtmehr bei %zielpfad% befindet
dann wird der ordner gelöscht
(bis hierhin keine probleme!) hauptbatch und ordner sind weg

jetzt muss die batch noch prüufen ob alles weg ist, dann meldung machen und schließlich sich selbst löschen und ohne fehlermeldung! zudem sollte das consolenfenster wieder zu gehen!!

ich hoffe du/ihr verstehst nun genau wo mein problem liegt

vielen dank!

Ph
Mitglied: maneich
maneich 15.03.2007 um 17:42:29 Uhr
Goto Top
Hallo,

versuchs mal damit:

echo @echo off >%temp%\instdel.bat
echo title L"schen... >%temp%\instdel.bat
echo ping -n 3 127.0.0.1 ^>nul >>%temp%\instdel.bat
echo cd\ >>%temp%\instdel.bat
echo rd /s /q "%zielpfad%" >>%temp%\instdel.bat
echo echo. >>%temp%\instdel.bat
echo if not exist "%zielpfad%" (echo L"schen erfolgreich beendet!) else goto miss>>%temp%\instdel.bat
echo color 02 >>%temp%\instdel.bat
echo echo. >>%temp%\instdel.bat
echo goto end >>%temp%\instdel.bat
echo :miss >>%temp%\instdel.bat
echo color 0c >>%temp%\instdel.bat
echo echo L"schen fehlgeschlagen! >>%temp%\instdel.bat
echo :end >>%temp%\instdel.bat
echo ping -n 6 127.0.0.1 ^> nul >>%temp%\instdel.bat
echo cls>>%temp%\instdel.bat
echo del /q %%0 ^>nul 2^>nul >>%temp%\instdel.bat
%temp%\instdel.bat

Also das ist Deine Batch, nur am Ende etwas verändert.

Fenster wird vor dem löschen geschlossen, die Batch wird ohne Start aufgerufen.

Die Meldung sowie das offene Fenster kommen vom Interpreter CMD\Command, da die aufgerufene Batch nicht mehr gefunden wird. Die Start.exe kann sich nicht beenden wegen fehlender Batch , deshalb Fehlermeldung und das Fenster wird an den Interpreter übergeben.

Das Prüfen ob Haupordner gelöscht wurde hast Du ja eingebaut nur leider kannst Du das nicht sehen, weil die "pause" fehlt. Es wird zwar den Bruchteil einer Sekunde angezeigt. Deine Augen können dies nicht erfassen.

MfG maneich
Mitglied: Phlegma
Phlegma 15.03.2007 um 18:31:21 Uhr
Goto Top
hm gut, danke

aber jetzt am ende... wenn ich ohne start aufrufe, öffnet sich kein neues fenster, und ich kann die hautpbatch nicht beenden, da sie unter der neugestarteten läuft..oder nicht?

das cls ist gut!

gruß Ph
Mitglied: maneich
maneich 15.03.2007 um 20:42:46 Uhr
Goto Top
Hallo,

der Aufruf von %temp%\instdel.bat sollte eigentlich die letzte Zeile Deiner Hauptbatch sein; vielleicht danach noch eine Zeile mit cls.

Wenn Du mit Start arbeitest beibst Du ja in der Hauptbatch und diese wird gelöscht. Also ist Start in der Zwickmühle, findet die Datei nicht mehr mit der sie aufgerufen wurde.

Ein Batchaufruf ohne Start oder Call beendet die Hauptbatch und arbeitet die aufgerufene Batch ab. Da das alles schneller abläuft als das neus Fenster geöffnet ist, solltest Du das Fenster theoretisch wenn angezeigt wird löschen erfolgreich bzw. löschen nicht erfolgreich aber dies auch nur dann, wenn du hinter diesen beiden Zeilen eine Zeile mit Pause setzt.

Die Hauptbatch läuft nicht unter der neugestarteten Batch, sie wird mit dieser nur noch gelöscht.

Rufe mal CMD.EXE /? und überprüfe ob der Schalter /C eine eigene Instanz aufruft, die nach dem Ende der Befehle, hier Aufruf von %temp%\instdel.bat, sich selbst schließt. Kann möglicherweise auch ein anderer Schalter sein. Wenn ja und Du so nicht weiterkommst kannst Du es mal mit

cmd.exe /c %temp%\instdel.bat

als letzte Zeile versuchen.

MfG maneich
Mitglied: Phlegma
Phlegma 15.03.2007 um 21:11:15 Uhr
Goto Top
perfekt!

danke kurz getestet, sollte funktionieren!

vielen dank! Ph
Mitglied: Phlegma
Phlegma 18.03.2007 um 21:03:28 Uhr
Goto Top
hi, ich melde mich nochmal...
hab extra biber gebeten den thread nochmal zu öffnen...

nun hab allerdings dann doch noch selbst die lösung gefunden

der befehl zum starten muss dann

START CMD /C tempdatei

heißen.

der vorgang sollte dann funktionieren, zumindest hat er das bei mir, wenn die hauptdatei beendet ist bevor die löschung erfolgt.

grüße Ph