Top-Themen

Aktuelle Themen (A bis Z)

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, 14854 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 ..
Ähnliche Inhalte
VB for Applications
VBScript: Hexwert durch Zeichen (String) ersetzen
gelöst Frage von GurkenhobelVB for Applications12 Kommentare

Hallo Gemeinde, ich benötige wieder einmal Euer sachkundiges Expertenwissen. Und zwar möchte ich ältere Textdokumente (erstellt um 2000, evtl. ...

Microsoft
Suche und Ersetzen im Dateinamen mit Wildcard?
gelöst Frage von GottfriedKernMicrosoft5 Kommentare

Ich suche ein Programm, dass Dateinamen durchsucht und mittels Platzhalter ersetzen kann. Beispiel: toller - sound (2002).mp3 soll in ...

Batch & Shell
Powershell String Suchen mit Wildcard und Ersetzen
gelöst Frage von herrmanndominicBatch & Shell6 Kommentare

Hallo zusammen, ich bräuchte Unterstützung bei einem Powershell Script. Ich habe ein Java Rollout per GPO über ein PowerShell ...

Batch & Shell
Teile eines Dateinamens ändern mit Batch Datei
gelöst Frage von fffffuuuuuuuhhhhBatch & Shell4 Kommentare

Hallo, ich, stelle regelmäßig .mp3-Dateien her, die folgendermaßen von meinem Audioprogramm beschriftet wird: Interpret - Titel _xxxxxx000.mp3 die x stehen für eine ...

Neue Wissensbeiträge
Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 1 StundeMicrosoft Office2 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 7 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office9 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Batch & Shell
Dateien verschieben mit batch
gelöst Frage von michi-ffmBatch & Shell13 Kommentare

Hallo Zusammen hat jemand evtl eine Idee? Zunächst hier das Skript: Leider werden keine UNC-Pfade unterstüzt, kann mir jemand ...