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

Frage Entwicklung Batch & Shell

GELÖST

TXT einlesen bearbeiten und in eine scr speichern

Mitglied: Spidi-25

Spidi-25 (Level 1) - Jetzt verbinden

29.11.2010 um 21:33 Uhr, 3946 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 ..
Ähnliche Inhalte
Visual Studio
Optimierung VB Script - Exceldatei einlesen und bearbeiten und als CSV speichern
gelöst Frage von chef1568Visual Studio4 Kommentare

Hallo, ich habe ein VB Script erstellt, dass eine XLS einliest und alle Werte in einem Array speichert. Hintergrund: ...

VB for Applications
Excel mit VBS bearbeiten und Speichern Unter
gelöst Frage von YannoschVB for Applications8 Kommentare

Hallo zusammen, stehe vor einer schnell zu lösenden Aufgabe & bin ein wenig überfordert. In einem Ordner mit ca. ...

Batch & Shell
Inhalt einer .txt per Script bearbeiten
gelöst Frage von hanni007Batch & Shell2 Kommentare

Hallo Mitstreiter! Habe zu dieser Sache leider keinen alten Beitrag gefunden. Mein Problem ist daher folgendes: Ich habe eine ...

Batch & Shell
Powershell - zeilenweise Variablen aus TXT Datei einlesen
gelöst Frage von adm2015Batch & Shell12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte meinen alten Batch Code in Powershell verwenden und finde keinen passenden Lösungsansatz. ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 3 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 3 TagenSicherheit12 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall10 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS9 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...

Windows Netzwerk
Zugriff auf den Desktop Ordner eines anderen Rechners in der gleichen Domäne
gelöst Frage von JensNomaWindows Netzwerk6 Kommentare

Guten Abend, ich war neulich mit unserem Admin am Tisch gesessen. Er an seinem Notebook angemeldet mit dem Domänen-Admin, ...