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

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, 1662 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
Windows Server

Windows Server Backup schlögt Fehl -Lösung 2008-2016

Tipp von BiGnoob vor 1 StundeWindows Server

Hi zusammen , ich möchte gerne einen Lösungstipp abgeben für folgenden fehler: lösung ist folgende:

Humor (lol)
Telekom vs. O2 - 3:2
Erfahrungsbericht von the-buccaneer vor 14 StundenHumor (lol)2 Kommentare

Unglaublich aber wahr: Nachdem mein privater Anschluss am 19.04.18 auf VOIP und VDSL umgestellt wurde, hatte ich seitdem 1,5 ...

Batch & Shell

Windows 10 Heimnetzgruppe abgeschaft. Ein Script für einfache Netzwerk - Freigabe im Heimnetzwerk

Anleitung von treehe vor 16 StundenBatch & Shell3 Kommentare

Anleitung für eine einfache Netzwerkfreigabe unter Windows 10 Wie weiter hab mal ein kleines CMD - Script gebastelt. Womit ...

Verschlüsselung & Zertifikate

Efail die II - Warum SMime und PGP der Zeit hinterherhinken

Information von certifiedit.net vor 2 TagenVerschlüsselung & Zertifikate

Guten Morgen, nachdem der letzte Beitrag rege kommentiert wurde, die IT-Republik sich nun darüber streitet ob es nun ein ...

Heiß diskutierte Inhalte
Netzwerke
IP-Adresse am zweiten Domänencontroller fest vergeben - Server verschwunden
Frage von DanielG1974Netzwerke18 Kommentare

Ich hab ein Problem, was ich bisher noch nicht erlebt habe Ich habe erfolgreich einen zweiten Server mit ActiveDirectory ...

Windows Server
Windows Server 2012 - Update - Beim Booten bleibt der Server beim Windows Zeichen stehen
Frage von KeilbachWindows Server14 Kommentare

Hallo Zusammen, ich grüße euch, mein Name ist Michele. Ich bin hier ganz Neu - da ich einfach nicht ...

Windows Tools
Virtueller Drucker gesucht (Schnittstelle: USB oder Seriell)
Frage von chrisButterflyWindows Tools14 Kommentare

Hi, ich suche einen virtuellen Drucker, den ich über eine USB oder serieller Schnittstelle ansprechen kann. Dieser Drucker soll ...

Firewall
Sophos SG 125 nicht mehr erreichbar
Frage von GwaihirFirewall14 Kommentare

Hallo zusammen, ausgerechnet über die Feiertage stimmt etwas mit meiner Firmen-Firewall nicht. Es ist eine Sophos SG 125 und ...