Supportnet / Forum / Windows98
DOS-Anwendung per Usereingabe (?) von Windows beenden lassen
Frage
Guten Abend,
ich bin mit Dos nicht sonderlich bewandert und hätte eine Frage zum Schreiben einer Batchdatei.
Sie wird per Autostart beim Rechnerstart ausgeführt und soll auf das Verzeichnis C:\XYZ aufmerksam machen, bzw. zur Wahl stellen, ob dieses Verzeichnis vom User gelöscht werden soll oder nicht:
@echo off
echo.
echo Lösche den Ordnerinhalt von XYZ auf C:
echo =======================================
echo.
echo Nein?
echo Klick auf X - Schliessen
?
echo.
echo Ja?
pause
cls
deltree /y C:\XYZ
echo.
echo Klick auf X - Schliessen...
Problem: Wenn man gleich als Erstes "nein? bestätigen will und das Fenster rechts oben mit X wegklickt, erscheint ein lästiger Hinweis, dass Windows die Anwendung nicht beenden kann ... ob man die Informationen verlieren will ... und man muss dies zusätzlich mit "Ja" beenden/wegklicken.
Wie könnte man die Batch im Bereich des Fragezeichens so abändern, dass nach "Nein?" das DOS-Fenster sofort verschwindet?
Grüße
Antwort 1 von batti-batch
Hallo Echo_On,
der Befehl zum Beenden der aktuellen Instanz des Kommandozeileninterpreters lautet EXIT.
Schau Dir in Zusammenhang mit Deinem Problem auch mal den Beitrag https://supportnet.de/threads/1638134 an; dort habe ich in Antwort 8 ein kleines Auswahlmenü vorgestellt.
Diese Lösung kannst Du sicher sehr leicht an Deine Bedürfnisse anpassen.
Viel Erfolg!
Herzliche Grüße
batti-batch
der Befehl zum Beenden der aktuellen Instanz des Kommandozeileninterpreters lautet EXIT.
Schau Dir in Zusammenhang mit Deinem Problem auch mal den Beitrag https://supportnet.de/threads/1638134 an; dort habe ich in Antwort 8 ein kleines Auswahlmenü vorgestellt.
Diese Lösung kannst Du sicher sehr leicht an Deine Bedürfnisse anpassen.
Viel Erfolg!
Herzliche Grüße
batti-batch
Antwort 2 von Echo_On
Zitat:
der Befehl zum Beenden der aktuellen Instanz des Kommandozeileninterpreters lautet EXIT.
der Befehl zum Beenden der aktuellen Instanz des Kommandozeileninterpreters lautet EXIT.
Hallo,
ja, der Befehl war mir zwar bekannt, nur konnte ich ihn hier irgendwie nicht richtig unterbringen/verwenden ...
- wenn ich also schreibe:
@echo off
echo.
echo Loescht den Ordnerinhalt von XYZ auf C:
echo =======================================
echo.
echo Nein?
echo Klick auf X - Schliessen
exit
echo.
echo Ja?
pause
cls
deltree /y C:\XYZ
echo.
echo Klick auf X - Schliessen
... so erscheint im Fenster lediglich der Text
Loescht den Ordnerinhalt von XYZ auf C:
===============================
Nein?
Klick auf X - Schliessen
... und der ganze obige Rest des Texts zum Bestätigen des Löschens mit "Ja" fehlt ... :-(
Wie sähe der Batchtext denn nun konkret aus?
Grüße
Antwort 3 von batti-batch
Hallo Echo_On,
ich hatte leider erst nach dem Absenden meiner Antwort gesehen, das Du Deine Frage im Bereich Windows 98 gepostet hattest; mithin ist die von mir angesprochene Lösung (siehe Link in der Antwort 1) so garnicht machbar.
Da habe ich meinen Windows 98-Rechner reaktiviert und eine passende Batch zusammengebaut, die unter Windows 98 funktioniert.
Aber aufgepasst! Diese Lösung ist NUR bis Windows 98 lauffähig!
Zwei Kleinigkeiten musst Du noch den Gegebenheiten anpassen: den Verzeichnisnamen sowie, falls gewünscht, den MD-Befehl durch Entfernen des davorstehenden REM aktivieren. Damit würde das mit allen Dateien gelöschte Verzeichnis als leeres Verzeichnis wieder angelegt werden.
Hier also das Programm:
Das Programm wartet bei der Abfrage 10 Sekunden; wird bis dahin keine Taste gedückt, wird das Programm beendet.
Ist das Löschen des Verzeichnisses aus irgendwelchen Gründen fehlgeschlagen, wird das Programm nicht beendet und die Fehlermeldung bleibt auf dem Monitor.
Viel Spass beim Testen!
Herzliche Grüße
batti-batch
ich hatte leider erst nach dem Absenden meiner Antwort gesehen, das Du Deine Frage im Bereich Windows 98 gepostet hattest; mithin ist die von mir angesprochene Lösung (siehe Link in der Antwort 1) so garnicht machbar.
Da habe ich meinen Windows 98-Rechner reaktiviert und eine passende Batch zusammengebaut, die unter Windows 98 funktioniert.
Aber aufgepasst! Diese Lösung ist NUR bis Windows 98 lauffähig!
Zwei Kleinigkeiten musst Du noch den Gegebenheiten anpassen: den Verzeichnisnamen sowie, falls gewünscht, den MD-Befehl durch Entfernen des davorstehenden REM aktivieren. Damit würde das mit allen Dateien gelöschte Verzeichnis als leeres Verzeichnis wieder angelegt werden.
Hier also das Programm:
REM
REM Testprogramm
REM
REM Loeschen eines Verzeichnisses
REM nach Abfrage
REM
REM https://supportnet.de/threads/1691272
REM
REM (c) batti-batch
REM Batch erstellt am 04.03.2008
REM
REM Getestet unter Windows 98
REM Batch nur lauffaehig bis Windows 98
REM
CLS
REM Die nachfolgende Zeile muss angepasst werden
SET verzeichnis=a:\test
REM Wenn das Verzeichnis nicht existiert, wird
REM das Programm beendet
IF NOT EXIST "%verzeichnis%"\NUL EXIT
REM Auswahl, ob das Verzeichnis geloescht werden soll
REM mit sich anschliessender Abfrage des Errorlevels
CHOICE /c:JN /t:N,10 Wollen Sie das Verzeichnis "%verzeichnis%" loeschen
IF ERRORLEVEL 2 EXIT
IF ERRORLEVEL 1 DELTREE /y "%verzeichnis%"
IF EXIST "%verzeichnis%"\NUL GOTO :fehler
REM Falls das Verzeichnis wieder angelegt werden soll,
REM in der naechsten Zeile das REM entfernen
REM MD "%verzeichnis%"
EXIT
:fehler
ECHO Das Loeschen des Verzeichnisses "%verzeichnis%" ist fehlgeschlagen!
ECHO.
Das Programm wartet bei der Abfrage 10 Sekunden; wird bis dahin keine Taste gedückt, wird das Programm beendet.
Ist das Löschen des Verzeichnisses aus irgendwelchen Gründen fehlgeschlagen, wird das Programm nicht beendet und die Fehlermeldung bleibt auf dem Monitor.
Viel Spass beim Testen!
Herzliche Grüße
batti-batch
Antwort 4 von Echo_On
Hallo,
ich verzichte auf die Ja/Nein-Auswahl, simpelster "Gegen"Vorschlag, wiederum am Beispiel eines Ordners auf C:\ - des zu löschenden Papierkorbs (wenn er mal wieder defekt sein sollte und als Ganzes gelöscht werden muss^^):
@echo off
start /m deltree /y C:\recycled
Wird für diese Subminiatur-Batch ;-) eine Verknüpfung im Autostart-Ordner angelegt, wird
- bei Nichtanwesenheit des zu löschenden Ordners der DOS-Run sofort beendet
- bei Anwesenheit des zu löschenden Ordners der Ordner vollständig gelöscht - es erscheint keine Fehlermeldung
Durch den Deltree-Schalter "/m" wird das DOS-Fenster sofort minimiert und verschwindet in die Schnellstartleiste,
was
a) eine Info über den Löschvorgang bereitstellt, und mit Klick auf 'Beenden' ohne Fehlermeldung beendet werden kann (was mir lt. Fragestellung wichtig war, um unnötiges Geklicke zu vermeiden)
oder
b) eine lästige Info sein kann, da sie noch beendet werden sollte, damit sie nicht in der Schnellstartleiste stehen bleibt.
Letzteren Punkt zu beheben würde ich mir noch wünschen, ansonsten erfüllt die Batch bereits ihren Zweck.
Grüße
ich verzichte auf die Ja/Nein-Auswahl, simpelster "Gegen"Vorschlag, wiederum am Beispiel eines Ordners auf C:\ - des zu löschenden Papierkorbs (wenn er mal wieder defekt sein sollte und als Ganzes gelöscht werden muss^^):
@echo off
start /m deltree /y C:\recycled
Wird für diese Subminiatur-Batch ;-) eine Verknüpfung im Autostart-Ordner angelegt, wird
- bei Nichtanwesenheit des zu löschenden Ordners der DOS-Run sofort beendet
- bei Anwesenheit des zu löschenden Ordners der Ordner vollständig gelöscht - es erscheint keine Fehlermeldung
Durch den Deltree-Schalter "/m" wird das DOS-Fenster sofort minimiert und verschwindet in die Schnellstartleiste,
was
a) eine Info über den Löschvorgang bereitstellt, und mit Klick auf 'Beenden' ohne Fehlermeldung beendet werden kann (was mir lt. Fragestellung wichtig war, um unnötiges Geklicke zu vermeiden)
oder
b) eine lästige Info sein kann, da sie noch beendet werden sollte, damit sie nicht in der Schnellstartleiste stehen bleibt.
Letzteren Punkt zu beheben würde ich mir noch wünschen, ansonsten erfüllt die Batch bereits ihren Zweck.
Grüße
Antwort 5 von Echo_On
Edit: Durch den Start-Schalter "/m" ...
Antwort 6 von batti-batch
Hallo Echo_on,
wenn es jetzt nur noch darum geht, die Eingabeaufforderung zu schließen, kann man an dieser Stelle wiederum auf den EXIT-Befehl zurückgreifen.
Füge Deiner Batch in der letzten Zeile noch den EXIT-Befehl hinzu, so das sich folgendes Programm ergibt:
Damit wird sowohl das Programm als auch die Eingabeaufforderung beendet.
Ein lästiges Klicken entfällt damit.
Viel Spass beim Testen!
Herzliche Grüße
batti-batch
wenn es jetzt nur noch darum geht, die Eingabeaufforderung zu schließen, kann man an dieser Stelle wiederum auf den EXIT-Befehl zurückgreifen.
Füge Deiner Batch in der letzten Zeile noch den EXIT-Befehl hinzu, so das sich folgendes Programm ergibt:
@ECHO on
START /m DELTREE /y c:\reycled
EXIT
Damit wird sowohl das Programm als auch die Eingabeaufforderung beendet.
Ein lästiges Klicken entfällt damit.
Viel Spass beim Testen!
Herzliche Grüße
batti-batch
Antwort 7 von batti-batch
Hallo Echo_on,
ich hatte nicht gedacht, das da noch ein paar Tücken lauern.
Ich selber zusätzlich noch ein paar Tests gemacht; daraus ergab sich Folgendes:
Jetzt haben wir bald alle Möglichkeiten durch.
Herzliche Grüße
batti-batch
ich hatte nicht gedacht, das da noch ein paar Tücken lauern.
Ich selber zusätzlich noch ein paar Tests gemacht; daraus ergab sich Folgendes:
@ECHO on
START /m COMMAND /c DELTREE /y c:\reycled
EXIT
Jetzt haben wir bald alle Möglichkeiten durch.
Herzliche Grüße
batti-batch
Antwort 8 von Helfer1
Hi,
wenn sich das Fenster immer noch nicht von allein schliessen sollte, dann gibt es noch eine Möglichkeit. Beim Ausführen der Batch wird in gleichen Ordner einDOS-Link-Icon angelegt. Dort kannst du über die linke Maustaste unter "Eigenschaften/Programm" einen Haken "Beim Beenden schließen" reinmachen. Dann wird das Fenster auf jeden Fall geschlossen
wenn sich das Fenster immer noch nicht von allein schliessen sollte, dann gibt es noch eine Möglichkeit. Beim Ausführen der Batch wird in gleichen Ordner einDOS-Link-Icon angelegt. Dort kannst du über die linke Maustaste unter "Eigenschaften/Programm" einen Haken "Beim Beenden schließen" reinmachen. Dann wird das Fenster auf jeden Fall geschlossen
Antwort 9 von Helfer1
Sorry, Kontextmenü über rechte Maustaste.
Antwort 10 von Echo_On
Zitat:
@ECHO on
START /m DELTREE /y c:\reycled
EXIT
@ECHO on
START /m DELTREE /y c:\reycled
EXIT
Hatte ich schon, funktioniert so wenig wie
@ECHO off
START /m DELTREE /y c:\reycled
EXIT
Problem: der deltree /y-Befehl erzeugt eine Pause im Ablauf, man kann die batch damit so schreiben, dass eine ja/nein-Eingabe erfolgen muss.
Nur: Man muss es machen! Man muss klicken! Entweder die Eingabe, und/oder der Klick auf Beenden des DOS-Fensters...
Zitat:
@ECHO on
START /m COMMAND /c DELTREE /y c:\reycled
EXIT
@ECHO on
START /m COMMAND /c DELTREE /y c:\reycled
EXIT
Hat mein 98SE ein anderes DOS?^^
Das funktioniert bei mir rein gar nicht:
Command /c verhindert gar das Löschen des Verzeichnisses, mit Echo on lässt sich das Fenster überhaupt nicht mehr wegklicken, erst mit Echo off und Command /c an anderer Stelle wird wieder gelöscht - nur: das oben beschriebene Problem - der Klick auf Beenden des DOS-Fensters - bleibt bestehen!
Zitat:
ich hatte nicht gedacht, das da noch ein paar Tücken lauern.
ich hatte nicht gedacht, das da noch ein paar Tücken lauern.
Tja, das' 'n Ding, was?^^
Am besten funkt (zumindest bei mir) immer noch das
@echo off
start /m deltree /y c:\recycled
aus AW4. Die Frage bleibt aber nach wie vor:
Was für eine Konstellation/welcher Befehl beendet die Batch automatisch?
Gruß
Antwort 11 von Echo_On
Zitat:
wenn sich das Fenster immer noch nicht von allein schliessen sollte, dann gibt es noch eine Möglichkeit. Beim Ausführen der Batch wird in gleichen Ordner einDOS-Link-Icon angelegt. Dort kannst du über die linke Maustaste unter "Eigenschaften/Programm" einen Haken "Beim Beenden schließen" reinmachen.
wenn sich das Fenster immer noch nicht von allein schliessen sollte, dann gibt es noch eine Möglichkeit. Beim Ausführen der Batch wird in gleichen Ordner einDOS-Link-Icon angelegt. Dort kannst du über die linke Maustaste unter "Eigenschaften/Programm" einen Haken "Beim Beenden schließen" reinmachen.
Ja nun, ... beim Ausführen der Batch wird der Ordner unmittelbar gelöscht - da ist nichts mehr anzuhaken...^^
Ich hatte allerdings in der pif-Verknüpfung der Batch im Schnellstartverzeichnis das "Beim Beenden schließen" angehäkelt:
Es bringt nichts! Die Batch wird nicht automatisch geschlossen!
Gruß
Antwort 12 von Helfer1
@ Echo_On
zu AW4
...Da stimmt dein Code nicht, wenn sich dein Fenster nicht schleßt. Stell ihn mal hier rein.
zu AW4
...Da stimmt dein Code nicht, wenn sich dein Fenster nicht schleßt. Stell ihn mal hier rein.
Antwort 13 von Echo_On
Tscha, das Fenster schließt - laut Eigenschaftsfenster - eben "Beim Beenden schließen", insofern scheint mir das erklärbar, denn der Deltree-Befehl wird vom User beendet, Eigenzitat aus AW10: erzeugt eine Pause im Ablauf bla bla. Nur: Man muss es machen! Ihn nämlich "von Hand" beenden, was dämlich ist ... :-(
Gibbets denn da wirklich kein vorausschauender oder nach zügelnder Befehl? ;-)
Gruß
Gibbets denn da wirklich kein vorausschauender oder nach zügelnder Befehl? ;-)
Gruß
Antwort 14 von Helfer1
Die Abfrage mit den 10 sec. Pause muss raus. Dann schliesst auch das Fenster von allein.
Antwort 15 von Echo_on
Am Deltree-Verhalten ändert das nichts, damit schließt sich nicht automatisch das Fenster.
Aber schreib doch bitte deine Version mal so hin, wie du meinst, dass sie funktioniert
Aber schreib doch bitte deine Version mal so hin, wie du meinst, dass sie funktioniert
Antwort 16 von Helfer1
Hier mein Vorschlag. Diese Batch funktioniert bei mir unter Win98.
Die Pfade und Ordner noch deinen Bedürfnissen anpassen und den Code als delete.bat in einen beliebigen Ordner ablegen und eine Verknüpfung zur delete.bat in den Autostartordner ablegen. Fertig!
@echo off
echo.
echo delete.bat R.P.
echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Benutzer-Infos ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo ³ ³Û
echo ³ Lösche den Ordnerinhalt von XYZ auf C: ³Û
echo ³ ³Û
echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
echo ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
echo.
echo.
Choice /C:JN - Soll der Ordnerinhalt gelöscht werden? *
If Errorlevel 2 goto ABBRUCH
REM Es wird das gesamte Verzeichnis mit Unterverzeichnissen gelöscht.
deltree /y c:\xyz
REM und erstellen eines neuen leeren Ordners, dann REM entfernen.
REM md c:\xyz
exit
:ABBRUCH
exit
Die Pfade und Ordner noch deinen Bedürfnissen anpassen und den Code als delete.bat in einen beliebigen Ordner ablegen und eine Verknüpfung zur delete.bat in den Autostartordner ablegen. Fertig!
Antwort 17 von Helfer1
Nachtrag:
...und natürlich nicht vergessen in der Batch unter "Eigenschaften/Programm" einen Haken "Beim Beenden schließen" reinzumachen.
...und natürlich nicht vergessen in der Batch unter "Eigenschaften/Programm" einen Haken "Beim Beenden schließen" reinzumachen.
Antwort 18 von Echo_on
Wenn ich das in schnörkelloser Form schreiben darf (zum verstehen)...
- nochmal am Beispiel des Recycled-Ordners:
@echo off
Choice /C:JN - Soll der Ordnerinhalt gelöscht werden? *
If Errorlevel 2 goto ABBRUCH
REM Es wird das gesamte Verzeichnis mit Unterverzeichnissen gelöscht.
deltree /y c:\recycled
REM und erstellen eines neuen leeren Ordners, dann REM entfernen.
REM md c:\recycled
exit
:ABBRUCH
exit
Also mit ja/nein Auswahl - das funktioniert jetzt bei mir einwandfrei.
Wermutstropfen: beim Start des DOS-Fensters ist dies inaktiv, bevor man also "J" oder "N" drücken kann, muss man erst das Fenster mit der Maus anklicken
Habe mir erlaubt, die Batch so umzuschreiben:
@echo off
If Errorlevel 2 goto x
deltree /y c:\recycled
exit
:x
exit
Plus anhaken in der DOS-Verknüpfung automatisch beenden natürlich.
Nun wird ohne irgendwelche Nachfragen/Zutun des Users das Verzeichnis beim Start gelöscht. Man sieht nur kurz das DOS-Fenster aufblitzen ...
So ist es jetzt ideal für mich
Gruß
- nochmal am Beispiel des Recycled-Ordners:
@echo off
Choice /C:JN - Soll der Ordnerinhalt gelöscht werden? *
If Errorlevel 2 goto ABBRUCH
REM Es wird das gesamte Verzeichnis mit Unterverzeichnissen gelöscht.
deltree /y c:\recycled
REM und erstellen eines neuen leeren Ordners, dann REM entfernen.
REM md c:\recycled
exit
:ABBRUCH
exit
Also mit ja/nein Auswahl - das funktioniert jetzt bei mir einwandfrei.
Wermutstropfen: beim Start des DOS-Fensters ist dies inaktiv, bevor man also "J" oder "N" drücken kann, muss man erst das Fenster mit der Maus anklicken
Habe mir erlaubt, die Batch so umzuschreiben:
@echo off
If Errorlevel 2 goto x
deltree /y c:\recycled
exit
:x
exit
Plus anhaken in der DOS-Verknüpfung automatisch beenden natürlich.
Nun wird ohne irgendwelche Nachfragen/Zutun des Users das Verzeichnis beim Start gelöscht. Man sieht nur kurz das DOS-Fenster aufblitzen ...
So ist es jetzt ideal für mich
Gruß
Antwort 19 von Helfer1
Ich frage mich, warum es bei dir nicht funktionieren will?
Um den Code noch mehr zu vereinfachen, kannst du auch noch die IF-Anweisung weglassen. Sie ist bei deinen Code sinnlos, da kein Bezug besteht. Du kannst evtl. noch eine Pause einfügen. Dann bleibt das Fenster offen, bis der Löschvorgang auf Tastendruck gestartet wird.
@echo off
pause
deltree /y c:\recycled
exit
Um den Code noch mehr zu vereinfachen, kannst du auch noch die IF-Anweisung weglassen. Sie ist bei deinen Code sinnlos, da kein Bezug besteht. Du kannst evtl. noch eine Pause einfügen. Dann bleibt das Fenster offen, bis der Löschvorgang auf Tastendruck gestartet wird.
@echo off
pause
deltree /y c:\recycled
exit
Antwort 20 von Echo_off
Zitat:
Ich frage mich, warum es bei dir nicht funktionieren will?
Ich frage mich, warum es bei dir nicht funktionieren will?
Häh??