iceteea
Goto Top

(Mal wieder) Suchen und Ersetzen mittels Batch-Datei

Hi!
Vorweg:
Die SuFu hat doch schon was gebracht, aber wirklich weiterhelfen konnten mir die vielen Beiträge irgendwie leider nicht.
Verzeiht es mir wenn mich mich machnmal villeicht etwas "dumm" anstellen, schließlich bin ich neu hier face-wink

Also gut, kommen wir zu meinem Problem:

Man nehme an, ich hätte eine Textdatei "test.txt" mit folgendem Inhalt:

a123
bcde
fgh1

Die zweite Zeile (Also bcde) soll durch zyxu ersetzt werden. Ich möchte, dass das Script also nach bcde sucht und anstatt dessen zyxu reinschreibt. Das ganze soll er dann speicher - und zwar unter dem selben Dateinamen !
Der Rest der Textdatei sollt möglichst völlig unberührt von den Änderungen bleiben.
Das ganze soll ein reines Batch-Script sein und auch bitte funktionieren face-wink

Wenn es überhaupt geht, dann auch gerne ein Shell .sh für Linux & Co. ; aber das Batch hat Vorrang.


Ich danke schonmal für's durchlesen!
Mfg,
Michael

Content-Key: 90771

Url: https://administrator.de/contentid/90771

Printed on: April 24, 2024 at 02:04 o'clock

Mitglied: 60730
60730 Jun 27, 2008, updated at Oct 18, 2012 at 16:35:55 (UTC)
Goto Top
Hallo und willkommen.

Bastla /?
Member: iceteea
iceteea Jun 27, 2008 at 11:18:40 (UTC)
Goto Top
Cool, Danke!!!
Und gibt es da auch noch eine Lösung mittels Shell-Script ?
Mitglied: 60730
60730 Jun 27, 2008 at 11:25:17 (UTC)
Goto Top
Member: iceteea
iceteea Jun 27, 2008 at 14:19:42 (UTC)
Goto Top
Alles klar. DANKE !
(Die Seite hat er mir nicht gefunden - warscheihnlich falsches Stichwort ^^)

Geht es auch noch dass er den Text durch eine Eingabe ersetzt ?!
Also z.B. das "Terminal" erscheint und ich gebe jetzt Hallo ein,
dass er dann z.B. alle Hi's durch Hallo ersetzt ?! (Mit Batch)
Mitglied: 60730
60730 Jun 27, 2008 at 14:36:19 (UTC)
Goto Top
linux.sh:

echo "Ersetzen von"  
read old_value
echo "Ersetzen mit"  
read new_value
echo $old_value
echo $new_value
exit 0

Windows.cmd

change.cmd Hi's Hallo

echo %1
echo %2
Member: Biber
Biber Jun 27, 2008 at 14:41:21 (UTC)
Goto Top
Moin iceteea,

willkommen im Forum.
"Text durch Eingabe ersetzen" im Windows-Batch. Ja, geht auch.
dazu in dem ersten Schnipsel / ersten angegebenen Link mit "SET /P var=gib ma altenText ein:" arbeiten statt einem "SET var=alterText"

Aber: diese Mimik ist nur dann sinnvoll, wenn Du auch ZEILENweise ersetzt.
Für ZEICHENweise Ersetzung (alle Worte "alterText" durch "irgendwas" ersetzen) ist VBSkript geeigneter.
Oder eben ein Zusammenspiel Batch (für die Benutzereingaben) und ein "sed"-Utility.

Hast Du immer nur komplette Zeilen zu ersetzen?

Grüße
Biber
Member: iceteea
iceteea Jun 27, 2008 at 14:51:40 (UTC)
Goto Top
Dann mache ich mal klar Tisch face-wink

Ich möchte mir eine Art kleine Hilfsprogramm erstellen, mit dem ich eine php.ini bearbeiten kann. D.h. : Ich muss tatsächlich ganze Zeilen ersetzen face-wink

Ich habe noch ein Problem mit dem ersten Script (ist mir jetzt erst aufgefallen):

Ich habe jetzt z.B. eine Zeile
safe_mode = On

Per Batch soll die dann z.B. auf
safe_mode = Off

geändert werden. Das Ergebnis aber sieht so aus:
Off=safe_mode = On= Off


Das was ihn stört ist meiner Meinung nach das "="-Zeichen. Gibt es noch einen anderen Weg ?!
Ich bin für alles offen - es sollte aber nur nicht allzu kompliziert sein face-smile
Member: Biber
Biber Jun 27, 2008 at 15:12:27 (UTC)
Goto Top
Moin iceteea,

in diesem Fall ist es ja nur eine Änderung der Rahmenbedingungen, des Algorithmus.
Vorher: Suche "AlteKomplettzeile" , ersetze durch "neueKomplettzeile"
[wobei das Gleichheitszeichen und evtl. auch vorhandene/nicht vorhandene Leerzeichen vor/nach dem "=" Komplikationen verursachen können.]

Ändere die Mimik auf:
Wenn Zeile mit "safe_mode" beginnt, dann schreibe "safe_mode = Off"

Egal, ob da jetzt "safe_mode =On" oder "SaFe_Mode = Off" oder "Safe_mode ==Tippfehler" drinsteht.

Grüße
Biber
Member: iceteea
iceteea Jun 27, 2008 at 15:16:12 (UTC)
Goto Top
Ok - Zeile 5f meines ersten Beitrags;
Aber wie mach ich das ?
Member: Biber
Biber Jun 27, 2008 at 15:29:57 (UTC)
Goto Top
Moin Iceteea,

ungetestet und einfach vor mich hingeschrieben so:
:: ----snipp ganzeZeileErsetzen.cmd
@echo off & setlocal
Set /p "Suchwort=Suchwort eingeben: "  
Set /p "ErsatzZeile=ErsatzZeile eingeben: "  
If exist %temp%\new.txt del %temp%\new.txt

For /F "delims=" %%i in (D:\eine\php.ini) do (  
   Echo %%i|Findstr /b "%Suchwort%" >nul  
   If Errorlevel 1 ( 
          echo %%i>>%temp%\new.txt
   ) Else (
          echo %Ersatzzeile%>>%temp%\new.txt
))
move %temp%\new.txt D:\eine\php.ini

Grüße
Biber
[Edit] Ein paar korrekturen reingeflickt. [/Edit]
[Edit] Und Jahre später noch mal ein fehlendes Anführungszeichen nachgetragen am 23.6.2011. Thx@Skyemugen für den Hinweis.[/Edit]
Member: iceteea
iceteea Jun 27, 2008 at 15:40:21 (UTC)
Goto Top
Ahh, macht er nicht. Es funktioniert tadellos, aber die Datei wird nicht verändert.
Mitglied: 60730
60730 Jun 27, 2008 at 15:43:45 (UTC)
Goto Top
gib mal
type %temp%\new.txt ein?

bzw: Zeile 2
@echo off & setlocal
ändern in
setlocal
(zum Test)
Member: iceteea
iceteea Jun 27, 2008 at 15:47:43 (UTC)
Goto Top
Noch immer nichts. Gibt es alternative Script-Sprachen ?!
(Also jetzt blos kein C++ oder so, ich dachte da ehen an z.B. Php selbst, Javascript oder Java, etc...)

MOMENT:

@echo off & setlocal enabledelayedexpansion
set "Datei=F:\test.txt"
set "Von=hallo"
SET /P var=hierdeintextetc:"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
move /y "%t%" "%Datei%"


Das ist mein aktueller Code,
alle Hallo's werden jetzt durch ECHO ist ausgeschaltet (OFF).
ersetzt. Sagt mir aber leider nichts. Wo liegt der Fehler ?
Member: Biber
Biber Jun 27, 2008 at 16:16:35 (UTC)
Goto Top
Moin iceteea,

in meinem Schnipsel fehlt(e) jedenfalls eine schließende runde Klammer.
Habe ich oben angepasst. Und zwei andere Korrekturen auch.

Versuch es noch mal bitte.

Grüße
Biber
Member: iceteea
iceteea Jun 27, 2008 at 16:25:33 (UTC)
Goto Top
PERFEKT ! Danke !!!
Gibt es noch einen weg das Suchwort nicht manuell einzugeben ?! (Also quasie "vordefiniert")

EDIT: Ahh, *Stirn klatsch* einfach das /p entfernen !

Frage: Kann ich dein Script auch benutzen um mehrere Dateien gleichzeitig zu bearbeiten ? Was muss ich eingeben ?!

EDIT2:

Unten drann einfach:

For /F "delims=" %%i in (Datei2.txt) do (
Echo %%i|Findstr /b "%Suchwort% >nul
If Errorlevel 1 (
echo %%i>>%temp%\new.txt
) Else (
echo %Ersatzzeile%>>%temp%\new.txt
))
move %temp%\new.txt Datei2.txt

Anhängen (Datei2.txt ist natürlich ein Platzhalter für eure Datei)

[GELÖST]