Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

batch datei soll ihren eigenen ordner löschen

Frage Entwicklung Batch & Shell

Mitglied: Phlegma

Phlegma (Level 1) - Jetzt verbinden

13.03.2007, aktualisiert 18.03.2007, 7167 Aufrufe, 9 Kommentare

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:

01.
echo @echo off >%temp%\instdel.bat 
02.
echo title L"schen... >%temp%\instdel.bat 
03.
echo ping -n 3 127.0.0.1 ^>nul >>%temp%\instdel.bat 
04.
echo cd\ >>%temp%\instdel.bat 
05.
echo rd /s /q "%zielpfad%" >>%temp%\instdel.bat 
06.
echo echo. >>%temp%\instdel.bat 
07.
echo if not exist "%zielpfad%" (echo  L"schen erfolgreich beendet!) else goto miss>>%temp%\instdel.bat 
08.
echo color 02 >>%temp%\instdel.bat 
09.
echo echo. >>%temp%\instdel.bat 
10.
echo goto end >>%temp%\instdel.bat 
11.
echo :miss >>%temp%\instdel.bat 
12.
echo color 0c >>%temp%\instdel.bat 
13.
echo echo  L"schen fehlgeschlagen! >>%temp%\instdel.bat 
14.
echo :end >>%temp%\instdel.bat 
15.
echo ping -n 6 127.0.0.1 ^> nul >>%temp%\instdel.bat 
16.
echo del /q %%0 ^>nul 2^>nul >>%temp%\instdel.bat 
17.
echo exit >>%temp%\instdel.bat 
18.
start %temp%\instdel.bat 
19.
goto end 
20.
::[...] 
21.
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
Mitglied: maneich
14.03.2007 um 18:31 Uhr
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
Bitte warten ..
Mitglied: Phlegma
14.03.2007 um 19:18 Uhr
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...
Bitte warten ..
Mitglied: maneich
15.03.2007 um 00:46 Uhr
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
Bitte warten ..
Mitglied: Phlegma
15.03.2007 um 12:36 Uhr
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
Bitte warten ..
Mitglied: maneich
15.03.2007 um 17:42 Uhr
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
Bitte warten ..
Mitglied: Phlegma
15.03.2007 um 18:31 Uhr
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
Bitte warten ..
Mitglied: maneich
15.03.2007 um 20:42 Uhr
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
Bitte warten ..
Mitglied: Phlegma
15.03.2007 um 21:11 Uhr
perfekt!

danke kurz getestet, sollte funktionieren!

vielen dank! Ph
Bitte warten ..
Mitglied: Phlegma
18.03.2007 um 21:03 Uhr
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

01.
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch - Datei aus Ordner einlesen mit Ausnahmen! (4)

Frage von Daedrafaction zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...