mhard666
Goto Top

In Kix ein Verzeichnis löschen

Ich will mit Kix ein Verzeichnis - wenn vorhanden - löschen.

Hallo allerseits,

nachdem ich mich jetzt seit kurzem etwas mit Kixtart befasst habe stehe ich vor folgendem Problem: Ich will ein Verzeichnis - sofern es existiert - löschen.
Folgenden Code habe ich dafür zusammengeschrieben:
$BackupDir = "E:\wss3_backup\"  
$DestinationDir = "E:\wss3_backup\"  

$FileName = Dir($BackupDir + "spbr*.")  
While $FileName <> "" and @ERROR = 0  
	$FileTime = GetFileTime($BackupDir + $FileName, 1)
	$TimeStamp = SubStr($FileTime, 1, 4) + SubStr($FileTime, 6, 2) + SubStr($FileTime, 9, 2) + SubStr($FileTime, 12, 2) + SubStr($FileTime, 15, 2) + SubStr($FileTime, 18, 2) 
	? "\\ODIN\NETLOGON\7za.exe " + $DestinationDir + $TimeStamp + ".zip " + $BackupDir + $FileName + " -r"  
	SHELL "\\ODIN\NETLOGON\7za.exe a " + $DestinationDir + $TimeStamp + ".zip " + $BackupDir + $FileName + " -r"  

; ========== File/Dir löschen - je nach FileAttribute
	IF EXIST ($BackupDir + $FileName)
		? $BackupDir + $FileName
		IF GETFILEATTR ($BackupDir + $FileName) & 16
			? $BackupDir + $FileName + "\*.* /s"  
			? @ERROR
			RD $BackupDir + $FileName + " /s"   
			IF @ERROR <> 0
				? "Fehler " + @ERROR + " beim Löschen des Verzeichnisses."  
			ELSE
				? "Verzeichnis " + CHR(34) + $BackupDir + $FileName + CHR(34) + " gelöscht."  
			ENDIF
		ELSE
			DEL $BackupDir + $FileName ; (löschen wenn Datei existiert)
			? "Datei " + CHR(34) + $BackupDir + $FileName + CHR(34) + " gelöscht."  
		ENDIF
	ENDIF
	$FileName = Dir()
Loop
Das Problem ist, dass @16034 = 3 ist und das Verzeichnis - welches nicht leer ist - nicht gelöscht wird.
Hat irgendwer eine Idee woran das liegen kann?
Schon mal vielen Dank.

MfG. mhard666

So, hab grad noch versucht den Inhalt des Verzeichnisses mit DEL vor dem Löschen des Selbigen zu löschen - es passiert nix. Die enthaltenen Dateien bleiben nach wie vor in dem Verzeichnis und @16034 = 0.
Ahja, System ist Win2k3 Server, ich bin mit Admin-Rechten angemeldet und die Verzeichnisse sind auch ok - sprich vorhanden.

Content-ID: 117126

Url: https://administrator.de/forum/in-kix-ein-verzeichnis-loeschen-117126.html

Ausgedruckt am: 11.04.2025 um 11:04 Uhr

60730
60730 29.05.2009 um 14:49:32 Uhr
Goto Top
Servus,

05. RD $BackupDir + $FileName + " /s /q"

sollte dein Problem lösen.

Gruß

edit Zeile 5 bezog sich auf dein ursprüngliches Skript.. /edit
edit² Zeile 17 /edit also...
edit³ und lieber nicht Error abfragen, sondern noch ein if exist - macht (in meinen Augen) mehr Sinn /edit
photographix
photographix 29.05.2009 um 18:17:55 Uhr
Goto Top
Ich nutze diese Funktion zum löschen von Verzeichnissen.

Function DelDir($Pathname)
	Dim $Filename
	$Filename = Dir($Pathname + "\*.*")  
	While $Filename <> "" And @ERROR = 0  
		If $Filename <> "." And $Filename <> ".."  
			If (GetFileAttr($Pathname + "\" + $Filename) & 16)  
				DelDir($Pathname + "\" + $Filename)  
				SetFileAttr($Pathname + "\" + $Filename, 128)  
				Rd ($Pathname + "\" + $Filename)  
			Else
				SetFileAttr($Pathname + "\" + $Filename, 128)  
				Del ($Pathname + "\" + $Filename)  
			EndIf
		EndIf
		$Filename = Dir()
	Loop
EndFunction
mhard666
mhard666 03.06.2009 um 16:24:32 Uhr
Goto Top
Hallo,

@timobeil: Dein Lösungsansatz hat irgendwie nicht das gewünschte Ergebnis gebracht. Der Parameter /q ist nirgends dokumentiert (hab zumindest nichts in der Doku auf kixtart.org gefunden) und das Verzeichnis wurde auch nicht gelöscht.

@photographics: Schöne Funktion face-smile ich hab sie für meine Zwecke mal noch so abgeändert, dass eine beliebige Datei (Datei oder Verzeichnis) gelöscht wird.
; =============================================================================
; == Funktion:	Delete ($FileName)
; == Aufgabe: 	Löscht eine Datei oder ein Verzeichnis rekursiv
; == Parameter:	$FileName - Dateiname oder Verzeichnisname
; ==

Function Delete($FileName)
	Dim $FName
	
	; Abschließenden Backslash entfernen wenn vorhanden
	If Right($FileName, 1) = "\"  
		$FileName = Left($FileName, Len($FileName) - 1)
	Endif
	? "DEBUG: FileName = " + $FileName  
	
	; Prüfen ob Datei ein Verzeichnis ist...
	If (GetFileAttr($FileName) & 16)
	; ... wenn ja prüfen ob Verzeichnis leer ist
		$FName = Dir($FileName + "\*.*")  
		; ... wenn nicht rekursiv weiter
		While $FName <> "" And @ERROR = 0  
			? "DEBUG: FName = " + $FName  
			If $FName <> "." And $FName <> ".."  
				? "DEBUG: FName = " + $FName  
				? "DEBUG: $FileName \ $FName = " + $FileName + "\" + $FName  
				Delete($FileName + "\" + $FName)  
				SetFileAttr($FileName + "\" + $FName, 128)  
				Rd ($FileName + "\" + $FName)  
			Endif
			$FName = Dir()
		Loop
		; ... sonst Verzeichnis löschen
		? "DEBUG: FileName = " + $FileName  
		SetFileAttr($FileName, 128)
		Rd ($FileName)
	Else
	; ... sonst Datei löschen
		? "DEBUG: Del(Filename) = " + $FileName  
		SetFileAttr($FileName, 128)
		Del ($FileName)
	Endif
EndFunction

Vielen Dank nochmal.

VG. mhard666