Jump to content

Script zum Löschen und Packen von vielen Dateien?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Zusammen,

 

ich benötige mal wieder Hilfe von euch.

 

Und zwar geht es darum, dass ein Programm auf einem unserer Server sehr sehr viele nicht nicht mehr benötigte Dateien auslagert. Das sind am Tag einige 100 Dateien die nicht mal größer sind als 100kbyte. Da der Server über NetBackup gesichert wird, dauert das mit sichern der Dateien sehr lange und das Backup wird unnötig groß. Zudem läuft nach einiger Zeit auch die Platte vom Server voll. WIr müssen also einmal die Woche ungefähr die Verzeichnisse löschen indem die Dateien gespeichert werden.

Ich möchte uns diese Arbeit erleichtern indem ich ein Script bastel (am besten in VB Script, da ich damit gut umgehen kann), welches die Dateien aus dem Ordner einmal am Tag auschneidet, in ein anderes verzeichnis einfügt und dann das neu erstellte Verzeichnis löscht.

Dateien aus einem ähnlichen Verzeichnis dürfen nicht gelöscht werden, sollen aber ausgeschnitten werden und in einer komprimierten Datei an einem anderen Platz abgelegt werden.

 

Mein Problem ist nun, dass nie alle Dateien aus den Verzeichnissen ausgeschnitten werden dürfen, sondern nur die mit der Dateiendung "*.hl7". Zudem haben die Dateien die gelöscht werden dürfen immer verschiedene Dateinamen.

 

Ich habe zwar Informationen im Web gefunden wie man Dateien löscht/ausschneidet, aber immer nur einzelne. Brauche also nur die Funktion wie das mit mehreren Dateien, nach Dateiendung läuft und wie ich mehrere Dateien packe.

Den Rest müsst ich selbst schaffen.

 

Vielen vielen Dank

 

Gruß Wolle

Link zu diesem Kommentar

Tach auch,

 

das kriegst Du mit VBS ohne große Schwierigkeiten hin. Guck mal hier, ich habe für mal so was ähnliches gemacht, darauf kannst Du vielleicht aufbauen.

 

Grüße, thumb

 

'#####################################################################################
'#####################################################################################
'#########                                                                   ######### 
'######### Autor: 	Thomas Schütz                                        #########
'######### Datum: 	21.08.2003                                           #########
'######### Script: 	FindFile_1.0.vbs                                     #########
'#########                                                                   #########
'#####################################################################################
'#########                                                                   #########
'######### Beschreibung:                                                     ######### 
'#########                                                                   ######### 
'######### Sucht eine Datei [strSearchFile] im Verzeichnis [strStartPath]    #########
'######### und allen Unterverzeichnissen. Die Datei wird entweder in *.*.OLD #########
'######### umbenannt [flgDelete = 0] oder gelöscht [flgDeleten = 1]          #########
'#########                                                                   #########
'#####################################################################################
'#########                                                                   #########
'######### Änderungen:                                                       #########
'#########                                                                   #########
'#########                                                                   #########
'#########                                                                   #########
'#####################################################################################
'#####################################################################################

'#########-Variablen-#################################################################

'Angabe des Einstiegspfades, z.B. "\\SERVER\SHARE\DIR" oder "C:\DIR\DIR"

strStartPath = "\\ws1107070\D$\Documents and Settings\u254189\Desktop\TEST"

'Angabe der zu suchenden Datei, z.B. "test.ini", Groß-/Kleinschreibung wird nicht beachtet!

strSearchFile = "test.ini"

'Angabe ob Datei gelöscht werden soll

flgDelete = 1

'#####################################################################################

'Aufruf der Subroutine

Call CheckFolder(strStartPath)

'Beenden von WSH

WScript.Quit


'#########-Routinen-#################################################################

'Subroutine CheckFolder

Sub CheckFolder(instrStartPath)

'Erzeugen des FileSystem Objektes und Zugriff auf das Einstiegsverzeichnis

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFolder = objFSO.GetFolder(instrStartPath)

'Zugriff auf die Dateien im Verzeichnis

Set Files =objFolder.Files

'Überprüfe jede Datei (Groß-/Kleinschreibung wird nicht beachtet!)

For Each File In Files

If UCase(File.Name) = UCase(strSearchFile) Then


	'Ist der Delete Flag gesetzt, wird die Datei gelöscht!

	If flgDelete = 1 Then

		File.Delete

	'Ist der Delete Flag NICHT gesetzt, wird die Datei umbenannt!

	Else

		strFilePath = File.Path

		objFSO.MoveFile File, strFilePath & ".OLD" 

	End If

End If

Next

'Rekursiver Aufruf der Subroutine für alle Unterverzeichnisse des Einstiegsverzeichnisses usw.

For Each objNewFolder In objFolder.SubFolders

              CheckFolder objNewFolder

Next

End Sub

Link zu diesem Kommentar

Moin WolleXPC,

 

offen gestanden habe ich den Zwischenschritt mit "alle *.hl7-Dateien in ein Verzeichnis verschieben, zippen und dann alles löschen" nicht ganz verstanden.

Passiert zwischendurch noch etwas?

Oder anders gefragt: Wiso fügst Du nicht einfach in Dein NTBackup-Skript eine Zeile ein

 Del *.hl7 /s /q
:: -oder, wenn es verschoben werden soll -
FOR /R %%i (*.hl7) do move "%%i" \\ServerXY\ArchivDir\ /y
:: ..und danach kommt die NTBackup-Zeile...
[/Code]

 

Grüße

Biber

Link zu diesem Kommentar

Hi Biber,

 

es sollen ja nicht alle Dateien mit der Dateiendung .hl7 gelöscht werden sondern nur die, die in einem bestimmten Verzeichnis liegen.

Einmal sollen Dateien ausgeschnitten und in ein anderes verzeichnis eingefügt werden und dann gelöscht werden. -> Diese Dateien werden nicht mehr benötigt.

 

Und einmal sollen aus einem Verzeichnis alle Dateien ausgeschnitten und in ein anderes eingefügt werden werden. Diese Dateien sollen in ein verzeichnis gepackt werden. -> Diese Dateien werden benötigt, sollen aber archiviert werden.

Link zu diesem Kommentar

Hi,

 

wenn die Rekrusion nicht erfolgen soll dann verwende nur Del *.hl7 /q.

 

Einmal sollen Dateien ausgeschnitten und in ein anderes verzeichnis

eingefügt werden und dann gelöscht werden.

 

Beim Ausschneiden und Einfügen ( Explorer ) wird automatisch die Quelle gelöscht.

Der Befehl um das in einem Script anzuwenden heißt: move ( Siehe Post Biber )

Somit wäre das ursprüngliche Verzeichnis leer nach der Aktion betr. der verschobenen Dateien.

 

Beim packen kannst du doch im Zielordner direkt agieren und nach erfolgreicher

Erstellung des Archives den Inhalt des Zielordners löschen.

Link zu diesem Kommentar
  • 2 Wochen später...
Tach auch,

 

das kriegst Du mit VBS ohne große Schwierigkeiten hin. Guck mal hier, ich habe für mal so was ähnliches gemacht, darauf kannst Du vielleicht aufbauen.

 

Grüße, thumb

 

 

Danke dir, aber ich versteh nicht was ich damit soll? :confused:

 

 

Beim packen kannst du doch im Zielordner direkt agieren und nach erfolgreicher

Erstellung des Archives den Inhalt des Zielordners löschen.

 

Sicher wäre es wenn ich die Dateien erst Ausschneide und in einen anderen Ordner einfüge, dann packe und dann den Ordner samt Dateien lösche. Aus dem Grund, weil alle paar Minuten neue *.hl7 Files erstellt werden, die gelöscht werden sollen. Nicht das das Script zu der Zeit anspringt, wenn neue Dateien huinzugefügt werden, wenn es die Dateien packt. Dann hab ich die Dateien nicht im gepackten Ordner werden aber trotzdem vom Script anschließend gelöscht.

 

 

Ich weiß immer noch nicht wie ich die Dateien nacheinander einlesen kann. Welche Schleife benutzt ich am besten dafür. Wäre super wenn mir das jemand sagen könnte.

 

Mit 7zip komm ich auch noch nicht so klar. Wie implementiere ich die Befehle von 7zip in mein Script???

 

Vielen Dank für eure Hilfe.

 

Gruß Wolle

Link zu diesem Kommentar

Naja, das Script ermittelt eben bestimmte Dateitypen, ich dachte, dass sei ein Teil dessen was Du wolltest. Anstatt diese wie in meinem Script umzubenennen, oder zu löschen, könntest Du das Zippen einbauen....

 

Ausserdem fragtest Du, welche Schleife Du verwenden sollst um Datein einzulesen; das siehst Du auch im Script, FileSystemObject und so ;-))

 

Gruß, thumb

Link zu diesem Kommentar
Naja, das Script ermittelt eben bestimmte Dateitypen, ich dachte, dass sei ein Teil dessen was Du wolltest. Anstatt diese wie in meinem Script umzubenennen, oder zu löschen, könntest Du das Zippen einbauen....

 

Ausserdem fragtest Du, welche Schleife Du verwenden sollst um Datein einzulesen; das siehst Du auch im Script, FileSystemObject und so ;-))

 

Gruß, thumb

 

Ich komm mit deinem Skript nicht klar. Ich verstehe nicht was genau an welcher Stelle passiert und was ich gebrauchen kann für mein Skript. So gut kenn ich mich dann doch nicht mit VBs aus.

 

Hab auch schon folgendes Skript gefunden:

 

Option Explicit


' nur .TXT-Dateien in einer ListBox anzeigen
Dim oFolder As Folder
Dim oFile As File

' Ausgangsverzeichnis
Set oFolder = oFSO.GetFolder("C:\Testumgebung")

' alle Dateien durchlaufen
For Each oFile In oFolder.Files
 ' nur .txt Dateien!
 If LCase$(oFSO.GetExtensionName(oFile)) = "txt" Then
   List1.AddItem oFile.Name
 End If
Next

MsgBox oFolder.Files.Count

 

Ich kann es leider nicht ausführen weil die Fehlermeldung erscheint, dass "Anweisungsende erwartet" wird. Habe das schon bei mehren Skripten gehabt, wenn ich einen Wert als irgendwas deklarieren will.

Wo dranh liegt das???

 

Vielen Dank Gruß Wolle

Link zu diesem Kommentar

Lass das "As File" und "As Folder" beim Dimensionieren weg.

Allerdings hast Du auf die Schnelle (ich habe das Script nicht ausprobiert) noch andere Fehler drin:

 

Du hast vergessen ein FileSystemObject zu instanzieren, Dein "Set oFolder = oFSO.GetFolder("C:\Testumgebung")" wird ohne vorheriges "Set oFSO = CreateObject("Scripting.FileSystemObject")" nicht funtkionieren.

 

Das "Option Explicit" verhindert ein impliziertes Deklarieren von Variablen, Du musst also alle Variablen vor dem Initialisieren deklarieren.

 

Das Array "List1" ist ebenfalls nicht deklariert, wobei ausserdem nicht klar wird, was Du mit diesem willst, denn Du gibst am Ende lediglich die Anzahl der im Verzeichnis gefundenen Files (alle, nicht nur TXT) aus.

 

LCASE$ kenn ich nicht, kenne nur LCASE

 

Ich möchte Dir nicht zu nahe treten, aber ich rate Dir vor dem Scripten die Grundbegriffe von VBS zu studieren. Genug Ressourcen hierzu findest Du im WWW, z.B. hier:

Microsoft Corporation

 

Nix für Ungut und Grüße, thumb

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...