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

Per Batch in einer Textdatei nach einem String suchen und dann gesamte Zeile ersetzen

Frage Entwicklung Batch & Shell

Mitglied: Thoper

Thoper (Level 1) - Jetzt verbinden

11.02.2013 um 09:57 Uhr, 2617 Aufrufe, 4 Kommentare

Hallo Community,

ich habe folgendes Problem mit einer Batch, die mir zwei Zeilen in einer Textdatei ersetzen soll. Zunächst habe ich dieses funktionierende Script genutzt um die beiden Zeilen zu ersetzen:

01.
@echo off 
02.
	setlocal disableDelayedExpansion 
03.
	set "datei=C:\Users\%username%\Desktop\test.js" 
04.
	set "tmpdatei=%temp%\tmp.txt"  
05.
 
06.
if exist C:\Users\%username%\Desktop\test.js ( 
07.
	GOTO :beginnersetzen ) else ( 
08.
	goto :eof) 
09.
 
10.
:beginnersetzen 
11.
 
12.
>"%tmpdatei%" ( 
13.
  for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "%datei%"') do ( 
14.
    if %%A==1 ( 
15.
       echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^); 
16.
    ) else if %%A==2 ( 
17.
       echo user_pref("abc.app.URL", "file:///D:/%COMPUTERNAME%.txt"^); 
18.
    ) else echo(%%B 
19.
20.
21.
 
22.
move /y "%tmpdatei%" "%datei%"
Nun ist es aber so, dass der zu ersetzende Text nicht unbedingt an Stelle X oder Y (hier Zeile 1 und 2) auftaucht, d.h. dass ich nach einer bestimmten Zeichenkette ( z.B. abc.app.filename und abc.app.URL ) suchen müsste um dann die komplette Zeile zu ersetzen. Mit folgendem Versuch die for-Schleife zu ändern bin ich bislang gescheitert:

01.
>"%tmpdatei%" ( 
02.
  for /f "tokens=1* delims=:" %%A in ('findstr /c "^" "%datei%"') do ( 
03.
    if %%A==abc.app.filename ( 
04.
       echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^); 
05.
    ) else if %%A==abc.app.URL ( 
06.
       echo user_pref("abc.app.URL", "file:///D:/%COMPUTERNAME%.txt"^); 
07.
    ) else echo(%%A 
08.
09.
)
Das funktioniert solange in der Zeile auch nur die genaue Zeichenkette

abc.app.filename

steht, aber die Zeile sieht in etwas so aus:

user_pref("abc.app.filename", "file:///D:/test.txt");

Und dann funktioniert es mit dem Ersetzen leider nicht und die geänderte Zeile sieht im Ergebnis so aus:

user_pref("abc.app.filename", "file

Die Zeile wird am Ende also einfach beschnitten. Leider sind meine Kenntnisse rudimentär und ich komme an dieser Stelle nicht mehr weiter. Eventuell nutze ich einfach nur den falschen Schalter für findstr?! Ich hoffe, mir kann jemand bei der Lösung dieses Problems helfen!

Thoper
Mitglied: bastla
11.02.2013, aktualisiert um 10:20 Uhr
Hallo Thoper und willkommen im Forum!

Wenn es bei den (nur) 2 Ersetzungen bleibt, ungetestet etwa so:
01.
@echo off & setlocal disableDelayedExpansion 
02.
set "datei=C:\Users\%username%\Desktop\test.js" 
03.
set "tmpdatei=%temp%\tmp.txt"  
04.
 
05.
if not exist "C:\Users\%username%\Desktop\test.js" goto :eof 
06.
 
07.
>"%tmpdatei%" ( 
08.
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "%datei%"') do ( 
09.
    echo "%%B"|findstr "abc\.app\.filename" >nul && ( 
10.
        echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^); 
11.
    ) || ( 
12.
        echo "%%B"|findstr "abc\.app\.URL" >nul && ( 
13.
            echo user_pref("abc.app.URL", "file:///D:/%COMPUTERNAME%.txt"^); 
14.
        ) || ( 
15.
            echo(%%B 
16.
        )   
17.
18.
19.
20.
 
21.
move "%tmpdatei%" "%datei%">nul
Kurze Erklärung: Da die mit "findstr /n" erzeugte Zeile ja so aussieht:
Zeilennummer:Zeilentext
steht in %%A eben die Zeilennummer und der Zeilentext selbst ist in %%B zu finden. Durch die Angabe von "tokens=1* delims=:" wurde festgelegt, dass das Trennzeichen ":" nur einmal berücksichtigt werden soll, sodass der Zeilentext nicht "zerrissen" wird.

Grüße
bastla
Bitte warten ..
Mitglied: Thoper
11.02.2013 um 10:49 Uhr
Hallo bastla,

herzlichen Dank für die super schnelle Hilfe! Das funktioniert soweit!

Es gibt aber noch eine Fehlerausgabe. Diese habe ich mal in eine Textdatei umgeleitet:

Der Befehl "PT");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "PT");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "D");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "D");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "T");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "T");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "U");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "U");"" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Diese Fehler müssten sich auf folgende Zeilen in der Datei beziehen, in der ich die Änderungen vornehmen möchte:

user_pref("PrintSettings.Default.FooterStrLeft", "&PT");
user_pref("PrintSettings.Default.FooterStrRight", "&D");
user_pref("PrintSettings.Default.HeaderStrLeft", "&T");
user_pref("PrintSettings.Default.HeaderStrRight", "&U");

Wie kann man das noch ausmerzen?

Und ich muss auch ganz ehrlich sagen, dass ich nicht so ganz Deine Änderungen nachvollziehen kann. Könntest Du mir bitte noch kommentieren, was an dieser Stelle genau passiert:

echo "%%B"|findstr "abc\.app\.filename" >nul && (
echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^);
) ||

Würde das gerne verstehen! Nochmals vielen Dank!!

Gruß,
Thoper
Bitte warten ..
Mitglied: bastla
11.02.2013, aktualisiert um 11:13 Uhr
Hallo Thoper!

Lass in den Zeilen 9 und 12 die Anführungszeichen um %%B herum weg ...
01.
echo "%%B"|findstr "abc\.app\.filename" >nul && ( 
02.
    echo user_pref("abc.app.filename", "file:///D:/%COMPUTERNAME%.txt"^); 
03.
) ||
gibt zunächst den Zeilentext aus und verwendet dann "findstr" um festzustellen, ob der Suchtext enthalten ist. Je nach Ergebnis wird der Errorlevel 0 oder nicht 0 sein, und dieser lässt sich mit "&&" (kein Fehler aufgetreten bzw hier: "gefunden") und "||" (vorige Anweisung mit Fehler beendet bzw "nicht gefunden") auswerten.

Grüße
bastla

P.S.: Die Zeile 5 wäre so:
if not exist "%datei%" goto :eof
auch noch sinnvoller (weil änderungsfreundlicher).
Bitte warten ..
Mitglied: Thoper
11.02.2013 um 13:53 Uhr
Läuft jetzt einwandfrei! Nochmals ganz herzlichen Dank, auch für Deine Erklärung und den Tipp! Echt super!

Thoper
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell - In Textdatei suchen und ersetzen
gelöst Frage von Raaja89Batch & Shell5 Kommentare

Hallo Zusammen, ich habe einen Textdatei mit vielen aufeinander folgendenden Leerzeichen und wo an diversen Stellen Überschriften stehen. Ungefähr ...

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 ...

Perl
In Textdatei nach String suchen und diesen als Variable weiterverarbeiten
gelöst Frage von hokoPerl4 Kommentare

Hallo, Ich möchte in einem Pelrscript eine Textdatei nach einem String durchsuchen und diesen dann weiterverarbeiten. Der zu suchende ...

Batch & Shell
Suchen - Ersetzen in einer Textdatei - Beschleunigung möglich?
gelöst Frage von Highend01Batch & Shell4 Kommentare

Hi, ich möchte durch eine .bat Datei eine .xml Datei parsen um Ersetzungen vorzunehmen. Ein Beispiel: Die zugehörige Task ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 14 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 16 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...