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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 54007
Url: https://administrator.de/contentid/54007
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
9 Kommentare
Neuester Kommentar
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
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
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
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
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
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
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
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