WolleXPC 10 Geschrieben 23. Oktober 2007 Melden Teilen Geschrieben 23. Oktober 2007 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 Zitieren Link zu diesem Kommentar
vmorbit 10 Geschrieben 23. Oktober 2007 Melden Teilen Geschrieben 23. Oktober 2007 ich würd das per batch lösen... ein dir mit dem parameter, dass er nur nach *.hl7 suchen soll und diese dann an eine schleife übergeben die jeden gefundenen eintrag verschiebt oder was du auch damit machn willst... mit VB kenn ich mich leider nicht so aus...wird dort aber ähnlich lösbar sein. Zitieren Link zu diesem Kommentar
WolleXPC 10 Geschrieben 25. Oktober 2007 Autor Melden Teilen Geschrieben 25. Oktober 2007 Hat vieleicht noch jemanmd eine Idee oder beispielskript??? Wie funktioniert das genau das ich Dateien in ein Archiv packe? Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 25. Oktober 2007 Melden Teilen Geschrieben 25. Oktober 2007 hi, wenn du gut mit VBS umgehen kannst, dann sieh dir das Filesystemobject näher an. Damit kannst du sämtliche Dateisystemoperationen durchführen. FileSystemObject winrar als Comprimierer lässt sich ganz gut per commandline steuern. Von Winrar gibt es eine 30-Tage Trialversionen, mit der du erstmal rumspielen kannst. cu blub Zitieren Link zu diesem Kommentar
s.weinschenck 10 Geschrieben 25. Oktober 2007 Melden Teilen Geschrieben 25. Oktober 2007 ...ein Packer für die Commandline für umsonst: 7-Zip Zitieren Link zu diesem Kommentar
WolleXPC 10 Geschrieben 25. Oktober 2007 Autor Melden Teilen Geschrieben 25. Oktober 2007 Mit dem FSO hab ich schön öfters gearbeitet. Weiß nur nicht wie man die Dateien nach einander ausliest, aber auch nur die mit der bestimmten Dateiendung. Und was meint ihr mit Commandline und wie muss ich z.b. 7zip ansprechen, damit der mir die Dateien packt? Zitieren Link zu diesem Kommentar
s.weinschenck 10 Geschrieben 26. Oktober 2007 Melden Teilen Geschrieben 26. Oktober 2007 ...das 7zip musst du auf dem Gerät installieren wo du es benutzen willst. Da gibt es im Programm eine super Hilfe was du in deine batchdatei reinschreiben musst. Zitieren Link zu diesem Kommentar
thumb 10 Geschrieben 26. Oktober 2007 Melden Teilen Geschrieben 26. Oktober 2007 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 Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 27. Oktober 2007 Melden Teilen Geschrieben 27. Oktober 2007 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 Zitieren Link zu diesem Kommentar
WolleXPC 10 Geschrieben 27. Oktober 2007 Autor Melden Teilen Geschrieben 27. Oktober 2007 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. Zitieren Link zu diesem Kommentar
XP-Fan 217 Geschrieben 27. Oktober 2007 Melden Teilen Geschrieben 27. Oktober 2007 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. Zitieren Link zu diesem Kommentar
WolleXPC 10 Geschrieben 6. November 2007 Autor Melden Teilen Geschrieben 6. November 2007 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? 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 Zitieren Link zu diesem Kommentar
thumb 10 Geschrieben 6. November 2007 Melden Teilen Geschrieben 6. November 2007 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 Zitieren Link zu diesem Kommentar
WolleXPC 10 Geschrieben 7. November 2007 Autor Melden Teilen Geschrieben 7. November 2007 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 Zitieren Link zu diesem Kommentar
thumb 10 Geschrieben 7. November 2007 Melden Teilen Geschrieben 7. November 2007 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.