Sonderzeichen Fehler aus Textdatei vermeiden
Hallo,
ich habe eine einzige Textdatei mit unbekanntem Namen Im Ordner "temp", mit dem Inhalt:
Wenn ich mir nun die letzte Zeile mit dem Code
ausgeben lasse in "letzte Zeile.txt", dann bekomme ich den Fehler:
Ich vermute stark, dass das mit den Sonderzeichen "&", etc. abhängt.
Wie kann ich diesen Fehler vermeiden?
Vielen Dank im Voraus und LG
Peter
ich habe eine einzige Textdatei mit unbekanntem Namen Im Ordner "temp", mit dem Inhalt:
Zeile1
Zeile2
...
Vorletzte Zeile www.website.de/?offset=123456&max=500&sort=relevanz&other/weiteres
Letzte Zeile www.website.de/?offset=789012&max=500&sort=relevanz&other/weiteres
Wenn ich mir nun die letzte Zeile mit dem Code
set "LetzteZeile="
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "temp\*.*"') do set "LetzteZeile=%%j"
echo %LetzteZeile%>letzte Zeile.txt
ausgeben lasse in "letzte Zeile.txt", dann bekomme ich den Fehler:
Der Befehl "max" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
=relevanzDas System kann die angegebene Datei nicht finden.
Ich vermute stark, dass das mit den Sonderzeichen "&", etc. abhängt.
Wie kann ich diesen Fehler vermeiden?
Vielen Dank im Voraus und LG
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 314058
Url: https://administrator.de/forum/sonderzeichen-fehler-aus-textdatei-vermeiden-314058.html
Ausgedruckt am: 10.05.2025 um 19:05 Uhr
16 Kommentare
Neuester Kommentar
Hallo Peter,
da fallen mir die folgenden beiden Möglichkeiten ein:
1. Da Dich ja nur die letzte Zeile interessiert, kannst Du die Zieldatei immer wieder überschreiben. Der Inhalt der Laufvariablen von
2. Alternative Möglichkeit für die Ausgabe; die Batch-Variable ist zwar in Anführungszeichen eingeschlossen, diese werden aber nicht in die Datei geschrieben.
Grüße
Friemler
da fallen mir die folgenden beiden Möglichkeiten ein:
1. Da Dich ja nur die letzte Zeile interessiert, kannst Du die Zieldatei immer wieder überschreiben. Der Inhalt der Laufvariablen von
FOR
-Schleifen wird nicht interpretiert und ist somit "sonderzeichenfest".for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "temp\*.*"') do (
>"letzte Zeile.txt" echo %%j
)
2. Alternative Möglichkeit für die Ausgabe; die Batch-Variable ist zwar in Anführungszeichen eingeschlossen, diese werden aber nicht in die Datei geschrieben.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "temp\*.*"') do (
set "LetzteZeile=%%j"
)
>"letzte Zeile.txt" (set /p "=%LetzteZeile%" < NUL & echo.)
Grüße
Friemler

gibt es einen schnelleren Weg?
@echo off
powershell -Executionpolicy ByPass -Command "gc 'C:\temp\*.*' -tail 1 | out-file 'C:\letztezeile.txt'"
Hallo Peter,
da die Lösung von @129813 Powershell 3.0 voraussetzt, schlage ich noch folgendes vor:
Der Aufruf von
Benötigt für eine Datei mit 1000000 Zeilen ca. 10 Sekunden.
Grüße
Friemler
da die Lösung von @129813 Powershell 3.0 voraussetzt, schlage ich noch folgendes vor:
for %%f in ("temp\*.*") do (
for /f "usebackq tokens=* delims=" %%i in ("%%~f") do (
set "LetzteZeile=%%i"
)
)
>"letzte Zeile.txt" (set /p "=%LetzteZeile%" < NUL & echo.)
Der Aufruf von
FINDSTR
innerhalb der FOR
-Klammer war ja komplett unnötig, da Du die Zeilennummer sowieso ignorierst, die von FINDSTR
wegen dem Parameter /N
vor die gefundenen Zeilen (also alle in der Datei) gesetzt wird.Benötigt für eine Datei mit 1000000 Zeilen ca. 10 Sekunden.
Grüße
Friemler

Small change and it's compatible with every powershell version 
Regards
powershell -Executionpolicy ByPass -Command "(gc 'C:\temp\*.*')[-1] | out-file 'C:\letztezeile.txt'"
[OT]
Hello highload,
Powershell is like the cockpit of a modern car: A multifunctional menu driven touchscreen and additionally 50 knobs and switches at minimum. You can only handle them if you spend two days for reading the manual and another two weeks to train yourself in operating all this stuff. In the end you find yourself completely confused and you realize that you only need one percent of all the functionallity the car offers for your daily requirements.
BTW: The shortest is not the best (said the bitch in the brothel).
Regards
Friemler
[/OT]
Hello highload,
Powershell is like the cockpit of a modern car: A multifunctional menu driven touchscreen and additionally 50 knobs and switches at minimum. You can only handle them if you spend two days for reading the manual and another two weeks to train yourself in operating all this stuff. In the end you find yourself completely confused and you realize that you only need one percent of all the functionallity the car offers for your daily requirements.
BTW: The shortest is not the best (said the bitch in the brothel).
Regards
Friemler
[/OT]

In the end you find yourself completely confused
? and you realize that you only need one percent of all the functionallity the car offers for your daily requirements.
But i don't need 100 additional different external tools like in batch when i have a complete programming language (.NET) in my back If performance is the main target I would never use windows anyway, instead using my brothers sed, grep, tail or awk
But everyone decides itself anyway ...
Have a nice weekend
highload
[OT]
My comment wasn't meant to be that serious. It was a reply to your "In Powershell it is shorter again" statement (which you deleted meanwhile).
Of course, Powershell is a powerfull language and batchscript and its design was the work of a dumb trainee at Microsoft. But for such simple tasks like requested by the TO it is good enough.
I'm a Delphi developer and don't have the requirement to do things with scripts that much. So, Batchscript sufficently fits my needs and using Powershell is like throwing a thermonuclear bomb if I'm in a hassle with my neighbour.
A nice weekend for you too.
Friemler
[/OT]
My comment wasn't meant to be that serious. It was a reply to your "In Powershell it is shorter again" statement (which you deleted meanwhile).
Of course, Powershell is a powerfull language and batchscript and its design was the work of a dumb trainee at Microsoft. But for such simple tasks like requested by the TO it is good enough.
I'm a Delphi developer and don't have the requirement to do things with scripts that much. So, Batchscript sufficently fits my needs and using Powershell is like throwing a thermonuclear bomb if I'm in a hassle with my neighbour.
A nice weekend for you too.
Friemler
[/OT]
Moin Peter32,
Elegante Überleitung.
Und auch viel passender als "Was ich letzte Nacht geträumt habe" oder "wie schon die alten Ägypter sagten".
Nichtsdestotrotz: ich hatte schon vor wenigen Tagen explizit DICH darum gebeten, doch nicht in Beiträgen zur einer bestimmten Frage plötzlich ein vollkommen anderes Thema aufzureissen, wenn die Frage beantwortet ist oder nicht mehr so wichtig erscheint.
Weil:
Es sei denn:
Kürzer ohne inhaltliche Änderung ginge es jedenfalls so:
Vielleicht drücken wir es damit unter 9 Minuten.
Was diese beiden Zeilen allerdings miteinander zu tun haben (falls das der ganze Batch ist) vermag ich nicht zu deuten.
Grüße
Biber
Elegante Überleitung.
Und auch viel passender als "Was ich letzte Nacht geträumt habe" oder "wie schon die alten Ägypter sagten".
Nichtsdestotrotz: ich hatte schon vor wenigen Tagen explizit DICH darum gebeten, doch nicht in Beiträgen zur einer bestimmten Frage plötzlich ein vollkommen anderes Thema aufzureissen, wenn die Frage beantwortet ist oder nicht mehr so wichtig erscheint.
Weil:
- Menschen, die vielleicht eine Lösung zu dem Titel-Thema erhoffen, könnten enttäuscht werden
- Menschen, die vielleicht eine Antwort auf die neue Frage wissen, werden diese Frage nie lesen in einem gelösten Thread mit anderem Titel
weiß einer warum mein o.g. code manchmal sogar 10 minuten dauert? und wie man das eventuell beschleunigen kann?
Nicht wirklich . Zwar scheinen die ersten 3 Zeilen nix mit der 4ten Zeile zu tun zu haben, aber es ist nichts dabei, was 10 Mnuten dauern kann,Es sei denn:
- in deinem Arbeitsverzeichnis (in dem der Batch läuft) sind mehr als 40000 Dateien
- die Festplatte/Partition ist so voll, dass selbst kleinste Directory-Änderungen Stress verursachen
- der Batch heisst "tasklist.bat" oder tasklist.cmd und braucht deshalb ein büschen länger
- der Wert %freeram%, den du setzt, beträgt weniger als 172 Byte
Kürzer ohne inhaltliche Änderung ginge es jedenfalls so:
tasklist | findstr /i "programm1.exe programm2.exe">"prozesse.txt"
for /f %%a in ('wmic os get FreePhysicalMemory') do set "freeram=%%a"
Vielleicht drücken wir es damit unter 9 Minuten.
Was diese beiden Zeilen allerdings miteinander zu tun haben (falls das der ganze Batch ist) vermag ich nicht zu deuten.
Grüße
Biber

Totally agree with @colinardo in the other thread !
You step on my nerves, my friend
START LEARNING POWERSHELL -> NOW
And don't nerve the people here with these simple things you can read in any documentation!!
You step on my nerves, my friend
START LEARNING POWERSHELL -> NOW
And don't nerve the people here with these simple things you can read in any documentation!!