Seite 1 von 1

winst: leere Ordner löschen

Verfasst: 07 Apr 2011, 18:04
von Martin von Wittich
Hi,

wir haben bei unseren Paketen häufiger die Situation, dass sich mehrere Pakete einen Ordner in C:\Programme oder im Startmenü teilen. Wenn eines der Pakete deinstalliert wird, soll natürlich nicht der ganze Ordner gelöscht werden, der noch Dateien von den anderen Paketen enthält; wenn aber das letzte der Pakete deinstalliert wird, soll kein leerer Ordner übrig bleiben. Geht das irgendwie mit winst, oder muss ich mir einen Workaround mit DosBatch und rmdir bauen?

Re: winst: leere Ordner löschen

Verfasst: 07 Apr 2011, 19:10
von d.oertel
Hi,

der opsi-winst hat zur Zeit keinen Befehl mit dem man nur leere Verzeichnisse löscht

Ich nehme es mal als Feature Request auf ....

gruss
d.oertel

Re: winst: leere Ordner löschen

Verfasst: 14 Jun 2011, 17:34
von Martin von Wittich
Hab ein Workaround gefunden:

Code: Alles auswählen

[WinBatch_RemoveEmptyFolder]
cmd /c rmdir "%CommonStartMenuPath%\Programme\Cornelsen"
Delete "%CommonStartMenuPath%\Programme\Cornelsen" in einer Files-Section tut es leider nicht - es bricht zwar ab, wenn es Unterordner in dem zu löschenden Ordner findet, aber wenn der Ordner nur Dateien enthält, würde es die Dateien und den Ordner trotzdem löschen. DosBatch/DosInAnIcon tut es ebenfalls nicht, weil "Startmenü" einen Umlaut enthält, aber opsi die resultierende Batchdatei nicht mit dem CP850-Encoding speichert, das cmd erwartet - mit dem falschen Encoding findet rmdir den Ordner dann nicht. Praktischerweise konvertiert cmd den String, wenn ich ihn per /c übergebe, daher der WinBatch-cmd/c-Hack.

Re: winst: leere Ordner löschen

Verfasst: 14 Jun 2011, 20:10
von Martin von Wittich
Noch besser - damit sieht man kein cmd-Fenster aufblitzen, und "Programme" ist nicht mehr hardgecodet (da wir leider noch auf opsi 3.4-Stand sind, haben wir die %CommonProgramsDir%-Variable noch nicht, von der ich annehme, das sie den Pfad enthalten würde):

Code: Alles auswählen

ExecWith_RemoveEmptyFolder "cscript" "//E:VBS"

[ExecWith_RemoveEmptyFolder]
Set shell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
path = shell.SpecialFolders("AllUsersPrograms") & "\Cornelsen"
If fso.FolderExists(path) Then
  Set d = fso.GetFolder(path)
  If d.Files.Count = 0 And d.SubFolders.Count = 0 Then
    fso.DeleteFolder(path)
  End If
End If
Das //E:VBS ist wichtig, weil cscript sonst versuchen würde, den Scripttyp an der Erweiterung zu erkennen - die ist aber bei ExecWith immer ".bat", was cscript natürlich nicht versteht.

Re: winst: leere Ordner löschen

Verfasst: 15 Jun 2011, 16:29
von bell
Hallo,

Falls Umlaute stören kann man auch einfach das ganze so machen:

Code: Alles auswählen

[DosInAnIcon_rmdir]
rmdir c:\DOKUME~1\Administrator\STARTM~1\Folder
MfG bell

Re: winst: leere Ordner löschen

Verfasst: 17 Jun 2011, 14:11
von Martin von Wittich
Das hardcodet die Pfade aber wieder, sodass es nicht auf einem englischen System funktionieren würde ;)