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

VBScript doppelter Dateiname

Frage Entwicklung VB for Applications

Mitglied: waldgnarf

waldgnarf (Level 1) - Jetzt verbinden

19.08.2008, aktualisiert 20.08.2008, 8464 Aufrufe, 6 Kommentare

Hi ich habe versucht die doppelten BaseDateinamen zu Filtern.
Am Ende sollte ein Ordner erstellt werden wenn ein BaseNamen von einer Datei 2 mal vorhanden ist.
zum Beispiel:
abc.txt
abc 01.txt
-> Ordner abc erstellen
xyz
-> keine Aktion

01.
Set FSO=CreateObject("Scripting.FileSystemObject") 
02.
For Each DATEI01 In FSO.GetFolder("C:\New").Files 
03.
DATEINAME=Left(DATEI01.Name,Len(DATEI01.Name)-4) 
04.
For Each DATEI02 In FSO.GetFolder("C:\New").Files 
05.
If Instr(DATEI02.Name,DATEINAME)>0 Then 
06.
AUSGABE=AUSGABE & DATEI02.Name & VbCrLf 
07.
End If 
08.
Next 
09.
Next 
10.
MsgBox AUSGABE
In dem Script wird der doppelte Dateiname jeh nach Häufigkeit so oft angezeigt wie er im BaseName vorkommt.
Wie kann ich herausfinden ob der BaseName doppelt existiert oder mehrmals und wenn ja den BaseName-Ordner erstellen? Muss ich die Strings aus der AUSGABE Collektion miteinander vergleichen?

Gruß waldgnarf
Mitglied: bastla
19.08.2008 um 02:06 Uhr
Hallo waldgnarf!

Einige Überlegungen zu Deinem Konzept:

  • Zunächst könnte das nur funktionieren (und auch dann nicht mit dieser Version des Scripts), wenn die Dateien in der "Files"-Auflistung sortiert wären (und daher die jeweils kürzeren Dateinamen zuerst kämen) - Du erhältst sie aber in der selben Reihenfolge wie mit einem "dir" ohne Parameter unter CMD.

  • Mit InStr() stellst Du nur fest, ob ein String in einem anderen enthalten ist - daher würde "xyz abc.txt" ebenfalls gefunden werden (könnte aber natürlich auch Deine Absicht sein).

  • Nicht gefunden würde allerdings "Abc" oder "ABC", da Stringvergleiche in VB(S) case-sensitive sind (solange Du nicht explizit mit "vbTextCompare" das Gegenteil festlegst).

  • Da die erste Schleife ja alle Dateien des angegebenen Ordners erfasst, würdest Du mit der aktuellen Fassung einen Ordner "abc" erhalten, aber zB zusätzlich auch noch einen Ordner "abc 01", wenn es etwa noch eine Datei "abc 01.bak" oder "abc 01-alt.txt" gäbe ...
Vielleicht stellst Du kurz dar, wie in etwa der Inhalt des Ordners "C:\New" aussieht, und was genau das angestrebte Ziel ist ...

Grüße
bastla
Bitte warten ..
Mitglied: waldgnarf
19.08.2008 um 17:21 Uhr
Hi, verschiedene Dateien befinden sich im Ordner /New.
Alle haben einen anderen Namen und oft auch unterschiedliche Endungen. Ich habe versucht mit dem Script zu erreichen das wenn ein Dateiname doppelt vorkommt, ungeachtet von den Endungen oder Zahlenanhänge wie 01, ein Ordner mit dem doppelt vorkommenden Namen erstellt wird und die Dateien in den Ordner verschoben werden.

Gruß waldgnarf
Bitte warten ..
Mitglied: bastla
19.08.2008 um 18:27 Uhr
Hallo waldgnarf!

Das Prinzip hatte ich schon verstanden, aber der Teufel steckt ja bekanntlich im Detail - hier zB in der Frage, woran ein "Dateiname" zu erkennen ist, ob es für die Namen ein Schema gibt, etwa:
Alles bis zum ersten Leerzeichen (oder, falls keines enthalten, der gesamte Dateiname) gilt als "Name."
oder:
Der "Name" entspricht den ersten 5 Zeichen des Dateinamens.
etc ...

Wenn ich nochmals das Beispiel von oben strapaziere (und noch etwas ausdehne):
Inhalt von "C:\New" soll ua sein:
01.
abc 01.txt 
02.
abc 01.log 
03.
abc.txt 
04.
abc 01.bak 
05.
abcde.txt 
06.
abc 01-alt.txt 
07.
abcde_080808.log 
08.
xyz_abc 01.txt 
09.
a 01.txt 
10.
ab#cd.log 
11.
xyzabc.txt 
12.
abcd-alt.txt 
13.
ab.doc 
14.
xyz abc.txt 
15.
abc_test.txt 
16.
ab-01.txt 
17.
abcd efgh.log 
18.
a.txt
Wie sähe dafür das gewünschte Ergebnis aus?

Grüße
bastla
Bitte warten ..
Mitglied: waldgnarf
19.08.2008 um 22:22 Uhr
Guten Abend, sorry also bis zum Leerzeichen währe das was ich suche. Oder alle Nummern und Leerzeichen aus dem Dateinamen-String enfernen.
Bitte warten ..
Mitglied: bastla
20.08.2008 um 02:17 Uhr
Hallo Waldgnarf!

Versuch es damit:
01.
StartOrdner = "C:\New" 
02.
 
03.
Set fso = CreateObject("Scripting.FileSystemObject") 
04.
Set d = CreateObject("Scripting.Dictionary") 'Dictionary zum Sammeln der verschiedenen Dateinamen(sbestandteile) und Festhalten der Häufigkeiten 
05.
d.CompareMode = vbTextCompare 'Groß-/Kleinschreibung nicht beachten 
06.
 
07.
For Each Datei In fso.GetFolder(StartOrdner).Files 
08.
    Key = Split(fso.GetBaseName(Datei.Name), " ")(0) 'Dateinamensbestandteil bis zum ersten Leerzeichen ermitteln 
09.
    If d.Exists(Key) Then 'Dateiname mehrfach vorhanden 
10.
        d.Item(Key) = d.Item(Key) + 1 'Zähler erhöhen 
11.
    Else 'Dateiname kommt erstmals vor 
12.
        d.Add Key, 1 
13.
    End If 
14.
Next 
15.
 
16.
For Each Key In d.Keys 
17.
    If d.Item(Key) > 1 Then 'mehrere Dateinamen, daher in Ordner verschieben 
18.
        Ordner = StartOrdner & "\" & Key 
19.
        If Not fso.FileExists(Ordner) Then 'keine gleichnamige Datei vorhanden, Ordner kann bei Bedarf erstellt werden 
20.
            If Not fso.FolderExists(Ordner) Then fso.CreateFolder(Ordner) 'Ordner erstellen 
21.
            fso.MoveFile StartOrdner & "\" & Key & ".*", Ordner 'alle Dateien ohne Nummer verschieben 
22.
            fso.MoveFile StartOrdner & "\" & Key & " *.*", Ordner 'alle Dateien mit Nummer verschieben 
23.
        Else 
24.
            WScript.Echo "Ordner " & Ordner & " kann nicht erstellt werden." 
25.
        End If 
26.
    End If 
27.
Next 
28.
Set d = Nothing
Es wird vor dem Verschieben nicht geprüft, ob es im Zielordner bereits gleichnamige Dateien gibt.

Grüße
bastla
Bitte warten ..
Mitglied: waldgnarf
20.08.2008 um 13:23 Uhr
Hat alles geklappt, vielen Dank

Gruß waldgnarf
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...