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
GELÖST

VB Script - Dateieigenschaften in Logfile schreiben

Frage Entwicklung

Mitglied: 47674

47674 (Level 1)

26.01.2009, aktualisiert 13:22 Uhr, 7547 Aufrufe, 9 Kommentare

Per VBS Dateiname, Zugriffsdatum, Erstelldatum, Änderungsdatum und Dateiname auslesen und in ein Log-File schreiben.

Hallo zusammen,

folgende "Problem":

in einer Windows Ordnerstruktur, das heißt Ordner und mehrere Ebenen von Unterordnern, sind Dateien gespeichert.
Von allen Dateien in dieser sollen mehrere Eigenschaften ausgelesen werden und in jeweils eine Zeile eines Log-Files geschrieben werden:

<Dateiname> <CreationDate> <LastAccessDate> <LastModifiedDate> <FileSize>

Bei jedem ausführen des Scripts soll über den oben genannten Dateieigenschaften eine Zeile mit dem aktuellen Datum eingefügt werden.

Da ich das ganze als nicht in einfachem Batch umsetzbar sehe, habe ich mich für VBS entschieden. Mein Problem: Ich habe keine Ahnung davon! Habe mir per Copy & Paste das ein oder andere zusammen gebastelt, aber funktionieren tut das in keinster Weise.

Kann mir jemand weiterhelfen? Vielleicht gibt es ja ein fertiges Skript, das ich nur noch etwas modifizieren muss...

Vielen Dank und Gruß
daedalus
Mitglied: bastla
26.01.2009 um 14:37 Uhr
Hallo daedalus!

Wie definierst Du denn "einfachen Batch"? Fiele folgendes nicht mehr darunter?
01.
@echo off & setlocal 
02.
set "Pfad=D:\DeinPfad" 
03.
set "Log=D:\Log.txt" 
04.
 
05.
>>"%Log%" echo %date% 
06.
for /f "delims=" %%i in ('dir /s /b /a-d "%Pfad%"') do call :ProcessFile "%%i" 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
set "FileName=%~nx1" 
11.
set "FileSize=%~z1" 
12.
set "LastModifiedDate=%~t1" 
13.
for /f "tokens=1,2" %%a in ('dir /tc %1^|findstr /c:"%FileName%"') do set "CreationDate=%%a %%b" 
14.
for /f "tokens=1,2" %%a in ('dir /ta %1^|findstr /c:"%FileName%"') do set "LastAccessDate=%%a %%b" 
15.
>>"%Log%" echo %FileName%;%CreationDate%;%LastAccessDate%;%LastModifiedDate%;%FileSize% 
16.
goto :eof
Falls es tatsächlich ein VBScript werden soll, bitte Deinen derzeitigen Stand posten ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
26.01.2009 um 15:26 Uhr
Moin daedalus,
Moin bastla,

<OT>
ich hätte für diesen "Plan" oder dieses "Konzept" weder eine Zeile Batch noch VBSkript spendiert.
Was soll das denn - bei 100.000 Dateien auf dem untersuchten Dateipfad werden am ersten Tag 100.001 Logzeilen weggemüllt, am 2 Tag auch 100.001 Zeilen, ebenso an 3., 4. usw bis zum n-1ten Tag, an dem die Festplatte langsam Unwucht bekommt.

Geschrieben wird immer der gleiche Umfang, egal ob sich 78% der Daten ändern oder gerade 4 Wochen Werksurlaub sind.

--> Das ist kein Plan.

Vielleicht sollten wir mal eine kleine Diskussion anstossen im Bereich "Entwicklung" zum Thema:
"Könnte es Unterschiede geben zwischen
  • dem automatisierten Mit-Schreiben von Daten,
  • dem Sammeln von Informationen,
  • dem Aufbau von Wissen und
  • dem Fernziel, dem Streben nach Weisheit?"


Manche Montage denke ich schon, es wäre an der Zeit dafür.....
</OT>

Grüße
Biber
Bitte warten ..
Mitglied: 47674
26.01.2009 um 15:30 Uhr
Ok.... Ich habe keinen Weg gefunden, das per Batch umzusetzten. Ich dachte nicht, dass sowas mit Batch möglich ist...

Aber erst mal Danke, es funktioniert!!!

Jetzt habe ich aber noch einige Fragen, denn ich möchte ja auch was dabei lernen...
A: ) Ist goto:eof nicht mit exit gleich zusetzten? Damit wir doch nur ans Ende der Datei geprungen, oder?
B: ) Was hat es mit %~nx1, %~z1 und %~t1 auf sich?
C: ) Die Befehle, mit denen du Creation- und LastAccessDate ausliest verstehe ich garnicht...
D: ) Was haben zwei Prozenteichen vor einer Variablen zu bedeuten?

Danke und Gruß
daedalus

@Biber:
Danke, dass du dir Sorgen machst, aber ich kann dir versicher, die Logfiles erleichtern einiges...
Bitte warten ..
Mitglied: bastla
26.01.2009 um 15:43 Uhr
Hallo daedalus!

zu A: ) "goto :eof" beendet den Batch, schließt aber nicht die CMD-Shell; in der Zeile 16 (dort hat es eigentlich die Funktion "return from subroutine" ) wär's eigentlich nur nötig, falls Du noch weitere Unterprogramme oder sonstige Batchzeilen unterhalb einfügen wolltest (dient also als Vorsichtsmaßnahme) ...

zu B: ) Kannst Du unter "for /?" (ziemlich am Ende; dort für die Schleifen-Laufvariable %I gezeigt) nachlesen ...

zu C: ) Wenn Du in einer CMD-Shell
dir /tc Datei
eingibst, sollte zu erkennen sein, was in der Schleife gemacht wird (siehe auch "dir /?") - das "findstr" reduziert nur die Ausgabe auf die eine relevante Zeile mit dem Dateinamen (und dem Timestamp) ...

zu D: ) Dass diese Variable als Laufvariable einer "for"-Schleife in einem Batch verwendet wird - bei Eingabe direkt an der Kommandozeile ist nur ein Prozentzeichen erforderlich.

Grüße
bastla
Bitte warten ..
Mitglied: 47674
27.01.2009 um 08:10 Uhr
Ok, danke für die Hilfe! :D
Bitte warten ..
Mitglied: 47674
28.01.2009 um 10:44 Uhr
Ok, ich brauche noch mal Hilfe.

Folgende Änderungen sollen noch ins Skript aufgenommen werden und ich weiß nicht wie:
A: Nicht nur Ausgabe des Dateinamens, sondern der relative Pfad in bezug auf das Verzeichnis, bei dem die Suche nach Dateien startet.
B: Nur Dateien mit der Endung *.Lab auflisten.

Kann mir jemand helfen?
Bitte warten ..
Mitglied: Biber
28.01.2009 um 11:15 Uhr
Moin daedalus,

die Änderung B, also das Reduzieren auf alle *.lab-Dateien solltest Du selber hinbekommen, wenn Du bastlas Lesetipps gefolgt bist.
Aus [...'dir /s /b /a-d "%Pfad%"' ..] nun ein [...'dir /s /b /a-d "%Pfad%\*.lab"'...] zu machen, sollte lösbar sein.

Für die Teilfrage A: Poste doch bitte den jetzigen Stand des von Dir angepassten Schnipsels.

Danke
Biber
Bitte warten ..
Mitglied: 47674
28.01.2009 um 14:27 Uhr
Derzeit sieht das Skript so aus:
01.
@echo off & setlocal 
02.
set "listPath=%cd%" 
03.
set "Log=%cd%\label_file_list.log" 
04.
>"%Log%" echo CurrentDate	CreationDate	LastAccessDate	LastModifiedDate	FileSize	FileName 
05.
for /f "delims=" %%i in ('dir /s /b /a-d "%listPath%\*.lab"') do call :ProcessFile "%%i" 
06.
goto :eof 
07.
 
08.
:ProcessFile 
09.
	set "FileName=%~nx1" 
10.
	set "FileSize=%~z1" 
11.
	set "LastModifiedDate=%~t1" 
12.
	for /f "tokens=1,2" %%a in ('dir /tc %1^|findstr /c:"%FileName%"') do set "CreationDate=%%a %%b" 
13.
	for /f "tokens=1,2" %%a in ('dir /ta %1^|findstr /c:"%FileName%"') do set "LastAccessDate=%%a %%b" 
14.
		>>"%Log%" echo %date%	%CreationDate%	%LastAccessDate%	%LastModifiedDate%	%FileSize%	%FileName% 
15.
	goto :eof
Bitte warten ..
Mitglied: bastla
28.01.2009 um 15:29 Uhr
Hallo daedalus!

Füge ab Zeile 9 ein
set "FullPath=%~f1" 
call set "RelPath=%%FullPath:%listPath%\=%%
Danach steht %RelPath% zur Verfügung.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...