Ausgabe for -f teilweise falsch? incl. Edit
WIN10 /CMD
Hallo @ all,
ich würde mal Eure Hilfe brauchen
Ich habe hier ein äusserst ungewöhnliches (für mich) Verhalten der FOR /F Schleife.
(bitte entschuldigt den langen Text, aber wie soll ichs sonst erklären?)
Vorgeschichte:
Ich lade mittels „wkhtmltopdf“ eine Webseite aus dem Internet (wget bringt nicht den gewünschten Erfolg) (zeitgesteuert).
Das Ausgabeformat von wkhtmltopdf ist ein .Pdf.
Dieses PDF wird mittels pdftotext in ein Txt umgewandelt (die HTML2txt-Tools bringen schlechteres Ergebniss)
Lt. Notepad++ ist das Txt im ANSI-code und mit der Notepade++ -Option „alle nicht druckbaren Zeichen anzeigen finde ich nicht ungewöhnliches.
Checke ich das Txt in einem Hexeditor (XVI32) ist ebenfalls alles unauffällig.
Zur Problembeschreibung 2 Beispielmusterzeilen aus dem Txt-File:
Auszug aus Notepad++:
Auszug aus Hexeditor:
Jage ich nun das txt durch einen for /F-loop:
erhalte ich folgenden Output:
Die ersten 2 Zeilen:
Love You for-Life 10:39-PM--
Three Plus - ---
Eigentlich würde ich erwarten:
Love You for Life 10:39 PM--
Three Plus------
Wo liegt der Fehler im Script?
A. Daß in der ersten Zeile die Ausgabe
Love You for-Life 10:39-PM-- mit dem falschen „-„ zw. "for Life" und zw. "10:39 und PM"
und
B. In der zweiten Zeile Lücken zwischen den „Strichen“ sind
- --- ist statt ------?
Alle Zeilen im Txt-File sind ordnungsgemäss mit CR und LF abgeschlossen.
Diese Ungereimtheiten ziehen sich über die ganze „Muster.txt“ hin.
Nachdem ich die „Muster.txt“ weiter bearbeiten muss stören diese Ungereimtheiten gewaltig
Die "Striche" in den Zeilen sind doch die "leeren/nicht vorhanden" %%Variablen oder?
Wer weis mir da Rat?
Mit besten Grüßen
Heinze
----------------------------EDIT------------------
Nach einmal drüber schlafen habe ich folgende Änderungen in der Syntax der FOR /-Schleife vorgenommen:
Ich lasse also somit den Befehlsintero. die %%variablen in eiger Regie erstellen.
Die Ausgabe in das Muster.txt hat sich damit (warum überhaupts) generell verändert:
Love You for Life 10:39 PM %k-%l %m-%n-%o-%p
Three Plus %k-%l %m-%n-%o-%p
Auch diese Ausgabe ist irgendwie nicht ganz richtig.
Frage dazu:
1. Wenn FOR /F als Standard-Delims das Leerzeichen und Tab als Trennzeichen verwendet sowie aufeianderfolgende Trennzeichen (hier das Leerzeichen) warum werden dann doch in Zeile 1 des Musters vor der Uhrzeit diese vielen leerzeichen ausgegeben, anders wie bei Versuch 1 oben.
2. wie bringe ich nun die For /f-Schleife dazu mir nur "vorhandene" %%VAriablen auszugeben? ein laufendes If Exist %%* pro %%Variable ist wohl nicht die feine Art un die beiden letzten Tokens (mit Uhrzeit und AM/PM würde ich auch nicht brauchen
3. Wieso befinden sich zw. %k und %l (in Ascii 2D) Bindestrich? <-- EDIT: ich habs doch so in der Syntax oben angeschafft..
Mit besten Grüßen
Heinze
Hallo @ all,
ich würde mal Eure Hilfe brauchen
Ich habe hier ein äusserst ungewöhnliches (für mich) Verhalten der FOR /F Schleife.
(bitte entschuldigt den langen Text, aber wie soll ichs sonst erklären?)
Vorgeschichte:
Ich lade mittels „wkhtmltopdf“ eine Webseite aus dem Internet (wget bringt nicht den gewünschten Erfolg) (zeitgesteuert).
Das Ausgabeformat von wkhtmltopdf ist ein .Pdf.
Dieses PDF wird mittels pdftotext in ein Txt umgewandelt (die HTML2txt-Tools bringen schlechteres Ergebniss)
Lt. Notepad++ ist das Txt im ANSI-code und mit der Notepade++ -Option „alle nicht druckbaren Zeichen anzeigen finde ich nicht ungewöhnliches.
Checke ich das Txt in einem Hexeditor (XVI32) ist ebenfalls alles unauffällig.
Zur Problembeschreibung 2 Beispielmusterzeilen aus dem Txt-File:
Auszug aus Notepad++:
Auszug aus Hexeditor:
Jage ich nun das txt durch einen for /F-loop:
setlocal EnableDelayedExpansion
.
for /f "skip=3 tokens=1,2,3,4,5,6,8,9" %%i in %source% do (
echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt
erhalte ich folgenden Output:
Die ersten 2 Zeilen:
Love You for-Life 10:39-PM--
Three Plus - ---
Eigentlich würde ich erwarten:
Love You for Life 10:39 PM--
Three Plus------
Wo liegt der Fehler im Script?
A. Daß in der ersten Zeile die Ausgabe
Love You for-Life 10:39-PM-- mit dem falschen „-„ zw. "for Life" und zw. "10:39 und PM"
und
B. In der zweiten Zeile Lücken zwischen den „Strichen“ sind
- --- ist statt ------?
Alle Zeilen im Txt-File sind ordnungsgemäss mit CR und LF abgeschlossen.
Diese Ungereimtheiten ziehen sich über die ganze „Muster.txt“ hin.
Nachdem ich die „Muster.txt“ weiter bearbeiten muss stören diese Ungereimtheiten gewaltig
Die "Striche" in den Zeilen sind doch die "leeren/nicht vorhanden" %%Variablen oder?
Wer weis mir da Rat?
Mit besten Grüßen
Heinze
----------------------------EDIT------------------
Nach einmal drüber schlafen habe ich folgende Änderungen in der Syntax der FOR /-Schleife vorgenommen:
@echo off
setlocal EnableDelayedExpansion
.
for /f "skip=3 tokens=1,*" %%i in %source% do (
echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt
Ich lasse also somit den Befehlsintero. die %%variablen in eiger Regie erstellen.
Die Ausgabe in das Muster.txt hat sich damit (warum überhaupts) generell verändert:
Love You for Life 10:39 PM %k-%l %m-%n-%o-%p
Three Plus %k-%l %m-%n-%o-%p
Auch diese Ausgabe ist irgendwie nicht ganz richtig.
Frage dazu:
1. Wenn FOR /F als Standard-Delims das Leerzeichen und Tab als Trennzeichen verwendet sowie aufeianderfolgende Trennzeichen (hier das Leerzeichen) warum werden dann doch in Zeile 1 des Musters vor der Uhrzeit diese vielen leerzeichen ausgegeben, anders wie bei Versuch 1 oben.
2. wie bringe ich nun die For /f-Schleife dazu mir nur "vorhandene" %%VAriablen auszugeben? ein laufendes If Exist %%* pro %%Variable ist wohl nicht die feine Art un die beiden letzten Tokens (mit Uhrzeit und AM/PM würde ich auch nicht brauchen
3. Wieso befinden sich zw. %k und %l (in Ascii 2D) Bindestrich? <-- EDIT: ich habs doch so in der Syntax oben angeschafft..
Mit besten Grüßen
Heinze
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 569544
Url: https://administrator.de/forum/ausgabe-for-f-teilweise-falsch-incl-edit-569544.html
Ausgedruckt am: 25.12.2024 um 06:12 Uhr
2 Kommentare
Neuester Kommentar
Moin,
Der Fehler liegt in deiner Erwartung. Wenn du mit %%i anfängst, heisst das für die erste zeile:
in %%o und %%p steht nichts mehr.
Der Output den du bekommst ist also korrekt.
Inhalt also wieder für die erste Zeile:
Gruß Thomas
Zitat von @Heinze:
Jage ich nun das txt durch einen for /F-loop:
erhalte ich folgenden Output:
Die ersten 2 Zeilen:
Love You for-Life 10:39-PM--
Three Plus - ---
Eigentlich würde ich erwarten:
Love You for Life 10:39 PM--
Three Plus------
Wo liegt der Fehler im Script?
zuerst mal, statt tokens=1,2,3,4,5,6,8,9 kannst du auch einfach tokens=1-9 verwenden.Jage ich nun das txt durch einen for /F-loop:
for /f "skip=3 tokens=1,2,3,4,5,6,8,9" %%i in %source% do (
> echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt
erhalte ich folgenden Output:
Die ersten 2 Zeilen:
Love You for-Life 10:39-PM--
Three Plus - ---
Eigentlich würde ich erwarten:
Love You for Life 10:39 PM--
Three Plus------
Wo liegt der Fehler im Script?
Der Fehler liegt in deiner Erwartung. Wenn du mit %%i anfängst, heisst das für die erste zeile:
%%i=Love
%%j=You
%%k=for
%%l=Live
%%m=10:39
%%n=PM
Der Output den du bekommst ist also korrekt.
B. In der zweiten Zeile Lücken zwischen den „Strichen“ sind
- --- ist statt ------?
Du hast in deinem echo-Befehl ja auch Leerzeichen zwischen %%j und %%k, sowie zwischen %%l und %%m, die sind dann natürlich auch im Output.- --- ist statt ------?
Nach einmal drüber schlafen habe ich folgende Änderungen in der Syntax der FOR /-Schleife vorgenommen:
Ich lasse also somit den Befehlsintero. die %%variablen in eiger Regie erstellen.
Die Ausgabe in das Muster.txt hat sich damit (warum überhaupts) generell verändert:
Du hast da etwas Grundlegend missverstanden. Mit "Tokens=1,*" sagst du, dass das erste Token in %%i geschrieben wird und alles was dahinter kommt wird ohne Trennung in %%j geschrieben. %%k-%%p sind dann überhaupt nicht mehr definiert.@echo off
setlocal EnableDelayedExpansion
.
for /f "skip=3 tokens=1,*" %%i in %source% do (
echo %%i %%j %%k-%%l %%m-%%n-%%o-%%p>>G:\Muster.txt
)
Ich lasse also somit den Befehlsintero. die %%variablen in eiger Regie erstellen.
Die Ausgabe in das Muster.txt hat sich damit (warum überhaupts) generell verändert:
Love You for Life 10:39 PM %k-%l %m-%n-%o-%p
Inhalt also wieder für die erste Zeile:
%%i=Love
%%j=You for Life 10:39 PM
Gruß Thomas