liquido88
Goto Top

Ordner mit Tagesdatum und Uhrzeit erstellen VBS

Hallo!

Ich habe noch nie mit VBS gearbeitet und habe im Netz ein Skript gefunden mit dem ich eine Automatische Datensicherung durchführen kann.

Der Rechner auf dem das Skript laufen soll ist Win 2000 Server ohne Domäne. Es so ein Ordner von C:\ auf ein Netzlaufwerk kopiert werden, da es für eine Datensicherung ist, möchte ich gerne das Erstelldatum und Uhrzeit als Ordnernamen haben.

z.B.: C:\Test => Y:\Backup\18.07.07_10:15\Test

Wäre schön, wenn das Skript gleichzeitig alle Ordner löscht die älter als 1 Monat sind.


Der Code vom dem gefundenen Skript:

' Quellpfad der zu sichernden Dateien angeben  
    Const Quelle = "C:\TEST"  

    ' Ziel der Sicherung angeben  
    Const Ziel = "Y:\Test\"  


    Dim FS, WSH, Anzahl
    Const Titel = "Automatische Datensicherung"  

    Set FS = CreateObject("Scripting.FileSystemObject")  
    Set WSH = CreateObject("WScript.Shell")  

    On Error Resume Next

    PfadTesten Quelle
    PfadTesten Ziel

    Anzahl = 0

    DateiSystemDurchsuchen Quelle

    WSH.PopUp Anzahl & " Datei(en) von " & Quelle & " nach " & Ziel _  
            & " gesichert", 5, Titel, vbOKOnly + vbCritical  

    ' *** Ende des Skripts  



    ' ---------------------------------------------------------- '  
    ' Rekursives Unterprogramm um das Dateisystem zu durchsuchen  
    ' ---------------------------------------------------------- '  

    Private Sub DateiSystemDurchsuchen(Pfad)
        Dim Ordner, UnterOrdner, Datei

        If FS.FolderExists(Pfad) Then
            ' Then: Falls Ordner übergeben wurde  
            Set Ordner = FS.GetFolder(Pfad)

            ' Papierkorb nicht bearbeiten  
            If LCase(Ordner.Name) = "recycled" Then Exit Sub  

            ' Funktion Bearbeiten() für Ordner aufrufen  
            Bearbeiten Ordner, False

            ' Alle Dateien im Ordner bearbeiten  
            For Each Datei In Ordner.Files
                ' Prozedur Bearbeiten() für Dateien aufrufen  
                Bearbeiten Datei, True
            Next

             ' Alle Unterordner rekursiv bearbeiten  
            For Each UnterOrdner In Ordner.SubFolders
                ' Einstieg In die Rekursion  
                DateiSystemDurchsuchen UnterOrdner
            Next

        ElseIf FS.FileExists(Pfad) Then
            ' Else: Falls eine einzelne Datei übergeben wurde  
            Bearbeiten FS.GetFile(Pfad), True
        End If
    End Sub

    ' Hier wird festgelegt, wie Dateien bearbeitet werden sollen.  
    Private Function Bearbeiten(Datei, IstDatei)
        Dim ZielPfad
        ' Schreibschutz-Attribut einer/s Datei/Ordners löschen  
        ZielPfad = Ziel & Mid(Datei.Path, Len(Quelle) + 1)
        If IstDatei Then
            If (Datei.Attributes And 32) Then
                Anzahl = Anzahl + 1
                Bearbeiten = True
                Datei.Attributes = Datei.Attributes And Not 32
                Datei.Copy ZielPfad, True
            End If
        Else
            If Not FS.FolderExists(ZielPfad) Then FS.CreateFolder ZielPfad
        End If
    End Function


    Private Sub PfadTesten(Pfad)
        Dim TempPfad

        ' Existiert das Laufwerk ?  
        TempPfad = FS.GetDriveName(Pfad)
        If Not FS.DriveExists(TempPfad) Then
            WSH.PopUp "Laufwerk " & TempPfad & " existiert nicht", 5, Titel, vbCritical  
            WScript.Quit
        ElseIf Not FS.Drives(TempPfad).IsReady Then
            MsgBox "Kein Medium In Laufwerk " & TempPfad & " eingelegt", vbCritical, Titel  
            WScript.Quit
        End If

        ' Existiert der Pfad ? Falls Nein, Pfad aufbauen  
        Pfad = Trim(Pfad)
        If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"  
        TempPfad = Pfad
        While Not FS.FolderExists(TempPfad)
            If FS.FolderExists(FS.GetParentFolderName(TempPfad)) Then
                FS.CreateFolder TempPfad
                ' Konnte Pfad erstellt werden ?  
                If Not FS.FolderExists(TempPfad) Then
                    MsgBox "Pfad '" & TempPfad & "' kann nicht erstellt werden", vbCritical, Titel  
                    WScript.Quit
                End If
                TempPfad = Pfad
            Else
                TempPfad = FS.GetParentFolderName(TempPfad)
            End If
        Wend
    End Sub

*
*Q.U.E.L.L.E.: http://www.arstechnica.de/computer/vbs/notebook.html * In Ordnung so?
  • *
*Erstellt von Ralf Pfeifer *
*
Vielen Dank!

MfG

Sebastian

Content-Key: 64077

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

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: bastla
bastla 18.07.2007 um 17:00:53 Uhr
Goto Top
Hallo Liquido88!

Zuerst zum etwas einfacheren Teil: Verwende anstatt "Const Ziel = "Y:\Test\"
Ziel = "Y:\Backup" & _  
	Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & "_" & _  
	Replace(FormatDateTime(Time, vbShortTime), ":", ".") & _  
	"\Test\"  
Damit wird zwar ein anderes als das von Dir vorgegebene Datumsformat erzeugt, nämlich "2007-07-18", aber damit hast Du es wesentlich leichter, die Sicherungen nach Datum zu sortieren.

Solltest Du auf dem anderen Format bestehen, wäre die 2. Zeile durch
	FormatDateTime(Date, vbShortDate) & "_" & _  
zu ersetzen.

Der ":" in der Zeitangabe muss durch ein anderes Zeichen (bei mir durch ".") ersetzt werden, da er in Datei-/Ordnernamen nicht zulässig ist (ADS einmal ausgenommen).
Zum Löschen der Ordner: Meinst Du damit, dass aus dem Ordner "Y:\Backup" die Unterordner entsprechend dem im Ordnernamen enthaltenen Datum gelöscht werden sollen, also, beim von mir verwendeten Datumsformat, alle Unterordner mit einem Namen "2007-06-17_Zeit" und davor?

Grüße
bastla

P.S.: Könntest Du den Code oben bitte mit < code> und < /code> (jeweils ohne Leerstellen) formatieren? - Erledigt. Danke Biber.
Mitglied: Liquido88
Liquido88 18.07.2007 um 17:38:12 Uhr
Goto Top
Erstmal vielen Dank für deine Antwort!

Werde Teil 1 gleich mal ausprobieren.

Mit Automatisch löschen ist gemeint:

Jeden Tag wird ja ein Ordner angelegt mit einem Datum und dem Sicherungsinhalt. Die VBS soll erkennen das z.b. 2007-01-01 viel älter als 1 Monat ist und damit automatisch diesen Ordner löschen. (Werde 1 mal im Monat das Verzeichnis eh via DLT sichern)

Vielen Dank!

Gruß Sebastian
Mitglied: Biber
Biber 18.07.2007 um 17:49:47 Uhr
Goto Top
@bastla
P.S.: Könntest Du den Code oben bitte mit < code> und < /code> (jeweils ohne Leerstellen) formatieren?

Hmm.. er hat nicht direkt "nein" gesagt... aber bevor ich es als zögerliches "Vielleicht" interpretiere, hab ich es schnell selbst eingebaut.

@Liquido88
Ich habe noch nie mit VBS gearbeitet und habe im Netz ein Skript gefunden mit dem ich eine Automatische Datensicherung durchführen kann.
Hm.
Hmmmm.
Wir müssen reden.

Lass mich den Satz bitte formatieren...
Ich habe noch nie mit VBS gearbeitet und..
  • ...und habe mich jetzt 3 Stunden (3 Tage, 3 Wochen,...) intensiv damit auseinandergesetzt... ??
  • ...und mit meiner Freundin gewettet, dass ich dennoch eine DIN A4-Seite laufenden VBS-Code schreiben kann, während sie sich die Haare fönt...?
  • ...und mein Chef hat gesagt, nach dem Peter-Prinzip /oder hier bin ich deshalb genau der Richtige für diesen Job..??
...
...ich war so gespannt, wie dieser Satz weitergeht....

..und habe im Netz ein Skript gefunden...
Lass mich raten: Auf einer Site, der ungenannt bleiben möchte von einem Verfasser John Doe.
Und der hat einen so grimmig guckenden Atavar, dass Du Dich nicht getraut hast, ihn direkt zu fragen.
Wenn es ein "gefundenes Skript" ist, bitte immer die Quellenangabe dazu schreiben.
Und auf keinen Fall die Verfasserangaben (z.B. "Copyright Dietmar Müller 2004") einfach löschen.
Siehe ->Forumsregeln. Siehe ->Knigge. Siehe ->Anstand. Siehe ->Nettiquette.

..mit dem ich eine Automatische Datensicherung durchführen kann.
Na ja, wenn dieser Teilsatz stimmen würde, hätten wir uns nie kennengelernt...

Der Code vom dem gefundenen Skript:
Es gibt keinen Vonitiv in der deutschen Sprache. "Der Code des gefundenen Skripts:"

Bitte versuche, Dich auch selbst mit dem Thema (mit VBS, nicht mit dem Vonitiv)auseinanderzusetzen.
Natürlich muss nicht jedes Rad 49x neu erfunden werden.
Aber ein "gefundenes" Skript blind übernehmen und hier eben winterfest oder TÜV-fertig machen zu lassen,
das ist für Dich und auch für die Hilfe-Bietenden im Forum eher unbefriedigend.

Und bitte trage die Quellenangabe nach.

Danke
Biber
Mitglied: bastla
bastla 18.07.2007 um 18:21:19 Uhr
Goto Top
Hallo Liquido88!

Das Löschen der alten Ordner sollte eher als eigenes Script ausgeführt werden, da es mit dem Backup nicht unmittelbar zusammenhängt.

Eine Möglichkeit wäre:
'Alte Ordner löschen  
strZiel = "Y:\Backup"  
'Altergrenze in Tagen festlegen  
intAlter = 30

'Limitdatum ermitteln  
dtLimit = Date - intAlter
'Limitdatum formatieren nach "JJJJ-MM-TT"  
strLimit = Year(dtLimit) & "-" & Right("0" & Month(dtLimit), 2) & "-" & Right("0" & Day(dtLimit), 2)  
'Länge des Limitdatums für den Vergleich nicht bei jedem Schleifendurchlauf, sondern gleich vorweg ermitteln  
intCheckLen = Len(strLimit)

Set fso = CreateObject("Scripting.FileSystemObject")  
'Falls der Zielordner nicht gefunden wurde, Script kommentarlos beenden  
	'(allerdings mit Fehlercode 1 für eine allfällige Auswertung durch ein aufrufendes Programm).  
If Not fso.FolderExists(strZiel) Then WScript.Quit(1)

'Alle einzelnen Unterordner des Zielordners durchgehen  
For Each fldFolder In fso.GetFolder(strZiel).SubFolders
	'Zur Sicherheit das Namensformat "JJJJ-MM-" anhand der "-" überprüfen ...  
	If Mid(fldFolder.Name, 5, 1) = "-" And Mid (fldFolder.Name, 8,1) = "-" Then  
		'Anfang des Ordnernamens in der entsprechenden Länge mit dem Limitdatum vergleichen ...  
		If Left(fldFolder.Name, intCheckLen) < strLimit Then
			'... und wenn kleiner (=früher), Ordner löschen  
			fldFolder.Delete
		End If
	End If
Next
Kommentare habe ich, in der Hoffnung, Dich bei der Beschäftigung mit VBS (wie kurz oder lang sie auch bisher tatsächlich gewesen sein mag) ein Stückchen weiter zu bringen, etwas zahlreicher eingefügt.

Grüße
bastla
Mitglied: Liquido88
Liquido88 18.07.2007 um 21:26:34 Uhr
Goto Top
@bastla:

Ich danke Dir für Deine Hilfe, werde das Skript morgen zusammensetzen (schau mir jetzt den Aufbau genauer an) Ich danke dir das es noch nette Menschen gibt die anderen helfen wollen!

@Biber:

Sry Biber aber ich habe null Plan von VBS hatte noch nie damit zu tun, wusste das es VBS gibt aber das war es schon. Mir wurde die Administration aufs Auge gedrückt. Ich mach das zwar gerne, aber ohne das nötige Wissen... . Als Autohaus mit gerade mal 17 Mitarbeitern leistet man sich nicht mal eben einen echten Admin. Es wäre schön wenn man sein Wissen Produktiv weitergibt und damit anderen Menschen helfen kann, so mache ich das ja auch, nur halt nicht im IT Bereich, da gibt es ja schon so Spezialisten wie dich Biber.

Klar hast Du Recht das die Verfasserinfo fehlt, dies war aber keine absicht. Ich hatte vor das Skript selbst anzupassen, aber ohne VBS-Grundwissen habe ich das halt geschafft. Wenn ich die Seite bloß noch im Kopf hätte... Keine Ahnung wo ich das Skript her habe. Ich werde in Zukunft aber Quellenangaben machen, damit nicht noch jemand seine Langeweile mit meckern verbringen muss.

Sebastian
Mitglied: bastla
bastla 18.07.2007 um 21:38:32 Uhr
Goto Top
@Liquido88

Wenn ich die Seite bloß noch im Kopf hätte...
Könnte es diese gewesen sein?

Ich werde in Zukunft aber Quellenangaben machen, damit nicht noch jemand seine Langeweile mit meckern verbringen muss.
Dazu muss ich nun schon sagen: Richtiger Vorsatz, Begründung aber voll daneben ...

Grüße
bastla
Mitglied: Liquido88
Liquido88 18.07.2007 um 22:13:12 Uhr
Goto Top
Das mag sein bastla!

Ich finde den Text von Biber hätte man aber auch anders formulieren...

abwarten wie er das sieht

Gruß Sebastian
Mitglied: Biber
Biber 19.07.2007 um 00:07:16 Uhr
Goto Top
Moin Liquido88 & bastla,

es ging mir nicht darum, Dich anzuraunzen oder nur mal ein bisschen zu meckern, weil meine blutjunge rothaarige Praktikantin gerade unpässlich ist und ich Frust ablassen wollte.

Es ging mr um
  • die fehlende Quellenangabe. Wenn sich jemand die Mühe macht, einen Codeschnipsel nicht nur auf seiner Homepage zu veröffentlichen, sondern diesen auch noch zu dokumentieren, herzuleiten und jeden Einzelschritt verständlich zu erklären, dann sollte dieser auch beim Namen genannt werden. Ehre wem Ehre gebührt.
  • unsere Forumsregeln, wo die Pflicht zur Quellenangabe beim Zitieren anderer VerfasserInnen auch explizit aufgeführt ist - dort allerdings eher mit rechtlichem Hintergrund als mit moralischem.
  • eine rein persönliche Meinung war allerdings in der Tat die Kritik am Vorgehen. "Ich habe keinerlei Erfahrung mit VBS und will aber ein irgendwie auf meinen PC gefallenes 60-Zeilen-VBSkript zum Fliegen bringen, produktiv einsetzen und dann soll es gefälligst unbemerkt und friedlich vor sich hinschnurren."

Angebrachter/angemessener fände ich eine vorsichtigere und ergebnisoffenere Annäherung an das Problem. Also z.B. die Frageformulierung:
"Ich bitte um Euren Rat. Ich habe keine Skripterfahrung, muss aber das Problem ...lalala.. lösen.
Was wäre denn ein geeignetes Werkzeug dafür?
Oder gibt es gar Tools, die mir eine Automatisierung dieser Aufgabe OHNE Skript-Eintipperei erlauben?
Oder ein ausführliches Musterbeispiel, dass sich mit wenig Aufwand anpassen ließe?"


Und, um noch einen letzten Gedanken mit anderen Worten als oben auszudrücken:
Unbefriedigend finde ich es, wenn wir zwar eine Formal-Lösung "liefern", diese - wie es bei bastlas Schnipseln Standard ist- auch unter Wasser laufen würde, aber der Fragesteller die Lösung gar nicht wiederverwenden, auf andere Sachverhalte übertragen kann.
Oder gar, die schlechteste aller "Lösungen", dem Fragesteller die Auseinandersetzung mit dem Problem abnimmt... "es läuft ja..".

Dennoch - als persönlicher Angriff war es nicht gemeint.
Meine Kritik ist -zumindest bemühe ich mich darum- immer auf Beiträge und gepostete Inhalte bezogen. Nicht auf die Person dahinter - nicht persönlich oder beleidigend gemeint.

Grüße
Biber

P.S. Relativ unabhängig davon, ob der o.g. Code von Ralf Pfeifer's Seite stammt oder nicht, einen Blick darauf kann ich nur empfehlen.
Mitglied: Liquido88
Liquido88 19.07.2007 um 07:20:08 Uhr
Goto Top
Sry Biber für meine anmache aber das ich nicht das Wissen wie du oder bastla habe und somit auf andere angewiesen bin hat mich schon genug geflaxt.

Ich hätte das Skript am liebsten selbst zusammengesetzt, vllt auch in einer anderen Prog.sprache, habe vor kurzem mit C# angefangen, aber wenn man gerade so das Wort Methoden und Klassen definieren kann, kann man noch lange nicht Programmieren.

Ich hoffe die Quellenangabe die ich nachgereicht habe entspricht deiner Vorstellung.

Gruß Sebastian
Mitglied: Biber
Biber 19.07.2007 um 11:10:45 Uhr
Goto Top
Moin Liquido,

vielen Dank für die Quellenangabe.
>Ich hoffe die Quellenangabe die ich nachgereicht habe entspricht deiner Vorstellung.
Hast Recht, ich werde mich Zukunft etwas zurückhalten.
Ich will niemandem "meine Vorstellungen" aufzwingen.

Mach es einfach so, wie Du es für richtig hältst.

Grüße
Biber
Mitglied: Liquido88
Liquido88 19.07.2007 um 15:55:44 Uhr
Goto Top
So Jungs,

da wir das zwischen Menschliche geklärt haben werd ich jetzt mal schauen wie weit ich das mit dem Skript hin bekomme, habe es leider zeitlich noch nicht geschaft.

Hoffe ich hab jetzt mal ein paar min. ohne nervendes Telefon.

Gruß Liquido88