Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Mit Batch-Datei eine Datei lesen, Zeilen ändern und als neue Datei schreiben

Frage Entwicklung Batch & Shell

Mitglied: GeoSem

GeoSem (Level 1) - Jetzt verbinden

02.10.2014, aktualisiert 17:16 Uhr, 1361 Aufrufe, 20 Kommentare

Hallo

Ich versuche nun schon seit einiger Zeit das "kleine" Script (unter Windows 8) zum laufen zu bringen - erfolglos.
Mit und ohne Hochkommas (braucht es diese beim SET?), mit ! und %, etc. alles hat nichts gebracht.
Dabei ist es sicher einfach wenn man weiss wie

Ich habe eine Datei (IN-DATEI) die wie folgt aussieht:
GC5CM98,2014-09-27T17:23Z,Found it,"111"
GC4Q9TG,2014-09-12T11:51Z,Found it,"112"
etc. weiter Zeilen

Nun möchte ich damit eine Neue Datei erstellen, die so aussieht:
GC5CM98,2014-09-27T17:23Z,Found it,"222"
GC4Q9TG,2014-09-12T11:51Z,Found it,"333"
etc. weiter Zeilen

Da habe ich z.B. mit folgenden Batch versucht:

......................................................................................................
SET s1=111
SET e1=222

SET s2=112
SET e2=333

FOR /F "delims=" %%a IN (IN-DATEI) DO (
SET zeile=%%a
SET zeile="zeile:%s1%=%e1%"
SET zeile="zeile:%s2%=%e2%"
%zeile%>>OUT-DATEI.txt
)
ECHO UMSTELLUNG BEENDET
.......................................................................................................

Wo liegt der Haken, dass es nichts in die OUT-Datei schreibt. Ich habe an einigen Orten ein ECHO eingebaut, in %zeile% scheint nie was zu sein.

Viele Dank für Eure Hilfe und Grüsse aus dem Süden, geosem
Mitglied: bastla
LÖSUNG 02.10.2014, aktualisiert um 17:16 Uhr
Hallo GeoSem und willkommen im Forum!

Mit ein paar kleinen Anpassungen (Stichwort "delayedExpansion") sollte Dein Ansatz funktionieren:
01.
@echo off & setlocal enabledelayedexpansion 
02.
SET "s1=111" 
03.
SET "e1=222" 
04.
 
05.
SET "s2=112" 
06.
SET "e2=333" 
07.
 
08.
FOR /F "delims=" %%a IN (IN-DATEI) DO ( 
09.
    SET "zeile=%%a" 
10.
    SET "zeile=!zeile:%s1%=%e1%!" 
11.
    SET "zeile=!zeile:%s2%=%e2%!" 
12.
    echo !zeile!>>OUT-DATEI.txt 
13.
14.
ECHO UMSTELLUNG BEENDET
Die Anführungszeichen bei den SET-Anweisungen sind nicht unbedingt nötig, sorgen aber für eine eindeutige Textabgrenzung (sodass zB ein zusätzliches Leerzeichen nach "111" nicht mit in die Variable %s1% übernommen wird) ...

Grüße
bastla

P.S.: Wie Du Code hier im Forum formatieren kannst, steht hier ...
Bitte warten ..
Mitglied: GeoSem
02.10.2014 um 17:22 Uhr
Vielen Dank bastla!

Ich habe die Zeilen übernommen ... das Batch läuft ab aber ich bekomme einfach keine Daten in das OUT-DATEI.txt
@echo off - das ist schon richtig mit "Affen###"?
Bitte warten ..
Mitglied: bastla
02.10.2014 um 17:33 Uhr
Hallo GeoSem!

Das "echo off" mit oder ohne "@" hat keine Auswierkung auf die Ausgabe in die Datei - allerdings kannst Du den Ablauf ohne "echo off" (oder stattdessen mit "echo on") besser nachvollziehen - vor allem, wenn Du am Ende noch eine Zeile
pause
hinzufügst oder den Batch aus einem CMD-Fenster startest.

Heißt Deine Ausgangsdatei tatsächlich "IN-DATEI" ohne ".txt" dahinter, und liegt sie im gleichen Ordner wie die Batch-Datei? Im Zweifelsfall kannst Du die Zeile 8 auf
FOR /F "usebackq delims=" %%a IN ("D:\Dein Ordner\IN-DATEI") DO (
abändern und den kompletten Dateipfad zwischen den Anführungszeichen angeben ...

Grüße
bastla
Bitte warten ..
Mitglied: GeoSem
02.10.2014 um 17:49 Uhr
Schön dass Du so Geduld hast mit mir ... nicht selbstverständlich und ich weiss das zu schätzen!

Die Dateien heissen natürlich nicht wie angeben ... z.B. logs.txt statt OUT-DATEI.txt. Wenn ich die Input-Datei umbenenne kommt eine Fehlermeldung - daran sollte es auch nicht liegen.
Alle Daten und das umstell.bat liegt im gleichen Verzeichnis (\temp) und ich lasse das bat in der "Eingabeaufforderung" laufen.
Ich habe schon alles mit echo und pause versucht ... die Output-Datei wird einfach nicht erstellt.
Ich habe es auch schon auf einem andern PC versucht ... kann es vielleicht am Input-File liegen?
Bitte warten ..
Mitglied: bastla
02.10.2014 um 23:59 Uhr
Hallo GeoSem!

Mit Deinen Testdaten und "echo on" in Zeile 1 sieht das bei mir in der CMD-Shell so aus:
01.
D:>Ersetzen.cmd 
02.
 
03.
D:>SET "s1=111" 
04.
 
05.
D:>SET "e1=222" 
06.
 
07.
D:>SET "s2=112" 
08.
 
09.
D:>SET "e2=333" 
10.
 
11.
D:>FOR /F "delims=" %a IN (IN-DATEI) DO ( 
12.
SET "zeile=%a" 
13.
 SET "zeile=!zeile:111=222!" 
14.
 SET "zeile=!zeile:112=333!" 
15.
 echo !zeile! 1>>OUT-DATEI.txt 
16.
17.
 
18.
D:>( 
19.
SET "zeile=GC5CM98,2014-09-27T17:23Z,Found it,"111"" 
20.
 SET "zeile=!zeile:111=222!" 
21.
 SET "zeile=!zeile:112=333!" 
22.
 echo !zeile! 1>>OUT-DATEI.txt 
23.
24.
 
25.
D:>( 
26.
SET "zeile=GC4Q9TG,2014-09-12T11:51Z,Found it,"112"" 
27.
 SET "zeile=!zeile:111=222!" 
28.
 SET "zeile=!zeile:112=333!" 
29.
 echo !zeile! 1>>OUT-DATEI.txt 
30.
31.
 
32.
D:>ECHO UMSTELLUNG BEENDET 
33.
UMSTELLUNG BEENDET
Danach sieht der Inhalt der "OUT-Datei.txt" so aus:
01.
GC5CM98,2014-09-27T17:23Z,Found it,"222" 
02.
GC4Q9TG,2014-09-12T11:51Z,Found it,"333"
Vergleiche das mit Deinem Ablauf ...

Grüße
bastla
Bitte warten ..
Mitglied: GeoSem
03.10.2014, aktualisiert um 13:19 Uhr
So wäre es er perfekt ... nur bei mir werden die Zeilen 18-30 nicht angezeigt - aber warum?, denn deshalb wahrscheinlich der fehlende Output.
Leider habe ich nirgends gefunden wie man Bilder einbindet (erst jetzt gesehen; wäre im Ursprungsbeitrag möglich gewesen), deshalb so: http://www.xxx.ch/umstell.jpg (geändert, funktioniert nicht mehr)
Bitte warten ..
Mitglied: rubberman
LÖSUNG 03.10.2014, aktualisiert um 13:39 Uhr
Hallo GeoSem,

sieht so aus als könnten die Daten in geocache_visits.txt nicht gelesen werden. Eine mögliche Ursache ist, dass die Zeichencodierung dort nicht ASCII oder ANSI ist.
Teste mal mit
FOR /F "delims=" %a IN ('TYPE "geocache_visits.txt"') DO (
Grüße
rubberman
Bitte warten ..
Mitglied: GeoSem
03.10.2014 um 13:10 Uhr
So nun ist die Nuss geknackt ...
Ich habe mal die Input-Datei angeschaut ... da war die Codierung "Unicode". Nun habe ich diese als UTF-8 gespeichert und siehe da es läuft )))

Vielen Dank noch mal an bastla!!!!!!!
Bitte warten ..
Mitglied: GeoSem
03.10.2014, aktualisiert um 13:14 Uhr
Danke rubberman
Deine Antwort ein bisschen früher und ich hätte Dank deinem Tipp viel Zeit zur Entspannung gehabt
Weisst Du vielleicht wo ich angeben kann dass es eine Unicode Codierung ist?
Bitte warten ..
Mitglied: rubberman
03.10.2014 um 13:15 Uhr
Haha, sorry aber das Thema stand die ganze Zeit schon auf gelöst und ich bin mehr zufällig drüber gestolpert, dass es noch offene Wunden gibt

Grüße
rubberman
Bitte warten ..
Mitglied: GeoSem
03.10.2014, aktualisiert um 13:21 Uhr
Ja, ich habe aus Versehen "Zur Lösung beigetragen" angeklickt ... das ist ein bisschen ein irreführender Text ...
Bitte warten ..
Mitglied: rubberman
03.10.2014 um 13:25 Uhr
Weisst Du vielleicht wo ich angeben kann dass es eine Unicode Codierung ist?
Erklär mal was du damit meinst. Willst du die Ausgabe auch wieder in UNICODE oder wie soll ich das verstehen?

Grüße
rubberman
Bitte warten ..
Mitglied: GeoSem
03.10.2014 um 13:29 Uhr
Ob ich die Datei dann weiter verarbeiten kann weiss ich noch nicht ... aber ich möchte vor allem einmal die Original-Datei verwenden können ohne zusätzlich von Unicode auf UTF-8 umzustellen.
Bitte warten ..
Mitglied: rubberman
03.10.2014 um 13:33 Uhr
Hast du versucht mit TYPE zu arbeiten, wie ich es dir oben vorgeturnt habe?
Bitte warten ..
Mitglied: GeoSem
03.10.2014 um 13:37 Uhr
AHHHHH, SUPER nun geht's auch mit der Original-Datei
Auch Dir vielen Dank rubberman!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bitte warten ..
Mitglied: rubberman
03.10.2014 um 13:46 Uhr
Kein Problem.

Eine UNICODE Ausgabedatei bekommst du übrigens etwa so:
01.
@echo off &setlocal 
02.
SET "s1=111" 
03.
SET "e1=222" 
04.
 
05.
SET "s2=112" 
06.
SET "e2=333" 
07.
FOR /F "TOKENS=2 DELIMS=:" %%i IN ('CHCP') DO SET /A oemcp=%%~ni 
08.
>NUL CHCP 1252 
09.
<NUL >"OUT-DATEI.txt" SET /P "=ÿþ" 
10.
FOR /F "delims=" %%a IN ('TYPE "geocache_visits.txt"') DO ( 
11.
    SET "zeile=%%a" 
12.
    SETLOCAL EnableDelayedExpansion 
13.
    SET "zeile=!zeile:%s1%=%e1%!" 
14.
    SET "zeile=!zeile:%s2%=%e2%!" 
15.
    CMD /U /V:ON /C ">>"OUT-DATEI.txt" ECHO !zeile!" 
16.
    ENDLOCAL 
17.
18.
>NUL CHCP %oemcp% 
19.
ECHO UMSTELLUNG BEENDET 
20.
PAUSE
Grüße
rubberman
Bitte warten ..
Mitglied: GeoSem
03.10.2014, aktualisiert um 13:58 Uhr
So, nun habe ich ein "neues" Problem

Wie kann ich SET "e1=mit dem Text unten sinnvoll eingeben ... so gibt es einen Syntaxfehler vermutlich wegen den geschützten Zeichen.
01.
SET "e1=[font=Tahoma][size=3] 
02.
Wir vergeben folgende Sterne - We avard the following stars (3=Super, 2=Gut/good 1=Normal):<br /> 
03.
[red]&#10032;[/red][pink]&#10032;&#10032;[/pink] (2)&nbsp; 
04.
Wegführung und Standort - Routing and location<br /> 
05.
[red]&#10032;[/red][pink]&#10032;&#10032;[/pink] (2)&nbsp; 
06.
Behälter: Art und Originalität - Container: type and originality<br /> 
07.
[red]&#10032;[/red][pink]&#10032;&#10032;[/pink] (2)&nbsp; 
08.
Versteck und Beschreibung - Hidout and description<br /> 
09.
<br />"
Bitte warten ..
Mitglied: GeoSem
03.10.2014 um 14:04 Uhr
OK, es hat funktioniert wenn ich alles auf eine Zeile schreibe ... ein bisschen unübersichtlich da die Zeilenlänge dann über 500 Charakter lang ist.
Gibt es eine andere Lösung?
Bitte warten ..
Mitglied: rubberman
LÖSUNG 03.10.2014, aktualisiert um 14:12 Uhr
Huch

Mehrzeilige Ersetzungen mit allen möglichen Sonderzeichen in einer Unicode Datei? Hättest du das mal von Anfang an geschrieben, hätten wir uns die Arbeit ersparen können so etwas in Batch umsetzen zu wollen. An der Stelle ist leider Ende mit Batch und wie das mit einer anderen Sprache umsetzbar wäre kommt darauf an wie deine Originaldatei tatsächlich aussieht (z.B. welche Art von Zeilenumbruch vorliegt etc.).

Grüße
rubberman

EDIT: Ah, also doch nicht mehrzeilig?

Nee, lass das mal in einer Zeile. Alles andere wird noch komplizierter.
Bitte warten ..
Mitglied: GeoSem
03.10.2014 um 14:11 Uhr
OK, es geht ja wenn ich alles auf eine Zeile schreibe
Damit kann ich gut leben ... habe dann 27 Varianten und muss halt einfach 27x den Text leicht ändern
Danke nochmals und Grüsse aus dem Süden, Walter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...