larz
Goto Top

Werte aus einer Datei in eine andere schreiben

Lese Inhalt ab Zeile 4, schreibe in neue Datei

Hallo zusammen,

ich habe eine Datei "sqlvalue.txt" mit folgendem Inhalt:

Ausfhrungszeit: 0,016 Sekunden
Feld_Name
Inhalt des Feldes mit Leerzeichen

(Erste 1 Zeilen)

Aus dieser Datei möchte ich die vierte Zeile (den Inhalt) auslesen und in eine andere Datei "sqlvalue3.txt" schreiben.
Das wollte ich so machen, dass ich die ersten 3 Zeilen überspringe und ab da alle Zeilen in eine neue Datei schreibe. Dafür habe ich folgenden Befehl:
for /F "delims=\ tokens=* skip=3"  %%a in ("%temp%\sqlvalue.txt") DO echo %%a>>%temp%\sqlvalueline3.txt  

Jedoch passiert nichts, wenn ich skip=3 im Befehl stehen habe. Ohne skip=3 schreibt er mir eine Datei, aber anstatt dem Inhalt der sqlvalue.txt schreibt er mir den Pfad zur Datei rein...
Bin jetzt ehrlich gesagt etwas überfragt, woran das liegen könnt.
Kann mir jemand kurz "Schützenhilfe" geben?!

Vielen Dank

Lars

Content-Key: 139453

Url: https://administrator.de/contentid/139453

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 30.03.2010 um 10:12:02 Uhr
Goto Top
Hallo Larz!

Je nachdem, ob Du alles ab Zeile 4 oder nur Zeile 4 schreiben möchtest, würden sich zB folgende Varianten anbieten:

Ab Zeile 4:
for /f "usebackq skip=3 delims=" %%a in ("%temp%\sqlvalue.txt") do >>"%temp%\sqlvalueline3.txt" echo %%a
(wobei Leerzeichen verloren gehen und die Zieldatei vorweg gelöscht werden müsste) oder einfacher:
more +3 "%temp%\sqlvalue.txt">"%temp%\sqlvalueline3.txt"
Nur Zeile 4:
@echo off & setlocal
set "Zeile="  
for /f "usebackq skip=3 delims=" %%a in ("%temp%\sqlvalue.txt") do if not defined Zeile set "Zeile=%%a"  
>"%temp%\sqlvalueline3.txt" echo\%Zeile%  
Noch ein Hinweis zu "usebackq": Dieses ist erforderlich, weil der Pfad zu "sqlvalue.txt" unter Anführungszeichen angegeben ist (was bei Verwendung von "Original"-%temp% - siehe unten - und Vermeidung von Leerzeichen im Dateinamen eigentlich nicht nötig wäre) ...

Grüße
bastla
Mitglied: KHP
KHP 30.03.2010 um 10:22:27 Uhr
Goto Top
Hallo Lars,

ich hab's jetzt nicht getestet, meine erste Idee war die Anführungszeichen wegzulassen. Allerdings kann es da Probleme geben, wenn die %temp% ein Leerzeichen enthält.
Das würde halt den Pfad-Output erklären.

Versuch's aber mal mit: tokens=4

Hier: http://www.robvanderwoude.com/ntfortokens.php
...ist eine ganz gute Erklärung für tokens+delims

Gruß, Tobias
Mitglied: bastla
bastla 30.03.2010 um 10:31:50 Uhr
Goto Top
@KHP
Allerdings kann es da Probleme geben, wenn die %temp% ein Leerzeichen enthält
Richtiger Einwand; soferne%temp% allerdings nicht durch einen eigenen Wert überschrieben wurde (also - zB unter XP - noch auf den Ordner "TEMP=C:\Dokumente und Einstellungen\Username\Lokale Einstellungen\Temp" verweist), wird automatisch (aus Kompatibilitätsgründen) die Kurzschreibweise "C:\DOKUME~1\USER\LOKALE~1\Temp" verwendet ...

Grüße
bastla
Mitglied: KHP
KHP 30.03.2010 um 10:43:32 Uhr
Goto Top
Danke bastla, wußte ich nicht...face-smile
Mitglied: bastla
bastla 30.03.2010 um 10:48:48 Uhr
Goto Top
@KHP
Gerne : -)

Übrigens: Für einen Überblick über die (meisten) der vom System zur Verfügung gestellten Variablen einfach an der Kommandozeile "set" eingeben ...

Grüße
bastla
Mitglied: Larz
Larz 30.03.2010 um 12:09:38 Uhr
Goto Top
Hallo Bastla,

super, danke, das usebackq war der springende Punkt - jetzt klappt's!
Auch dein Beispiel zum auslesen einer definierten, einzelnen Zeile ist prima - sowas hab ich schon öfters gesucht...

Gruß
Lars
Mitglied: Larz
Larz 30.03.2010 um 12:10:17 Uhr
Goto Top
Hallo Tobias,

danke für den Link! In einer ruhigen Minute muss ich mir den mal anschauen...

Gruß
Lars