Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Ordner mit Tagesdatum und Uhrzeit erstellen VBS

Frage Entwicklung VB for Applications

Mitglied: Liquido88

Liquido88 (Level 1) - Jetzt verbinden

18.07.2007, aktualisiert 19.07.2007, 5081 Aufrufe, 11 Kommentare

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:

01.
' Quellpfad der zu sichernden Dateien angeben 
02.
    Const Quelle = "C:\TEST" 
03.
 
04.
    ' Ziel der Sicherung angeben 
05.
    Const Ziel = "Y:\Test\" 
06.
 
07.
 
08.
    Dim FS, WSH, Anzahl 
09.
    Const Titel = "Automatische Datensicherung" 
10.
 
11.
    Set FS = CreateObject("Scripting.FileSystemObject") 
12.
    Set WSH = CreateObject("WScript.Shell") 
13.
 
14.
    On Error Resume Next 
15.
 
16.
    PfadTesten Quelle 
17.
    PfadTesten Ziel 
18.
 
19.
    Anzahl = 0 
20.
 
21.
    DateiSystemDurchsuchen Quelle 
22.
 
23.
    WSH.PopUp Anzahl & " Datei(en) von " & Quelle & " nach " & Ziel _ 
24.
            & " gesichert", 5, Titel, vbOKOnly + vbCritical 
25.
 
26.
    ' *** Ende des Skripts 
27.
 
28.
 
29.
 
30.
    ' ---------------------------------------------------------- ' 
31.
    ' Rekursives Unterprogramm um das Dateisystem zu durchsuchen 
32.
    ' ---------------------------------------------------------- ' 
33.
 
34.
    Private Sub DateiSystemDurchsuchen(Pfad) 
35.
        Dim Ordner, UnterOrdner, Datei 
36.
 
37.
        If FS.FolderExists(Pfad) Then 
38.
            ' Then: Falls Ordner übergeben wurde 
39.
            Set Ordner = FS.GetFolder(Pfad) 
40.
 
41.
            ' Papierkorb nicht bearbeiten 
42.
            If LCase(Ordner.Name) = "recycled" Then Exit Sub 
43.
 
44.
            ' Funktion Bearbeiten() für Ordner aufrufen 
45.
            Bearbeiten Ordner, False 
46.
 
47.
            ' Alle Dateien im Ordner bearbeiten 
48.
            For Each Datei In Ordner.Files 
49.
                ' Prozedur Bearbeiten() für Dateien aufrufen 
50.
                Bearbeiten Datei, True 
51.
            Next 
52.
 
53.
             ' Alle Unterordner rekursiv bearbeiten 
54.
            For Each UnterOrdner In Ordner.SubFolders 
55.
                ' Einstieg In die Rekursion 
56.
                DateiSystemDurchsuchen UnterOrdner 
57.
            Next 
58.
 
59.
        ElseIf FS.FileExists(Pfad) Then 
60.
            ' Else: Falls eine einzelne Datei übergeben wurde 
61.
            Bearbeiten FS.GetFile(Pfad), True 
62.
        End If 
63.
    End Sub 
64.
 
65.
    ' Hier wird festgelegt, wie Dateien bearbeitet werden sollen. 
66.
    Private Function Bearbeiten(Datei, IstDatei) 
67.
        Dim ZielPfad 
68.
        ' Schreibschutz-Attribut einer/s Datei/Ordners löschen 
69.
        ZielPfad = Ziel & Mid(Datei.Path, Len(Quelle) + 1) 
70.
        If IstDatei Then 
71.
            If (Datei.Attributes And 32) Then 
72.
                Anzahl = Anzahl + 1 
73.
                Bearbeiten = True 
74.
                Datei.Attributes = Datei.Attributes And Not 32 
75.
                Datei.Copy ZielPfad, True 
76.
            End If 
77.
        Else 
78.
            If Not FS.FolderExists(ZielPfad) Then FS.CreateFolder ZielPfad 
79.
        End If 
80.
    End Function 
81.
 
82.
 
83.
    Private Sub PfadTesten(Pfad) 
84.
        Dim TempPfad 
85.
 
86.
        ' Existiert das Laufwerk ? 
87.
        TempPfad = FS.GetDriveName(Pfad) 
88.
        If Not FS.DriveExists(TempPfad) Then 
89.
            WSH.PopUp "Laufwerk " & TempPfad & " existiert nicht", 5, Titel, vbCritical 
90.
            WScript.Quit 
91.
        ElseIf Not FS.Drives(TempPfad).IsReady Then 
92.
            MsgBox "Kein Medium In Laufwerk " & TempPfad & " eingelegt", vbCritical, Titel 
93.
            WScript.Quit 
94.
        End If 
95.
 
96.
        ' Existiert der Pfad ? Falls Nein, Pfad aufbauen 
97.
        Pfad = Trim(Pfad) 
98.
        If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\" 
99.
        TempPfad = Pfad 
100.
        While Not FS.FolderExists(TempPfad) 
101.
            If FS.FolderExists(FS.GetParentFolderName(TempPfad)) Then 
102.
                FS.CreateFolder TempPfad 
103.
                ' Konnte Pfad erstellt werden ? 
104.
                If Not FS.FolderExists(TempPfad) Then 
105.
                    MsgBox "Pfad '" & TempPfad & "' kann nicht erstellt werden", vbCritical, Titel 
106.
                    WScript.Quit 
107.
                End If 
108.
                TempPfad = Pfad 
109.
            Else 
110.
                TempPfad = FS.GetParentFolderName(TempPfad) 
111.
            End If 
112.
        Wend 
113.
    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!

Mit freundlichen Grüßen

Sebastian
Mitglied: bastla
18.07.2007 um 17:00 Uhr
Hallo Liquido88!

Zuerst zum etwas einfacheren Teil: Verwende anstatt "Const Ziel = "Y:\Test\"
01.
Ziel = "Y:\Backup" & _ 
02.
	Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & "_" & _ 
03.
	Replace(FormatDateTime(Time, vbShortTime), ":", ".") & _ 
04.
	"\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
01.
	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.
Bitte warten ..
Mitglied: Liquido88
18.07.2007 um 17:38 Uhr
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
Bitte warten ..
Mitglied: Biber
18.07.2007 um 17:49 Uhr
@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
Bitte warten ..
Mitglied: bastla
18.07.2007 um 18:21 Uhr
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:
01.
'Alte Ordner löschen 
02.
strZiel = "Y:\Backup" 
03.
'Altergrenze in Tagen festlegen 
04.
intAlter = 30 
05.
 
06.
'Limitdatum ermitteln 
07.
dtLimit = Date - intAlter 
08.
'Limitdatum formatieren nach "JJJJ-MM-TT" 
09.
strLimit = Year(dtLimit) & "-" & Right("0" & Month(dtLimit), 2) & "-" & Right("0" & Day(dtLimit), 2) 
10.
'Länge des Limitdatums für den Vergleich nicht bei jedem Schleifendurchlauf, sondern gleich vorweg ermitteln 
11.
intCheckLen = Len(strLimit) 
12.
 
13.
Set fso = CreateObject("Scripting.FileSystemObject") 
14.
'Falls der Zielordner nicht gefunden wurde, Script kommentarlos beenden 
15.
	'(allerdings mit Fehlercode 1 für eine allfällige Auswertung durch ein aufrufendes Programm). 
16.
If Not fso.FolderExists(strZiel) Then WScript.Quit(1) 
17.
 
18.
'Alle einzelnen Unterordner des Zielordners durchgehen 
19.
For Each fldFolder In fso.GetFolder(strZiel).SubFolders 
20.
	'Zur Sicherheit das Namensformat "JJJJ-MM-" anhand der "-" überprüfen ... 
21.
	If Mid(fldFolder.Name, 5, 1) = "-" And Mid (fldFolder.Name, 8,1) = "-" Then 
22.
		'Anfang des Ordnernamens in der entsprechenden Länge mit dem Limitdatum vergleichen ... 
23.
		If Left(fldFolder.Name, intCheckLen) < strLimit Then 
24.
			'... und wenn kleiner (=früher), Ordner löschen 
25.
			fldFolder.Delete 
26.
		End If 
27.
	End If 
28.
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
Bitte warten ..
Mitglied: Liquido88
18.07.2007 um 21:26 Uhr
@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
Bitte warten ..
Mitglied: bastla
18.07.2007 um 21:38 Uhr
@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
Bitte warten ..
Mitglied: Liquido88
18.07.2007 um 22:13 Uhr
Das mag sein bastla!

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

abwarten wie er das sieht

Gruß Sebastian
Bitte warten ..
Mitglied: Biber
19.07.2007 um 00:07 Uhr
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.
Bitte warten ..
Mitglied: Liquido88
19.07.2007 um 07:20 Uhr
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
Bitte warten ..
Mitglied: Biber
19.07.2007 um 11:10 Uhr
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
Bitte warten ..
Mitglied: Liquido88
19.07.2007 um 15:55 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Batch & Shell
Batch: .rar-Pakete automatisch Ordner erstellen und verschieben (2)

Frage von BowserMD zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Ordner erstellen und verschieben (6)

Frage von Fromeonly zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...