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

Batch - Suchen und Ersetzen - Variablen String durch einen Teil eines variablen Dateinamens ersetzen

Frage Entwicklung Batch & Shell

Mitglied: LE-Tarantino

LE-Tarantino (Level 1) - Jetzt verbinden

11.01.2010, aktualisiert 18.10.2012, 13602 Aufrufe, 2 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.

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 Batch-Scripting Kenntnisse dazu.

Kann jemand helfen?

Vielen Dank und beste Grüße,
LE-Tarantino
Mitglied: Biber
11.01.2010 um 20:45 Uhr
Moin LE-Tarantino,

willkommen im Forum.
Leider kommt jetzt im ersten Schritt keine out-of-the-box-Lösung von mir, da die Gesamtstrategie insgesamt so nicht umsetzbar ist
Ich versuche es mal aufzudröseln.

Zitat von LE-Tarantino:
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
....
Vom Ansatz her würde ich:

1. Im Dateinamen den Wert zwischen "#" und dem nächsten Leerzeichen in eine Variable ID legen
Das passt und ist im Batch mit einer Anweisung FOR /F %%i "tokens=2 delims=# " in ('dir "[pfad\]User#*.gz"') do .... machbar.
Dann steht das Erwünschte in Variable %%j
Somit hätten wir den wichtigen Part "für jede relevante Datei namens bla[%%j]bla.gz" mache etwas mit dem variablen Namensteil %%j
Aber dieses hier von 2-5...:
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
... das geht (technisch) nicht mit Batch-Befehlen... damit geht nur "Datei zeilenweise lesend verarbeiten" ODER "An (ggf. leere) Datei zeilenweise neues anhängen".
Bedeutet de facto
- - entweder - -
  • mit CMD-Befehlen die Datei bla[%%j]bla.gz lesend durchwackeln
  • und Zeile für Zeile identisch in Datei bla[%%j]bla.gz2 schreiben
  • Sonderlocke für Zeile "BIOS SERIAL..."
  • danach bei Erfolg (soweit feststellbar) Originaldatei *.gz löschen und variierte Kopie *.gz2 umbenamsen in *.gz
--> Problem: von ein paar hundert *.gz-Dateien müssen diese Zeile-für-Zeile-fast-Clones erzeugt, die Originale gelöscht und die Clone umbenannt werden-->ist langsam!
------> Problem 2: Original ist hinterher wech... und ob alle Zeilen Eins-zu-Eins "kopiert" werden konnten ist nicht wirklich prüfbar, da CMD-Batches bei Umlauten, Sonderzeichen rumzicken können. Informationsverlust droht.

-- oder - -
  • das "Ersetzen-in-Originalzeile" macht ein (temporäres) VBSkript-Schnipselchen.
-> Problem könnte bestenfalls sein, dass kein VBSkript benutzt werden darf bei euch.


Generell aber finde ich den Plan ohnehin nicht so prickelnd.
Wenn du doch ohnehin diese paar hundert lose strukturierten *.gz durchflöhen willst, um meinetwegen die BIOS-Serialno zuzuordnen....

Warum schreibst du gleich alle (erhaltenswerten) Informationen aus allen *.gz-Dateien neu in eine stringenter strukturierte CSV-oder-so-Datei, damit du dann in einer Datentabelle (DB oder Tabellenkalkulation) alle Jetzt-in-je-einer-Datei-Infos in einer Datei mit allen Infos in je einer Zeile hast?

Grüße
Biber
Bitte warten ..
Mitglied: LE-Tarantino
11.01.2010, aktualisiert 18.10.2012
Hi Biber,

vielen dank für deine Antwort! Ich hatte schon befürchtet, dass die Dateioperationen mit normalem Batch Scripting nicht umsetzbar sind. Deshalb habe ich im VBScript-Bereich noch einmal die selbe Anfrage gepostet. Mit deiner Antwort und der Antwort aus dem VB Bereich sollte ich jetzt sogar schon in der Lage sein etwas passendes zu basteln (Der Einsatz von VBS ist also kein Problem ) Ich bin auch schon am überlegen, ob ich nicht einfach ein kleines Tool in VB6 schreib, aber den Aufwand wollte ich eigentlich so gering wie möglich halten.

Zu deiner konzeptionellen Anmerkung:

Der Gesamthintergrund ist der Folgende: Ich führe in einem Unternehmen eine Lizenzprüfung (im Kundenauftrag, nicht BSA ) durch. Hierzu nutze ich eine Software, die mittels File-, Registry- und WMI Scans die installierte Software ermittelt. Die Ergebnisse werden im (eben nicht losen, aber das war mein Fehler XML Format erstellt und entsprechend abgelegt. Die Dateigröße der ungepakten XML beträgt etwa 1-2 MB. Sämtliche in ihr enthaltenen Infomationen (Rechnerinventar) sind "erhaltenswert".

Die Dateiendung .gz hatte ich nur beispielhaft verwendet, da die XML (nach der Ersetzung der BIOS Seriennummer) noch gepackt werden. Sorry dafür.

Damit weder Nutzer noch Rechner zurückverfolgt werden können (Stichwort Personalrat und personenbezogene Daten) werden im Laufe des Scanvorgangs alle Rechner- und Nutzernamen durch die zufällige [ID] ersetzt. Diese ist pro Rechner eineindeutig. Die ausgelesene BIOS Seriennummer des Rechners wird vom Lizenzmanagementsystem als identifizierender Schlüssel verwendet. Einige hundert Geräte haben jedoch identische BIOS Seriennummern (in verschiedener Ausprägung, hier haben die OEMs gepennt!). Damit würde das System beim Inventarimport annehmen es handele sich stets um den selben Rechner. Daher will ich diese durch die eineindeutige [ID] ersetzen.

Hoffe ich hab die Problemstellung ein wenig transparenter gemacht.

Viele Grüße und danke für deine Antwort (und die Anregungen, die vllt noch kommen)
LE-Tarantino

EDIT: Die im VBScripting Bereich von Bastia gepostete Lösung funktioniert 1a .. daher hier nochmal fix der Verweis darauf

http://www.administrator.de/forum/vbscript-suchen-und-ersetzen-string-i ...
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Dateien aus CSV mit Batch suchen (5)

Frage von joes1609 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen ersetzen mit Sonderzeichen (2)

Frage von GNLen1 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
gelöst Teile eines Dateinamens ändern mit Batch Datei (4)

Frage von fffffuuuuuuuhhhh zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte