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 Programmierung - Child Prozess mit rmdir -s -q hinterlässt leeren Ordner

Frage Microsoft Windows 7

Mitglied: fred08155

fred08155 (Level 1) - Jetzt verbinden

14.05.2014, aktualisiert 15.05.2014, 1556 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 ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Batch: Bilder (gewisse Nummern) vom Verzeichnis A in einen Ordner Kopieren (3)

Frage von sagula91 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...