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

Frage Entwicklung Batch & Shell

GELÖST

Ersetzen von Text nur an bestimmer Position

Mitglied: josken69

josken69 (Level 1) - Jetzt verbinden

22.01.2010 um 13:18 Uhr, 6478 Aufrufe, 8 Kommentare

Hallo,

ich nehme mit dem unten angefügten Batch verschiedene Änderungen an einer Datei vor,
Nun möchte ich auch einen bestimmten Textstring (im Besipiel 3333333333) durch einen anderen ersetzen. Diese soll aber nur geschehen, wenn der String an einer bestimmten Poition in der Zeile steht, denn der gleiche String kann später in der Zeile noch einmal vorkommen und soll dort dann aber nicht erstetzt werden. Wie kann ich das umsetzen?
Vielen Dank

01.
  
02.
@echo off & setlocal 
03.
set /p File=Geben Sie bitte den Pfad und die Datei an, die umgewandelt werden soll z.B. c:\pfad\input   
04.
set /p NewFile=Geben Sie bitte den Pfad und die Datei an, in der die korrigierte Fassung gespeichert werden soll z.B. c:\pfad\output   
05.
if exist "%NewFile%" del "%NewFile%" 
06.
set "Bak=%File%.bak" 
07.
copy "%File%" "%Bak%" >nul 
08.
Set "lineout= 
09.
set "Blanks100=                                                                                                    " 
10.
for /f "usebackq delims=" %%i in ("%File%") do set "zeile=%%i%Blanks100%" & call :ProcessLine 
11.
Goto :eof 
12.
 
13.
:ProcessLine 
14.
Set "zeile=%zeile:&=§%" 
15.
Set "zeile=%zeile:ä=ae%" 
16.
Set "zeile=%zeile:Ä=AE%" 
17.
Set "zeile=%zeile:ü=ue%" 
18.
Set "zeile=%zeile:Ü=UE%" 
19.
Set "zeile=%zeile:ö=oe%" 
20.
Set "zeile=%zeile:Ö=OE%" 
21.
Set "zeile=%zeile:ß=ss%" 
22.
Set "zeile=%zeile:3333333333=4444444444%" 
23.
Set "zeile=%zeile:&=§%" 
24.
set "zeile=%zeile:~0,128% 
25.
Set "zeile=%zeile:§=^&%" 
26.
<nul >>"%NewFile%" set /p dummy=%zeile% 
27.
 
28.
goto :eof 
29.
Exit 
30.
 
Mitglied: fritzo
22.01.2010 um 15:04 Uhr
Hi,

lad Dir StrFind runter, damit lassen sich Strings in Files suchen und ersetzen.

Gruß,
fritzo

StrFind: [<options>] <search string> [<replace string>] [<file wildcard>]+
Version 1.5 Copyright (c) 2005, Andrew J. Gryc http://gryc.ws andy@gryc.ws

Find/Replace Options
-f : Finds strings only (DEFAULT)
-r : Finds and replaces strings (must include <replace string> argument)
-y : Case sensitive search and replace (DEFAULT)
-i : Case insensitive search and replace
-c : Case insensitive, replacement same case (lower/UPPER/Mixed) as original
-u :*Unicode mode: search and replace are converted from ANSI to Unicode
-n : Match if string is NOT found (cannot be used with -r)
-o :*Ignore escape sequences in input strings
(Example escapes that can be used: ^M \r \015 \x0D)
-w :*Match search string against entire line

Output Options
-t : Print total summary
-g : Print group summaries for each file and wildcard
-m : Print matching lines (if replacing, prints after replacement)
-p : Print matching lines (if replacing, prints original and replacement)
-l : Print line number for matches
-d : Print file and line number for matches
-a : Use all common print options (equivalent to -tgm) (DEFAULT)

General Options
-s :*Recursively process files in subdirectories
-z :*Suppress printing file progress
-k :*Create backups for replaced files
-x :*Fully enumerate and sort file list before searching
(Useful if replace is cyclically replacing in backup files)
-b :*Force binary mode (auto-set if control chars in search/replace)
-e :*Return count of matches as errorlevel to shell
-j[<f>]*: Use index file f (defaults to .strfind.idx in current dir)
-q :*Quick search; assumes index is up-to-date
-v : Verbosity; -v=report times, -vv=index info, -vvv=debugging
-h : Prints this help

Options with * can be turned off by trailing dash (e.g. -k- is no backups)
Default options can be put into STRFIND_OPTIONS environment variable
No search string argument.
Bitte warten ..
Mitglied: bastla
22.01.2010 um 15:04 Uhr
Hallo josken96!

Abgesehen davon, dass Deine "bestimmte" Position für mich eine "unbestimmte" ist, wäre es auch hilfreich, mehr über die Zeile zu wissen - insbes, ob sie bedenkenlos zB an Position 40 geteilt werden kann, um den zu ersetzenden String im einen Teil und den zu schützenden String im anderen Teil zu haben (was ohne großen Aufwand nur geht, wenn ich sicher sein kann, dass die Gesamtlänge der Zeile größer ist als der Wert der Teilungsposition) ...

Wenn ich letzteres einmal unterstelle und die Position zu Testzwecken mit 15 bestimme, sollten folgende (ungetestete) Zeilen als Ersatz der bisherigen Zeile 22 genügen:
01.
set "Teil1=%zeile:~,40%" 
02.
set "Teil2=%zeile:~40%" 
03.
set "zeile=%Teil1:3333333333=4444444444%%Teil2%"
[Edit] Soferne die Postion und Länge des zu ersetzenden Teiles immer identisch ist, wäre
01.
set "Teil1=%zeile:~,14%" 
02.
set "Teil2=%zeile:~14,10% 
03.
set "Teil3=%zeile:~24%" 
04.
set "zeile=%Teil1%%Teil2:3333333333=4444444444%%Teil3%"
natürlich noch genauer ...
[Edit]

Grüße
bastla
Bitte warten ..
Mitglied: bastla
22.01.2010 um 15:09 Uhr
@fritzo
Das sind aber viele Optionen - welche ist denn erforderlich, um nur in einem bestimmten Teil des Strings zu ersetzen?

Grüße
bastla
Bitte warten ..
Mitglied: fritzo
23.01.2010 um 14:02 Uhr
Zitat von bastla:
@fritzo
Das sind aber viele Optionen - welche ist denn erforderlich, um nur in einem bestimmten Teil des Strings zu ersetzen?

@bastla
Wer wie josken in einem Batch mit FOR-Schleifen Text einliest, parst und dann an Subroutinen weitergibt, von dem erwarte ich auch, daß er sich kurz mal die englische Hilfe eines Doskommandos ansehen und diesem entnehmen kann, welche Syntax er verwenden muß.. ansonsten könnte ich auch vor jedes Kommando schreiben "Dies bitte in der Dosbox ausführen" :P
Bitte warten ..
Mitglied: bastla
23.01.2010 um 14:32 Uhr
@fritzo
Falls ich Dich richtig verstehe, heißt das:
  • "StrFind" bietet die gewünschte Funktionalität
  • aus edukativen Gründen hast Du aber eine Menge dafür nicht relevanter Optionen gepostet

Grüße
bastla
Bitte warten ..
Mitglied: fritzo
23.01.2010 um 15:14 Uhr
@bastla
Korrekt. Wobei ich finde, daß Deine Lösung besser ist, daß "set" auch Strings suchen und ersetzen kann, wußte ich nicht. Meine Lösung würde erfordern, daß man das Textfile nochmal anfasst bzw. mit Zwischenkopien und type | find arbeitet, da StrFind nicht in der Lage ist, nach der ersten Fundstelle des Strings abzubrechen. Ich würde zu einer Umsetzung mit vbscript tendieren, hier könnte man mit einer simplen Schleife den Text einlesen und nach dem ersten Fund aus der Schleife rausspringen.
Bitte warten ..
Mitglied: bastla
23.01.2010 um 15:30 Uhr
@fritzo
Da josken69 bisher offensichtlich mit Batch zurechtgekommen ist, habe ich davon abgesehen, VBScript anzubieten; allerdings stimme ich Dir zu, dass für "Suchen/Ersetzen" VBScript die bessere Sparache ist - nicht zuletzt, weil die Sonderzeichen-Problematik entfällt und auch RegEx samt Submatches zur Verfügung stehen ...

Grüße
bastla
Bitte warten ..
Mitglied: josken69
25.01.2010 um 11:45 Uhr
Hallo,
danke bastla, das letzte Posting war genau das, was ich gesucht habe. Schöne Woche noch.
Gruß josken69
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
In txt file an bestimmter Position zeichen ersetzen, Ideen ?
gelöst Frage von buliwyfBatch & Shell7 Kommentare

EIn freundl. Hallo all ;-) mein Anliegen was mich jetzt 2 Tage beschaeftigt ist : wie kann ich in ...

Microsoft Office
Text in mehreren .docx suchen und ersetzen
gelöst Frage von DerWoWussteMicrosoft Office14 Kommentare

Moin Kollegen. Ich hoffe auf Antworten von Leuten, die genau das per Tool schon mal gemacht haben: Selektiere mehrere ...

Batch & Shell
Wenn bestimmer Text in Datei nicht existiert dann script ausfürhen
gelöst Frage von aletriBatch & Shell2 Kommentare

Guten Morgen an alle Der untenstehende Script fügt der Scenery.cfg bestimmte Zeilen hinzu und soweit funktioniert es! Wie kann ...

Microsoft Office
BMP Bild mit Text aus Word Datei ersetzen
gelöst Frage von Timo0oMicrosoft Office16 Kommentare

Halli Hallo, ich habe eine kurze Frage, vielleicht kann mir dadurch ja jemand viel Arbeit ersparen! Undzwar habe ich ...

Neue Wissensbeiträge
Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 9 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 9 StundenSicherheit7 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 10 StundenSicherheit6 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 11 StundenSicherheit12 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen20 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...