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

Batch zum ändern einer Textdatei

Frage Entwicklung Batch & Shell

Mitglied: weboadmix

weboadmix (Level 1) - Jetzt verbinden

18.02.2014, aktualisiert 21:15 Uhr, 1890 Aufrufe, 5 Kommentare, 1 Danke

Hallo zusammen,

suche hier etwas verzweifelt nach Hilfe, um mit einer Batchdatei eine Textdatei zu durchsuchen und eine Zeile zu ändern.

An und für sich kein Problem, das besorndere scheint nur zu sein, dass der Wert der Variable die gesucht wird ein Gleichheitszeichen beinhaltet.

Etwas genauer:

Ich habe eine Textdatei, die folgendermaßen aufgebaut ist:

Hubert=1
Josef=0
Gerd=0
Inge=1
Walter=1

und so weiter, ingesamt 9 Zeilen.

Nun soll die Batchdatei die Zeilen nach "Hubert=1" durchsuchen und in "Hubert=0" verändert.


Meine bisherigen Versuche sehen so aus:

01.
REM @ECHO off 
02.
SETLOCAL enabledelayedexpansion 
03.
 
04.
 
05.
 
06.
SET "quell_datei=C:\data.txt" 
07.
SET "ziel_datei=C:\data.txt" 
08.
SET "suchen_nach=Hubert=1" 
09.
SET "ersetzen_durch=Hubert=0" 
10.
 
11.
REM Ausgabe einer Fehlermeldung und Programmabbruch 
12.
REM falls die Variable "suchen_nach" nicht definiert ist 
13.
IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof) 
14.
 
15.
REM Loeschen der Ausgabedatei, falls sie (noch) existiert 
16.
REM IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL) 
17.
 
18.
REM Quell-Datei zeilenweise auslesen  
19.
REM und in Variable "zeile" schreiben 
20.
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
21.
SET zeile=%%i& CALL :ersetzen !zeile! 
22.
23.
GOTO :weiter 
24.
:ersetzen 
25.
REM innerhalb der Variable "zeile" 
26.
REM den Inhalt der Variable "suchen_nach" suchen 
27.
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen 
28.
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%! 
29.
 
30.
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben 
31.
IF [!zeile!] EQU [] (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%) 
32.
 
33.
GOTO :eof 
34.
 
35.
 
36.
:weiter 
37.
REM weitere Verarbeitung 
38.
 
39.
 
40.
ECHO Fertig^^!




Das Ergebis liefert dann leider in der ersten Zeile: "1=Hubert=01".


Was mache ich falsch?????

Wenn das nicht gehen sollte, wäre es vielleicht möglich, die Zeile 1 stumpf mit dem vorgegebenen Wert "Hubert=0" austzutauschen, ohne Vergleich und Schleife?


Wenn ich die Batch ein zweites oder dritttes mal laufen lasse, werden die Zeilen in der Ausgabedatei immer unten dran gehangen, so dass die Datei immer größer wird.

Kann man das auch ändern?



Wäre sehr nett, wenn mir hier jemand kurz weiterhelfen könnte!!


[Edit Biber] Codeformatierung. [/Edit]


Mitglied: bastla
LÖSUNG 18.02.2014, aktualisiert um 21:15 Uhr
Hallo weboadmix und willkommen im Forum!
wäre es vielleicht möglich, die Zeile 1 stumpf mit dem vorgegebenen Wert "Hubert=0" austzutauschen
Sollte sich so machen lassen:
01.
@echo off & setlocal 
02.
SET "quell_datei=C:\data.txt" 
03.
SET "ziel_datei=C:\data.txt" 
04.
 
05.
 >"%ziel_datei%" echo Hubert=0 
06.
>>"%ziel_datei%" more +1 "%quell_datei%"
Grüße
bastla
Bitte warten ..
Mitglied: weboadmix
18.02.2014 um 21:18 Uhr
Hallo bastla,

vielen Dank für die schnelle Antwort.

Habe es zwischenzeilich so hinbekommen:


@echo off

SETLOCAL enabledelayedexpansion

set In=C:\data.txt
set Out=C:\data_temp.txt
set Line=1
set NewText=Hubert=0

Type Nul >%Out%
for /f "tokens=1* delims=:" %%A in ('findstr /N "^" "%In%"') do if %%A==%Line% (>>%Out% echo/%NewText%) else (>>%Out% echo/%%B)

MOVE C:\data_temp.txt C:\data.txt


Da eine umbenennung der bereits existierenden Datei nicht möglich ist, habe ich mir mir dem Befehl MOVE geholfen.


Und, es funktioniert alles wie gewünscht.

Viele Grüße!
Bitte warten ..
Mitglied: feadin
21.02.2014 um 16:49 Uhr
Hallo zusammen!

Habe hier ein ähnliches Problem:

Ich versuche, per batch-Datei HTML-Tags aus einer .txt-Datei zu entfernen, habe dazu folgendes Skript kopiert und angepasst.
Das soll später, wenn es grundsätzlich funktioniert um viele weitere Tags erweitert werden, bislang scheint es aber so, als ob das Skript gar nichts tut
und ich habe keine Ahnung wo der Fehler liegen könnte.

hier der Code:
01.
@echo off & setlocal enabledelayedexpansion  
02.
 
03.
set "Datei=D:\Reportbereinigung\Test-Kopie.txt"   
04.
set "t=Temp.tmp"   
05.
 
06.
set "Ersetzen=" 
07.
set "Tag001=<HTML>"  
08.
set "Tag002=<TR><TD width="175">&nbsp;</TD><TD class="value">"  
09.
  
10.
if exist "%t%" del "%t%"  
11.
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine  
12.
move "%t%" "%Datei%"  
13.
goto :WEITER_IM_BATCH  
14.
 
15.
:ProcessLine  
16.
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"  
17.
if not defined L >>"%t%" echo\& goto :eof  
18.
 
19.
set WriteLine1=!L:%Tag001%=%Ersetzen%!  
20.
set WriteLine2=!WriteLine1:%Tag002%=%Ersetzen%!  
21.
 
22.
>>"%t%" echo !WriteLine2!  
23.
goto :eof  
24.
 
25.
:WEITER_IM_BATCH 
Wäre echt dankbar, wenn mir jemand weiterhelfen könnte ;)
Bitte warten ..
Mitglied: bastla
21.02.2014, aktualisiert um 22:38 Uhr
Hallo feadin und willkommen im Forum!

Die Ähnlichkeit Deiner Problemstellung hält sich zwar in Grenzen, aber anyhow: Mit Batch würde ich mir das (wegen der Anführungs- und Sonderzeichen) aber eher nicht antun wollen, sondern eher zu VBS greifen - das könnte dann etwa so gehen:
01.
Datei = "D:\Reportbereinigung\Test-Kopie.txt" 
02.
 
03.
Suchen = Array( _ 
04.
    "<HTML>", _ 
05.
    "<TR><TD width=""175"">&nbsp;</TD><TD class=""value"">" _ 
06.
07.
 
08.
Ersetzen = Array( _ 
09.
    "", _ 
10.
    "" _ 
11.
12.
 
13.
If UBound(Suchen) > UBound(Ersetzen) Then 
14.
    WScript.Echo "Zu wenig Ersetzungsbegriffe!" 
15.
    WScript.Quit 
16.
End If 
17.
 
18.
Set fso = CreateObject("Scripting.FileSystemObject") 
19.
 
20.
T = fso.OpenTextFile(Datei).ReadAll 
21.
For i = 0 To UBound(Suchen) 
22.
    T = Replace(T, Suchen(i), Ersetzen(i)) 
23.
Next 
24.
 
25.
fso.CreateTextFile(Datei).Write T
Die Ersetzung wird hier "in der Datei" vorgenommen, es wird also die Datei unmittelbar (ohne Temporärdatei / Sicherungskopie) verändert.

Kurz zur Erklärung der Zeilen 3 - 6 bzw 8 - 11: Du kannst mehrere Paare von Such- und Ersetzungsbegriffen angeben, wobei außer beim jeweils letzten Eintrag immer ein Komma und ein Unterstrich am Ende der Zeile stehen müssen (Zeilen 4 und 9); nach den letzten Werten (Zeilen 5 und 10) ist kein Komma zu setzen.

Für jeden Suchbegriff muss auch ein Ersetzungsbegriff existieren (auch, wenn wie hier, jeweils durch "Nichts" ersetzt werden soll).

Anführungszeichen, die Bestandteil des Such- oder Ersetzungsbegriffes sind, müssen verdoppelt werden.

Grüße
bastla
Bitte warten ..
Mitglied: feadin
25.02.2014 um 11:10 Uhr
Vielen Dank für die schnelle und kompetente Hilfe

Das funktioniert prima und mich einen großen Schritt weiter gebracht.
Und es hat mich dazu gebracht, mich ein bisschen mit VBS auseinanderzusetzen,
bislang hatte ich damit keine Berührung^^


Nochmal Danke und viele Grüße

Feadin
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Textdatei verschlüsseln per Batch
gelöst Frage von Nick2212Batch & Shell22 Kommentare

Hi Leute ich wollte einmal fragen ob es eine Möglichkeit gibt, den Inhalt einer Textdatei per Batch zu verschlüsseln ...

Batch & Shell
Batch Textdatei Spaltenweise auslesen
Frage von PinkFLuffyUnicornBatch & Shell7 Kommentare

hi, ist es irgendwie möglich anstatt eine Textdatei via Batch Spaltenweise auszulesen und nicht zeilenweise wie das normal ganz ...

Batch & Shell
Textdateien vergleichen BATCH
gelöst Frage von FeudelFredBatch & Shell2 Kommentare

Moin Moin, ich bin komplett neu im Forum und habe auch keine sonderlich großen Erfahrungen mit Foren. Habe eine ...

Batch & Shell
Doppelpunktgetrennte Textdatei einlesen Batch
gelöst Frage von Fabian-HaasBatch & Shell3 Kommentare

Hallo, ich habe eine Textdatei auf einem Server, die sieht so aus und möchte aus einer bestimmten Zeile das ...

Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 51 MinutenMac OS X

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser ereichbar sind. Leider fehlt ...

Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 7 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 9 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 12 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

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

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1017 Kommentare

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