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-Key: 117126

Url: https://administrator.de/contentid/117126

Printed on: April 26, 2024 at 07:04 o'clock

Mitglied: 60730
60730 May 29, 2009 at 12:49:32 (UTC)
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
Member: photographix
photographix May 29, 2009 at 16:17:55 (UTC)
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
Member: mhard666
mhard666 Jun 03, 2009 at 14:24:32 (UTC)
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