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

TXT einlesen bearbeiten und in eine scr speichern

Frage Entwicklung Batch & Shell

Mitglied: Spidi-25

Spidi-25 (Level 1) - Jetzt verbinden

29.11.2010 um 21:33 Uhr, 3888 Aufrufe, 24 Kommentare

Hallo alle zusammen,

ich bräuchte wieder mal eure Hilfe.

Hier mein Problem

ich versuche folgenden txt Dateiinhalt einzulesen und in *.Scr (Script Datei) abzuspeichern

hier der txt inhalt

01.
testzeile 1 
02.
testzeile 2 
03.
testzeile 3 
04.
testzeile 4 
05.
testzeile 5 
06.
testzeile 6 
07.
 
08.
 
09.
testzeile 9 
10.
testzeile 10 
11.
testzeile 11 
12.
 
13.
testzeile 13
hier mein Code

01.
@echo off & setlocal enableDelayedExpansion 
02.
 
03.
for /f "tokens=1,* delims=:" %%i in ('findstr /n   $ V:\cmd\Test.txt') do (  
04.
        for /L %%a in (3,1,80) do if %%i==%%a set neu=%%~j & echo !neu:Testzeile 6=Variable_Zeile!>>S1.scr 
05.
)
und folgendes wird in die *.Scr Datei geschrieben

01.
testzeile 3  
02.
testzeile 4  
03.
testzeile 5  
04.
Variable_Zeile  
05.
ECHO ist ausgeschaltet (OFF). 
06.
ECHO ist ausgeschaltet (OFF). 
07.
testzeile 9  
08.
testzeile 10  
09.
testzeile 11  
10.
ECHO ist ausgeschaltet (OFF).
es passt so weit alle, bis auf die "ECHO ist ausgeschaltet (OFF).", hier sollten die Zeile leer wie bei der TXT sein!

THX

Grüße
Spidi-25
Mitglied: Biber
29.11.2010 um 22:14 Uhr
Moin Spidi-25,

wenn das, was der Echo-Befehl ausgeben soll, auch "leer" oder "nichts" sein kann, dann geht das mit einem Punkt/einem Schrägstrich und ca 10 anderen Zeichen DIREKT nach dem Wort ECHO.

Beispiele
ECHO.
ECHO\
ECHO,
ECHO;
echo]

....
Etc.
GGF vorher am CMD-Prompt verdeutlichen. Keins der genannten Zeichen wird angezeigt, wenn der Rest NICHT leer ist.

Beispiel
>echo[hallo 
hallo
Grüße
Biber
Bitte warten ..
Mitglied: Friemler
29.11.2010 um 22:16 Uhr
Hallo Spidi-25,

versuch's mal mit
01.
@echo off & setlocal enableDelayedExpansion 
02.
 
03.
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ Test.txt') do ( 
04.
  for /L %%a in (3,1,80) do if %%i==%%a set neu=%%~j & echo=!neu:Testzeile 6=Variable_Zeile!>>S1.scr 
05.
06.
exit /b
Statt nach dem ECHO-Befehl ein Leerzeichen zu schreiben, nimm ein Gleichheitszeichen. ECHO= erzeugt einen Zeilenumbruch (genauso wie z.B. ECHO. oder ECHO\ oder ECHO:, die hier vermutlich wegen der verzögerten Variablenerweiterung nicht funktionieren). ECHO( würde auch gehen.

Gruß
Friemler
Bitte warten ..
Mitglied: Spidi-25
29.11.2010 um 23:02 Uhr
Hallo Biber, Hallo Friemler

Danke für die Tipps


das mit dem . und mit dem \ habe ich schon probiert gehabt, dann hatte ich bei jeder Zeile am Anfang ein Leerzeichen das soll nicht sein.

Mit dem ; , und = sind die echos weg und die Leerzeichen am Anfang jeder Zeile sind auch weg. Aber die Zeile 05,06 und 10 enthalten ein Leerzeichen, das soll aber nur ein Zeilenumbruch sein ohne einen (Leerzeichen) String zu enthalten!

gibt es noch Möglichkeiten?

Gruß
Spidi-25
Bitte warten ..
Mitglied: bastla
29.11.2010 um 23:22 Uhr
Hallo Spidi-25!

Etwa so:
01.
@echo off & setlocal enableDelayedExpansion 
02.
for /f "tokens=1* delims=:" %%i in ('findstr /n $ Test.txt') do ( 
03.
    for /L %%a in (3,1,80) do if %%i==%%a ( 
04.
        set "neu=%%~j" 
05.
        if defined neu (echo !neu:Testzeile 6=Variable_Zeile!) else (echo\) 
06.
07.
)>>S1.scr
Grüße
bastla
Bitte warten ..
Mitglied: Spidi-25
29.11.2010 um 23:35 Uhr
Hallo Bastla

danke für den Code, aber damit bekomme ich die gleiche Ausgabe wie oben mit den ECHO ist ausgeschaltet (OFF). in den Zeilen 05,06 und 10


Gruß
Spidi-25
Bitte warten ..
Mitglied: bastla
29.11.2010 um 23:40 Uhr
Hallo Spidi-25!

Sorry - kann ich nicht nachvollziehen; mit den von Dir geposteten Testdaten und meinem Batchansatz sieht das Ergebnis bei mir so aus:
01.
testzeile 3 
02.
testzeile 4 
03.
testzeile 5 
04.
Variable_Zeile 
05.
 
06.
 
07.
testzeile 9 
08.
testzeile 10 
09.
testzeile 11 
10.
 
Es würde sich übrigens als (Batch-) Zeile 2 noch
del S1.scr 2>nul
anbieten - und mit
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" Test.txt') do (
wird auch die letzte Zeile (die nicht mit einer Zeilenschaltung endet) erfasst.

Grüße
bastla
Bitte warten ..
Mitglied: Spidi-25
30.11.2010 um 07:07 Uhr
Hallo Bastla,

Das hätte ich von Anfang an erwähnen müssen, mein Fehler.

dein code funktioniert so weit gut, wen die txt Datei in der Zeile 7,8 und 12 kein Lehrzeichen enthalten, sie enthält aber teilweise. Könnte man das so machen, egal ob die txt Lehrzeichen in den Zeilen z.B. 7,8 und 12 oder nur Zeilenumbruche hat nach der Ausgabe in .scr die Zeilen 5,6 und 10 keine Lehrzeichen mehr enthält!


Grüße
Spidi-25
Bitte warten ..
Mitglied: bastla
30.11.2010 um 09:09 Uhr
Hallo Spidi-25!

Eine Möglichkeit:
01.
@echo off & setlocal enableDelayedExpansion 
02.
del S1.scr 2>nul 
03.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" Test.txt') do ( 
04.
    for /L %%a in (3,1,80) do if %%i==%%a ( 
05.
        set "neu=%%~j" 
06.
        if not defined neu ( 
07.
            echo\ 
08.
        ) else ( 
09.
            set "Leer=true" 
10.
            for /f %%t in ("!neu!") do set "Leer=" 
11.
            if defined Leer (echo\) else (echo !neu:Testzeile 6=Variable_Zeile!) 
12.
13.
14.
)>>S1.scr
Grüße
bastla
Bitte warten ..
Mitglied: Spidi-25
30.11.2010 um 12:39 Uhr
Hallo Bastla

Fast perfekt nur noch folgendes Problem

angenommen Inhalt meiner TXT Zeile 7 enthält ein Lehrzeichen und Zeile 8 kein Lehrzeichen, nach der Ausgabe in .scr habe ich in Zeile 5 Kein Lehrzeichen und in der Zeile 6 ein Lehrzeichen, sollten aber in 5 und 6 Keine Lehrzeichen enthalten sein.

Bekommen wir das noch irgend wie hin?

P.S. was bedeutet
01.
set "Leer=true"  (true)


Gruß
Spidi-25
Bitte warten ..
Mitglied: bastla
30.11.2010 um 13:51 Uhr
Hallo Spidi-25!

Auch das sieht bei mit anders aus: Für
01.
testzeile 1 
02.
testzeile 2 
03.
testzeile 3 
04.
testzeile 4 
05.
testzeile 5 
06.
testzeile 6 
07.
  
08.
 
09.
testzeile 9 
10.
testzeile 10 
11.
testzeile 11 
12.
 
13.
testzeile 13
erhalte ich mit der letzten Batch-Version als Ergebnis
01.
testzeile 3 
02.
testzeile 4 
03.
testzeile 5 
04.
Variable_Zeile 
05.
 
06.
 
07.
testzeile 9 
08.
testzeile 10 
09.
testzeile 11 
10.
 
11.
testzeile 13 
12.
 
Mit
set "Leer=true"
weise ich der Variablen %Leer% (bzw hier eigentlich !Leer!) einen beliebigen Wert zu (muss also nicht "True" sein), um diese Variable als "Schalter" zu verwenden. Wenn die Zeile nicht leer ist (und daher der "do"-Teil der Schleife in Zeile 10 ausgeführt wird), wird dieser Wert gelöscht, woraufhin die Variable tatsächlich "leer" ist (also keinen Inhalt mehr hat), was sich per "if defined" abfragen lässt ...

Grüße
bastla

P.S.: Falls es Dich nicht allzuviel Überwindung kostet : Ich würde die Schreibweise "Leerzeichen" bevorzugen ...
Bitte warten ..
Mitglied: Biber
30.11.2010 um 15:14 Uhr
[OT]
Moin bastla,

Zitat von bastla:
P.S.: Falls es Dich nicht allzuviel Überwindung kostet : Ich würde die Schreibweise "Leerzeichen" bevorzugen ...

Hab ich schon gestern mühsam zurückgehalten, die Anmerkung "Das is' ja wieder ein Beitrag wie aus dem Leerbuch..."

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: Spidi-25
30.11.2010 um 15:29 Uhr
Perfekt Danke Bastla

Habe irgend was beim Kopieren vom Code ausgelassen, Habe es erneut kopiert und sieh da es geht! Vielen Dank

Gruß
Spidi-25
Bitte warten ..
Mitglied: jeb-the-batcher
30.11.2010 um 23:12 Uhr
Hallo zusammen,

noch ein paar Anmerkungen zum "sicheren" echo .

Bei dem echo= und echo: Varianten klappen zwar die Leerzeilen, dafür ist echo= aber anfällig für /?, es zeigt die echo-Hilfe an, statt /?
Ein echo\ oder echo: ist anfällig gegen \..\%~0 es startet die eigene Batchdatei.
echo., echo] oder echo[ klappt nicht sobald eine Datei Namens echo[, echo] oder echo. existiert.

echo( sollte immer funktionieren (ich hab vielleicht aber nur noch nicht den Fall gefunden, bei dem es fehlschlägt)

Hoffe es hilft
jeb
Bitte warten ..
Mitglied: Spidi-25
30.11.2010 um 23:25 Uhr
Hallo Leute

wie bekomme ich eine weitere Variable Bearbeitung z.B. in txt für testzeile 10 in der .scr als Ausgabe "Variable_Zeile2", habe mich mit else bis jetzt noch nicht beschäftigt!

Gruß
Spidi-25
Bitte warten ..
Mitglied: bastla
01.12.2010 um 16:20 Uhr
Hallo Spidi-25!

Leider verstehe ich nicht genau, was Du erreichen willst - falls es eine Ersetzung für "Testzeile 10" nach dem Vorbild von "Testzeile 6" sein sollte, dann etwa so:
01.
if defined Leer ( 
02.
    echo\ 
03.
) else ( 
04.
    set "neu=!neu:Testzeile 6=Variable_Zeile!" 
05.
    set "neu=!neu:Testzeile 10=Variable_Zeile2!" 
06.
    echo !neu! 
07.
)
als Ersatz der Zeile 11 ...

Grüße
bastla
Bitte warten ..
Mitglied: Spidi-25
01.12.2010 um 16:47 Uhr
Danke Bastla, genau das habe ich gesucht Perfekt!!!!!!!!

Gruß
Spidi-25
Bitte warten ..
Mitglied: pieh-ejdsch
19.12.2010 um 17:05 Uhr
moin,

nach zeile 05. set "neu=%%~j"
geht auch
01.
		for /f "tokens=*" %%k in ("%%j") do if "%%k" == "" (@echo.) else ( 
02.
			set "neu=!neu:Testzeile 6=Variable_Zeile!" 
03.
			set "neu=!neu:Testzeile 10=Variable_Zeile2!" 
04.
			echo !neu! 
05.
)	)	)>>S1.scr
Gruß Phil
Bitte warten ..
Mitglied: Spidi-25
19.12.2010 um 20:08 Uhr
Danke Phil, für den Tipp

beim einlesen von folgendem txt Inhalt


01.
testzeile 1 
02.
testzeile 2 
03.
testzeile 3 
04.
testzeile 4 
05.
testzeile 5 
06.
testzeile 6 
07.
  
08.
 
09.
testzeile 9 
10.
testzeile 10 
11.
testzeile 11 
12.
 
13.
testzeile 13 
wir mit deinem Code die Zeile 7 verschlungen

Grüße
Spidi-25
Bitte warten ..
Mitglied: bastla
19.12.2010 um 20:53 Uhr
@PH
Sollte eigentlich nicht funktionieren, da bei einer Leerzeile der "do"-Teil gar nicht ausgeführt wird (deswegen ja auch die Workarounds mit "findstr /n" etc) ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
19.12.2010 um 21:30 Uhr
upps, hab ich garnet bedacht. Ich hatte keine komplette Lerzeile im Test in der Datei - nur Tab und Leerzeichen.

da muss nur noch ein Leerzeichen in die erste For-Schleife vor dem %%j

		for /f "tokens=*" %%k in (" %%j") do if "%%k" == "" (@echo.) else (
dann sollte es klappen

Gruß Phil
Bitte warten ..
Mitglied: bastla
19.12.2010 um 21:38 Uhr
... aber nur, wenn Du dann auch auf das Leerzeichen abfragst
		for /f "tokens=*" %%k in (" %%j") do if "%%k" == " " (@echo.) else (
Grüße
bastla

[Edit] Kommentar hinfällig - Leerzeichen kann natürlich (wegen der Verwendung der Default-Delimiter = Leerzeichen und TAB) nicht mehr da sein [/Edit]
Bitte warten ..
Mitglied: pieh-ejdsch
19.12.2010 um 21:52 Uhr
... nö
gibt doch keins mehr in der ausgabe.
sonst wäre doch Zeile 8 und Zeile 12 auch nicht gekommen

hier ist was für die CMD-Line
01.
for /f "tokens=*" %i in ("") do echo %i 
02.
for /f "tokens=*" %i in (" ") do echo %i
es kommt also drauf an ob die Forschleife im Satz etwas zu verwerten hat. - dann wird auch nach dem DO etwas ausgeführt
eine Leere Zeile ist eben nichts zum Verwerten - also nothing to DO

Du bist doch aber der BatchKing - schau mal in die NumberMe
Gruß Phil
Bitte warten ..
Mitglied: Spidi-25
19.12.2010 um 21:53 Uhr
hallo bastla

funktioniert aber genau richtig ohne Leerzeichen wie von Phil gepostet

01.
for /f "tokens=*" %%k in (" %%j") do if "%%k" == "" (@echo.) else (
Grüße
Spidi-25
Bitte warten ..
Mitglied: bastla
19.12.2010 um 22:00 Uhr
Hallo Spidi-25 und PH!

Stimmt: das Leerzeichen ist kontraproduktiv - sorry, dass ich das Testen Euch überlassen habe ...

(Die Fehleinschätzung kam übrigens daher, dass ich in derartigen Fällen eigentlich immer anstelle von "tokens=*" die Schreibweise "delims=" verwende.)

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...