Autor
|
Thema: Batch suchen ersetzen (2827 mal gelesen)
|
Sbg Markus Mitglied
Beiträge: 516 Registriert: 24.11.2009
|
erstellt am: 25. Feb. 2013 13:52 <-- editieren / zitieren --> Unities abgeben:
Ich möchte in einer bestimmten Datei "C:\Test1.txt" 4 verschiedene Wörter suchen und mit 4 bestimmten Wörtern ersetzen lassen. Meine Datei schaut so aus aber es klappt nicht. In den Leerzeilen wird "ECHO ist ausgeschaltet (OFF)" eingetragen. @echo off & setlocal enabledelayedexpansion echo Das Schaltplanupdate dauert ein paar Minuten set "Datei=C:\Test1.txt" set "t=Temp.tmp" set "Suchen1=Personalnummer1" set "Ersetzen1=192" set "Suchen2=Personalnummer" set "Ersetzen2=S192" set "Suchen3=USERname" set "Ersetzen3=Sams" set "Suchen4=EPLANKUERZL" set "Ersetzen4=STE" if exist "%t%" del "%t%" for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine move "%t%" "%Datei%" goto :WEITER_IM_BATCH :ProcessLine for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b" if not defined L >>"%t%" echo\& goto :eof set WriteLine1=!L:%Suchen1%=%Ersetzen1%! set WriteLine2=!WriteLine1:%Suchen2%=%Ersetzen2%! set WriteLine3=!WriteLine2:%Suchen3%=%Ersetzen3%! set WriteLine4=!WriteLine3:%Suchen4%=%Ersetzen4%! >>"%t%" echo !WriteLine4! goto :eof :WEITER_IM_BATCH ....... ------------------ --------------- mfg Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2020 Plateia, Canalis Visual Basic
|
erstellt am: 25. Feb. 2013 20:05 <-- editieren / zitieren --> Unities abgeben: Nur für Sbg Markus
Mal eine grundsätzliche Frage: Wie soll das ausgeführt werden? In einem speziellen Texteditor oder auf der Eingabezeile? Bzw. wenn das wirklich nur die eine Datei ist würde ich das im Textpad oder Ultraedit machen. Könnte man dort auch als Makro speichern .. [Diese Nachricht wurde von KlaK am 25. Feb. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sbg Markus Mitglied
Beiträge: 516 Registriert: 24.11.2009
|
erstellt am: 26. Feb. 2013 07:07 <-- editieren / zitieren --> Unities abgeben:
|
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3358 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 26. Feb. 2013 07:35 <-- editieren / zitieren --> Unities abgeben: Nur für Sbg Markus
|
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 26. Feb. 2013 08:07 <-- editieren / zitieren --> Unities abgeben: Nur für Sbg Markus
Moin Markus, ohne jetzt weiter auf die Diskusion über Editoren einzugehen. -- Du schreibst --
Zitat: In den Leerzeilen wird "ECHO ist ausgeschaltet (OFF)" eingetragen.
Ich kann zwar die Stelle nicht sehen an der das passiert vermute aber mal folgendes: Was in den beabsichtigten Leerzeilen steht, ist die Ausgabe von ECHO ohne Parameter. Zur Ausgabe einer Leerzeile lautet der Befehl 'ECHO.' (mit Punkt am Ende, ohne Leerzeichen dazwischen) Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2020 Plateia, Canalis Visual Basic
|
erstellt am: 26. Feb. 2013 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für Sbg Markus
Meine Frage bezog sich darauf da einige der Zeilen mir sehr komisch vorkamen bzw. einfach falsch definiert. Will es mal versuchen zu erklären: Zitat: Original erstellt von Sbg Markus:
Code:
@echo off & setlocal enabledelayedexpansion echo Das Schaltplanupdate dauert ein paar Minutenset "Datei=C:\Test1.txt" sollte wohl set Datei="C:\Test1.txt" heißen, da ansonsten keine Variable bestimmt wird set "t=Temp.tmp" dito set t="Temp.tmp" set "Suchen1=Personalnummer1" siehe oben set "Ersetzen1=192" siehe oben set "Suchen2=Personalnummer" siehe oben set "Ersetzen2=S192" siehe oben set "Suchen3=USERname" siehe oben set "Ersetzen3=Sams" siehe oben set "Suchen4=EPLANKUERZL" siehe oben set "Ersetzen4=STE" siehe oben if exist "%t%" del "%t%" t war nicht definiert for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine for /F ... zumindest kenne ich das so, evtl geht es aber auch anders move "%t%" "%Datei%" goto :WEITER_IM_BATCH :ProcessLine for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b" auch hier: set L=%%b if not defined L >>"%t%" echo\& goto :eof L ist nicht definiert set WriteLine1=!L:%Suchen1%=%Ersetzen1%! set WriteLine2=!WriteLine1:%Suchen2%=%Ersetzen2%! set WriteLine3=!WriteLine2:%Suchen3%=%Ersetzen3%! set WriteLine4=!WriteLine3:%Suchen4%=%Ersetzen4%! >>"%t%" echo !WriteLine4! hier wird nur "echo " ausgeführt da WriteLine4 leer sein muß (Variablen nicht definiert) mit Deiner erhaltenen Meldung "Echo ist ausgeschaltet" goto :eof :WEITER_IM_BATCH .......
Ob es prinzipiell funktionieren könnte - keine Ahnung Aber wie auch Bernd schrieb, moderne Texteditoren können das viel problemloser ... Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |