deeboo
Goto Top

Dateien speziell sortieren VBS

Jetzt wird es ein wenig hagelig.... ;)
Es sind alle gefragt, die sich mit VB-Script auskennen.

Ich habe einen Ordner in dem verschiedene Dateien folgendes Namenformat haben:

file.123 => erstellt am 19.02.2009
file.143 => erstellt am 20.02.2009
file.645 => erstellt am 23.02.2009

datei2.183 => erstellt am 19.02.2009
datei2.182 => erstellt am 20.02.2009
datei2.189 => erstellt am 23.02.2009

meine.183 => erstellt am 19.02.2009
meine.284 => erstellt am 20.02.2009
meine.543 => erstellt am 23.02.2009

Es gibt also immer Dateien, die gleich anfangen und jeweils verschiedene Dateiendungen haben. Das Erstellungsdatum ist auch verschieden.

Nun möchte ich alle Dateien in diesem Ordner nach >> "file.*; datei2.*; meine.*" << sortieren und davon jeweils von der entspr. neuesten Datei (file.645, datei2.189 & meine.543) den Dateinamen eine bestehende Logdatei schreiben lassen.
Leider habe ich schon zig Foren durchgeforstet und wurde nicht wirklich fündig.
Mag auch daran liegen, das ich nicht der VBS Hirsch bin.
Bin schonmal soweit, das ich "CreateObject" nutzen und irgend ein Pattern setzten muss.
Aber wie, ist mir schleierhaft.

LG
deeboo

Content-ID: 109882

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

bastla
bastla 24.02.2009 um 17:16:07 Uhr
Goto Top
Hallo deeboo!

Ich würde dafür eher einen Batch nehmen (in VBS sind es etwa doppelt soviele Zeilen face-wink):
@echo off & setlocal
set "Ordner=D:\Ein Ordner\"  
set "Dateien=file datei2 meine"  
set "Log=D:\Neueste.log"  

if exist "%Log%" del "%Log%"  
for %%i in (%Dateien%) do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set N=
for /f "delims=" %%a in ('dir /b /on "%Ordner%%~1.*" 2^>nul') do set "N=%%a"  
if defined N >>"%Log%" echo %N%  
if not defined N >>"%Log%" echo Keine %1-Datei gefunden!  
goto :eof
Bitte beachten: Die Ordnerangabe in Zeile 2 muss immer mit "\" enden.

Grüße
bastla
deeboo
deeboo 25.02.2009 um 11:55:43 Uhr
Goto Top
Hallo Bastla,

wie ich so mitbekommen habe, bist ja ein richtiger Scripthirsch. face-smile
Wollt mich vorerst für Deine Hilfe bedanken.

Die Batch funktioniert wunderbar.
Aber rein interessehalber.
Wie würde es denn ich VBS aussehen?

Wäre nett, wenn Du mir ein paar Steps auf den Weg gibst, wie ich am besten anfangen sollte bzw. ne Art "Roadmap".

Daher markiere ich es mal noch nicht als gelöst. (Auch wenn er mit dem Batchfile das tut, was er tun soll)

LG
deeboo
bastla
bastla 25.02.2009 um 12:28:52 Uhr
Goto Top
Hallo deeboo!
ein richtiger Scripthirsch. face-smile
Ja, gib mir Tiernamen ... face-wink
Als VBS sähe es etwa so (leider habe ich momentan etwas weniger Zeit, daher nur die unkommentierte Fassung):
Ordner = "D:\Ein Ordner"  
Dateien = "file datei2 meine"  
LogDatei = "D:\Neueste.log"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set Folder = fso.GetFolder(Ordner)
DateiArten = Split(LCase(Dateien))

For Each DateiArt In DateiArten
    D = ""  
    M = "000"  
    For Each File In Folder.Files
        If LCase(fso.GetBaseName(File.Name)) = DateiArt Then
            Ext = fso.GetExtensionName(File.Name)
            If Ext > M Then
                D = File.Name
                M = Ext
            End If
        End If
    Next
    If D <> "" Then  
        Res = Res & vbCrLF & D
    Else
        Res = Res & vbCrLF & "Es wurde keine """ & DateiArt & """-Datei gefunden!"  
    End If
Next

fso.CreateTextFile(LogDatei, True).Write Mid(Res, 3)
Grüße
bastla
deeboo
deeboo 27.02.2009 um 09:04:12 Uhr
Goto Top
Hat wunderbar geklappt. Haben es noch ein wenig modifiziert.
d.h. die Ausgabe in die Logdatei haben wir in ne Variable gepackt und können somit weiter arbeiten. face-smile

Ist also gelöst. Gib mir einfach mal deine Adresse, damit ich nen Kasten Bier zukommen lassen kann. face-smile

LG
deeboo
bastla
bastla 27.02.2009 um 17:57:17 Uhr
Goto Top
Hallo deeboo!

Freut mich, wenn's Euch hilft ... face-smile

... und danke für das Angebot (obwohl Bier an mich vergeudet wäre - ich halte mich an: "Don't script and drink!" - und da scripte ich dann doch lieber face-wink).

Grüße
bastla
deeboo
deeboo 02.03.2009 um 15:49:29 Uhr
Goto Top
Hallo Bastla,

ich häng mal noch ne kleine Frage an.
Wie kann ich jetzt nach createDate sortieren? Denn das sortieren nach Dateinamen funktioniert nicht so, wie ich es dachte. Denn jetzt komme ich in einen neune Versionsnummernbereich, wo wieder alles von 0 beginnt.

sprich:
002
001
999

Dabei ist aber 002 die aktuellste Datei. Jetzt, nach obigen Bsp, wäre es mit eine der ältesten....*grml*