Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Microsoft Windows 7

GELÖST

Batch Programmierung - Child Prozess mit rmdir -s -q hinterlässt leeren Ordner

Mitglied: fred08155

fred08155 (Level 1) - Jetzt verbinden

14.05.2014, aktualisiert 15.05.2014, 1631 Aufrufe, 6 Kommentare

Hallo

Ich hab mir etwas im Kommandozeile (Batch) programmiert.
Das Programm läuft super. Um es noch etwas anwendungsfreundlicher zu machen, habe ich einen "Installer" (kopiert das Programm rüber und erstellt eine Verknüpfung [über ein VB-Skript]) und einen "Deinstaller" erstellt.

Beim Deinstallationsbatch habe ich aber ein Problem.
Der Batch schreibt über echo einen weiteren Batch ins temporäre Verzeichnis, der den Installationsordner und die Verknüpfung löschen soll und sich am Ende dann selbst vernichtet.
Allerdings hinterlässt mir dieser Batch einen leeren Installationsordner. Ich kann mir nicht erklären, warum das so ist.
Der Befehl ist OK und wenn ich den Batch separat ausführe funktioniert er auch und löscht das Verzeichnis komplett weg.
Ist das irgendeine Art Rechteproblem oder sowas?
Wie kann ich das umgehen bzw beheben, ohne einen unnötig hohen Aufwand zu treiben?

Nochmal zur Verdeutlichung... der Deinstall-Batch schreibt einen Batch ins temporäre Verzeichnis. Darin ist der Befehl rd /s /q "%installationspfad%" enthalten.
Der Pfad wird als Variable aus einer INI Datei ausgelesen, die das Hauptprogramm erstellt bzw ändert. Jedes Mal beim Programmstart wird das Verzeichnis abgefragt und in der INI abgespeichert (zwecks Auto-Update-Funktion und Deinstallation).
Das dürfte mit dem eigendlichen Problem aber nichts zu tun haben. Auch mit direkt ausformuliertem Pfad tritt das Problem auf.

Nach dem starten des Lösch-Batch im temporären Ordner beendet sich der Deinstall-Batch sofort.
Ich hab auch schon ein Timeout mit bis zu 10 Sekunden in den Lösch-Batch eingebaut der den eigendlichen Löschvorgang hinauszögert, aber das hat auch nichts gebracht.
Auch das mehrfache ausführen des Löschbefehls im Lösch-Batch oder eine Schleife mit "if exist" bringt nix, ausser daß der Batch bei letzterem dann natürlich ewig läuft.

Wo liegt hier der Fehler?
Mitglied: Xaero1982
14.05.2014 um 22:27 Uhr
Hi,

also ich hab mal was gebastelt:

01.
@echo off 
02.
 
03.
md %temp%\install 
04.
copy program.bat %temp%\install\*.* 
05.
 
06.
echo rd /s /q "%temp%\install\" >>%temp%\uninstaller.bat 
07.
echo del %temp%\uninstaller.bat >>%temp%\uninstaller.bat 
08.
 
09.
start %temp%\uninstaller.bat 
10.
exit
Das funktioniert bei mir problemlos. Ordner weg und uninstaller.bat ist auch weg.

Daher ist es schwer nachvollziehbar warum es bei dir nicht funktioniert.

Ist der Ablauf bei dir auch so im Grunde?

Gruß
Bitte warten ..
Mitglied: rubberman
14.05.2014 um 22:27 Uhr
Hallo fred08155, willkommen im Forum.

Vermutlich ist das Verzeichnis in Benutzung, da es das Arbeitsverzeichnis der "Lösch-Batch" Datei ist (geerbt von der "Deinstall-Batch" Datei). Leider hast du keinerlei Code gepostet. Wie wird denn dein "Lösch-Batch" aufgerufen?

Grüße
rubberman
Bitte warten ..
Mitglied: Xaero1982
14.05.2014 um 23:57 Uhr
Rubberman, die Datei wird offensichtlich aufgerufen, da der Inhalt ja gelöscht wird und ein leeres Verzeichnis zurück bleibt.

Gruß
Bitte warten ..
Mitglied: rubberman
LÖSUNG 15.05.2014, aktualisiert um 22:05 Uhr
Das habe ich nicht in Abrede gestellt. Sollte aber das Arbeitsverzeichnis nicht gewechselt werden, bleibt das Verzeichnis in Benutzung und kann nicht gelöscht werden.

Achtung diese Codes löschen das Verzeichnis in dem sie liegen!!!
01.
@echo off &setlocal 
02.
>"%temp%\removedir.bat" echo @rd /s /q "%~dp0" ^& del "%%~f0" 
03.
 
04.
:: Funktioniert nicht, da "removedir.bat" im selben Arbeitsverzeichnis ausgefüht wird, in dem dieser Batchcode liegt (wurde vererbt), auch wenn die Datei selbst in %temp% liegt: 
05.
:: start "" cmd /c "%temp%\removedir.bat" 
06.
 
07.
:: Funktioniert, weil durch die Option /D das Arbeitsverzeichnis gewechselt wird: 
08.
start "" /d "%temp%" cmd /c "%temp%\removedir.bat"
Noch einfacher geht es ohne temporäre Datei, aber auch hier muss das Arbeitsverzeichnis vorher gewechselt werden.
01.
@echo off &setlocal 
02.
cd /d "%temp%" 
03.
rd /s /q "%~dp0"

Grüße
rubberman
Bitte warten ..
Mitglied: fred08155
15.05.2014 um 12:23 Uhr
Das mit dem Arbeitsverzeichnis wirds wohl sein. Werds gleich später ausprobieren, wenn ich wieder an dem Rechner sitze.
Aufgerufen wird der Batch ganz simpel mit
start %temp%\deinstall.bat

Dann kann ich mir auch den Umweg über den Batch sparen. Hatte noch ein zusätzliches Gimmick eingebaut. Damit man von der Deinstallation nix sieht hatte ich ein weiteres VB-Skript aus dem Internet kopiert, welches den Batch als unsichtbares Fenster startet (wird auch ins Temp-Verzeichnis geschrieben und löscht sich dann auch wieder selbst nach der Ausführung).
Hab mittlerweile aber auch gelesen, wie man direkt mit dem VB-Skript Dateien und Ordner löscht.
Dann sinds da nur zwei Zeilen mehr und gut is.
Bitte warten ..
Mitglied: fred08155
15.05.2014 um 22:06 Uhr
Super. Hat geklappt. Danke für den Tipp.
Bitte warten ..
Ähnliche Inhalte
Windows 7
RMDIR meldet: Das Verzeichnis ist nicht leer
gelöst Frage von sisiphusWindows 74 Kommentare

Hallo, Per Batchdatei lösche ich regelmäßig einen lokalen Ordner auf meiner Festplatte mit folgendem Befehl: Nicht immer, aber doch ...

Batch & Shell
Rechnen mit Variablen - Batch Programmierung
gelöst Frage von LH.AppsBatch & Shell7 Kommentare

Bei folgendem Code gibt er immer mehrere Ergebnisse oder "ECHO ist ausgeschaltet (OFF)." aus: Optimierungsvorschläge? PS: Für die Variable ...

Batch & Shell
Batch Programmierung IF Abfragen
gelöst Frage von PanubuBatch & Shell8 Kommentare

Hallo zusammen, ich möchte gerne einige IF-Abfragen in einer Batch programmieren, was allerdings nicht so möchte wie ich. Er ...

Batch & Shell
Verknüpfungen von leeren Ordnern löschen
Frage von AmiKegoBatch & Shell2 Kommentare

Hallo, ich schreibe gerade ein Skript mit Batch das leere Ordner mit Unterordner löscht. Jetzt will ich es ein ...

Neue Wissensbeiträge
Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 12 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 13 StundenSicherheit7 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 14 StundenSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 14 StundenSicherheit12 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen20 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...