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 - Suchen und Ersetzen - String in Datei durch einen Teil des Dateinamens ersetzen

Frage Entwicklung VB for Applications

Mitglied: LE-Tarantino

LE-Tarantino (Level 1) - Jetzt verbinden

11.01.2010 um 16:47 Uhr, 14290 Aufrufe, 6 Kommentare

Hallo zusammen,

tut mir leid, dass ich einen neuen Beitrag zu einem strapazierten Thema verfasse, aber die vorhandenen Threads reichen wirgendwie nicht aus, um mich auf den richtigen Weg zu bringen. Zumindest die Kombination aus variablen Dateinamen und variablen Strings zum Ersetzen habe ich bisher noch nicht gefunden. Habe parallel dazu einen identischen Thread in der Rubrik Batch & Shell, glaube aber, dass dies wohl einfacher in VBScript zu lösen ist.

Folgendes Problem:
Es existiert ein Verzeichnis mit mehreren hundert Dateien. Das Namensschema der Dateien sieht wie folgt aus (Eckige Klammern nur zur Veranschaulichung):

"User#[ID] on [ID] at [Date] for Machine.gz" --> [ID] & [Date] sind dynamisch, ansonsten statischer Aufbau

Innerhalb jeder Datei existiert ein Abschnitt "BIOS SERIAL NUMBER="[SERIAL]" --> [SERIAL] ist dynamisch

Diese Seriennummer möchte ich gern durch den Wert der [ID] aus dem Dateinamen ersetzen. Die Seriennummer kann dabei auch aus einem Leerzeichen bestehen.

Vom Ansatz her würde ich:

1. Im Dateinamen den Wert zwischen "#" und dem nächsten Leerzeichen in eine Variable ID legen
2. DIe Datei öffnen
3. Innerhalb der Datei nach "BIOS SERIAL NUMBER=" suchen
4. Den folgenden String bis zum nächsten Anführungszeichen durch ID ersetzen
5. Die Datei speichern

Leider fehlen mir die VB-Scripting Kenntnisse dazu.

Kann jemand helfen?

Vielen Dank und beste Grüße,
LE-Tarantino
Mitglied: bastla
11.01.2010 um 18:18 Uhr
Hallo LE-Tarantino und willkommen im Forum!

Mit einer kleinen Abweichung von Deinem Ansatz (wenn die ID auch verlässlich zwischen dem zweiten und dritten Leerzeichen des Dateinamens zu finden ist, lässt sie sich so leichter auslesen) könnte das etwa so gehen:
01.
Folder = "D:\Verzeichnis" 
02.
LookFor = "BIOS SERIAL NUMBER=" 
03.
 
04.
LL = Len(LookFor) 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
 
07.
For Each File In fso.GetFolder(Folder).Files 
08.
    ID = Split(File.Name) 
09.
    Lines = Split(File.OpenAsTextStream(1).ReadAll, vbCrLf) 
10.
    ToWrite = False 
11.
    For i = 0 To UBound(Lines) 
12.
        If Left(Lines(i), LL) = LookFor Then 
13.
            Lines(i) = LookFor & Chr(34) & ID(2) & Chr(34) 
14.
            ToWrite = True 
15.
            Exit For 
16.
        End If 
17.
    Next 
18.
    If ToWrite Then fso.CreateTextFile(File.Path).Write Join(Lines, vbCrLf) 
19.
Next
In dieser Fassung werden alle Dateien des Verzeichnisses bearbeitet. Nur wenn die Ersetzung erfolgen konnte, wird die jeweilige Datei neu geschrieben. Bitte Testdaten verwenden, da keine Sicherungskopien erstellt werden.

Gesucht wird exakt (also auch hinsichtlich der Großschreibung) nach "BIOS SERIAL NUMBER=". Wenn die Zeile gefunden wurde, erfolgt keine "Ersetzung" im eigentlichen Sinn, sondern die Zeile wird neu erstellt, indem an den Suchbegriff ein Anführungszeichen, die ID und ein weiteres Anführungszeichen angefügt werden.

Grüße
bastla
Bitte warten ..
Mitglied: LE-Tarantino
11.01.2010 um 23:42 Uhr
Hi Bastia,

vielen Dank dafür!

Funktioniert 1a.. besonders die Idee mit dem ID = Split(File.Name) find ich klasse!
Bitte warten ..
Mitglied: bastla
12.01.2010 um 15:53 Uhr
Hallo LE-Tarantino!

Freut mich, wenn's für Dich passt.
besonders die Idee mit dem ID = Split(File.Name) find ich klasse!
Der Dank hierfür gilt den MS-Programmierern (in VB5 gab's "Split()" noch gar nicht ) ...

Grüße
bastla
Bitte warten ..
Mitglied: Mehonidas
27.07.2011 um 14:11 Uhr
Hallo Ihr 2,
ich habe eine ähnliche Problem, ich möchte einen Ordner durchlaufen und in allen darin enthaltenen Dateien die Zeichen Sounds durch 04_Sounds ersetzen.

Dazu habe ich dein Script so angepasst:

01.
Folder = "E:\04_Sounds\Playlists\HuggaBugga\Neuer Ordner"  
02.
LookFor = "Sound"  
03.
ersetze = "04_Sounds" 
04.
 
05.
LL = Len(LookFor)  
06.
 
07.
Set fso = CreateObject("Scripting.FileSystemObject")  
08.
 
09.
 
10.
For Each File In fso.GetFolder(Folder).Files  
11.
    
12.
    Lines = Split(File.OpenAsTextStream(1).ReadAll, "\",-1)  
13.
    ToWrite = False  
14.
 
15.
    For i = 0 To UBound(Lines)  
16.
        If Left(Lines(i), LL) = LookFor Then  
17.
            Lines(i) = ersetze 
18.
        ToWrite = True  
19.
         Exit For  
20.
        End If  
21.
    Next  
22.
    
23.
	 If ToWrite Then fso.CreateTextFile(File.Path).Write Join(Lines, "\")  
24.
Next
Ich habe nur das Problem, dass es immer nur das erste Vorkommen von "Sounds" ersetzt aber nicht die nachfolgenden, daher habe ich zum einen versucht die Split Anweisung durch -1 anzupassen oder die Abbruchbedingung der For-Schliefe, nur ich komme nicht weiter. Bin leider noch ein VBS Noob.

Wie passe ich den Code richtig an?

So sehen übrigens die zu ändernden Dateien aus, es handelt sich um Playlisten.

01.
#EXTM3U 
02.
#EXTINF:171,Interpret 
03.
\Sounds\Alben\Verzeichnis\09 - Interpret.mp3 
04.
#EXTINF:137,Interpret- AudioTrack 03 
05.
\Sounds\Alben\Verzeichnis\03-AudioTrack 03.mp3 
06.
#EXTINF:260,Interpret - AudioTrack 07 
07.
\Sounds\Alben\Verszeichnis\Interpret - AudioTrack 07.mp3 
08.
#EXTINF:203,10 Titel 10
Danke schonmal

Gruß Meho
Bitte warten ..
Mitglied: bastla
27.07.2011 um 15:49 Uhr
Hallo Mehonidas!

Wenn Du ohnehin durchgängig ersetzen willst, musst Du die Dateien nicht zeilenweise abarbeiten - das sollte etwa so gehen:
01.
Folder = "E:\04_Sounds\Playlists\HuggaBugga\Neuer Ordner" 
02.
LookFor = "\Sounds\" 
03.
ReplaceBy = "\04_Sounds\" 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
For Each File In fso.GetFolder(Folder).Files 
07.
    T = fso.OpenTextFile(File.Path).ReadAll 
08.
    fso.CreateTextFile(File.Path).Write Replace(T, LookFor, ReplaceBy) 
09.
Next
Zur Sicherheit habe ich den Such- bzw Ersetzungs-Begriff etwas genauer (mit "\" davor und danach) formuliert - so werden nicht Ersetzungen innerhalb von zB Dateinamen vorgenommen. Du solltest aber trotzdem vorweg mit Kopien testen ...

Grüße
bastla
Bitte warten ..
Mitglied: Mehonidas
27.07.2011 um 18:35 Uhr
es gibt eine replace Funktion?

°!° schei.. Buch !

Das nächste mal schreib ich gleich ins Forum! ^^

VIELEN VIELEN DANK es funktioniert!

Gruß Meho
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows 7
Windows 7: Per VBScript Netzwerkdrucker ersetzen (1)

Frage von donnyS73lb zum Thema Windows 7 ...

VB for Applications
gelöst Mit VBA im Monatskalender Datum suchen - aus anderer Datei einfügen (6)

Frage von Otto1699 zum Thema VB for Applications ...

Batch & Shell
Suchen, Ersetzen und Entfernen von Dateiinhalten auf Textbasis (1)

Frage von DanteManor zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell String Suchen mit Wildcard und Ersetzen (6)

Frage von herrmanndominic zum Thema Batch & Shell ...

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

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...