
45753
24.03.2007, aktualisiert am 26.03.2007
Vorletzte Zeile aus Textdatei auslesen Zeilenanzahl ist nicht konstant Inhalt ist unbekannt
Hallo,
Ich habe zu einem Problem einfach keine Lösung im Web finden können...
Ich möchte die Anzahl aller gefundener Desktop.ini's aus allen Ordnern + Unterordnern in eine Variable legen können. Dieser Link hat mir zwar schon weitergeholfen...
EINE Zeile aus TXT-Datei auslesen
aber nun habe ich das Problem, dass in ALLINONEB.txt statt die gelöschten Zahl, nun folgender Text steht: "ECHO ist ausgeschaltet (OFF). Ich habe gelesen, dass das Problem wohl an der verlorenen Variablen liegt...
Ich brauche den Wert der Anzahl der Desktop.ini's in der letzten Zeile, da ich sonst nicht weis, wie ich diese Zahl auslesen könnte.
Wenn es generell eine bessere Lösung für mein Problem gibt, dann bitte nur raus damit. Wenn ich mir nämlich meine Batch ansehe, dann bekomme ich ein bischen das Kopfschütteln....
@echo off
for /f %%i in ('dir /A HS /S "Desktop.ini"') do echo %%i >> "ALLINONEA.txt"
echo.
:: Letzte Zeile in %VarA% speichern
for /F "Tokens=*" %%i in (ALLINONEA.txt) do Set VarA=%%i
Echo Letzte Zeile...: [%VarA%]
echo.
echo.
for /f "delims=0" %%j in (ALLINONEA.txt) do echo %%j >> "ALLINONEB.txt"
echo.
:: Letzte Zeile in %VarB% speichern
for /F "Tokens=*" %%i in (ALLINONEA.txt) do Set VarB=%%i
Echo Letzte Zeile...: [%VarB%]
echo.
pause
Ich habe zu einem Problem einfach keine Lösung im Web finden können...
Ich möchte die Anzahl aller gefundener Desktop.ini's aus allen Ordnern + Unterordnern in eine Variable legen können. Dieser Link hat mir zwar schon weitergeholfen...
EINE Zeile aus TXT-Datei auslesen
aber nun habe ich das Problem, dass in ALLINONEB.txt statt die gelöschten Zahl, nun folgender Text steht: "ECHO ist ausgeschaltet (OFF). Ich habe gelesen, dass das Problem wohl an der verlorenen Variablen liegt...
Ich brauche den Wert der Anzahl der Desktop.ini's in der letzten Zeile, da ich sonst nicht weis, wie ich diese Zahl auslesen könnte.
Wenn es generell eine bessere Lösung für mein Problem gibt, dann bitte nur raus damit. Wenn ich mir nämlich meine Batch ansehe, dann bekomme ich ein bischen das Kopfschütteln....
@echo off
for /f %%i in ('dir /A HS /S "Desktop.ini"') do echo %%i >> "ALLINONEA.txt"
echo.
:: Letzte Zeile in %VarA% speichern
for /F "Tokens=*" %%i in (ALLINONEA.txt) do Set VarA=%%i
Echo Letzte Zeile...: [%VarA%]
echo.
echo.
for /f "delims=0" %%j in (ALLINONEA.txt) do echo %%j >> "ALLINONEB.txt"
echo.
:: Letzte Zeile in %VarB% speichern
for /F "Tokens=*" %%i in (ALLINONEA.txt) do Set VarB=%%i
Echo Letzte Zeile...: [%VarB%]
echo.
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 54946
Url: https://administrator.de/forum/vorletzte-zeile-aus-textdatei-auslesen-zeilenanzahl-ist-nicht-konstant-inhalt-ist-unbekannt-54946.html
Ausgedruckt am: 19.05.2025 um 18:05 Uhr
29 Kommentare
Neuester Kommentar

set lw=%systemdrive%
dir %lw%\Desktop.ini /a /s /B > irgendwas.txt
Und dann zählst du einfach die Zeilen der irgendwas.txt
Hallo wobleibtdiezeit!
Wenn Du Deine etwas abenteuerliche Fassung beibehalten willst, müsstest Du nur
schreiben, um die Anzahl in der letzten Zeile zu erhalten.
Etwas abgekürzt wäre (direkt von der Commandline):
Grüße
bastla
Wenn Du Deine etwas abenteuerliche Fassung beibehalten willst, müsstest Du nur
for /f %%i in ('dir /A HS /S "Desktop.ini" ^| findstr /v "Verzeichnis(se)"') do echo %%i >> "ALLINONEA.txt"
Etwas abgekürzt wäre (direkt von der Commandline):
for /f %i in ('dir /s /ahs desktop.ini ^| findstr /v "Verzeichnis(se)"') do @set Anzahl=%i
echo %Anzahl%
Grüße
bastla
Hallo wobleibtdiezeit!
Vielleicht noch zur Klarstellung: "Verzeichnis(se)" in meinem Ansatz oben hat die Aufgabe, die störende letzte Zeile der "dir"-Ausgabe zu eliminieren.
Grüße
bastla
Gibt es eine Möglichkeit der Batch beizubringen, automatisch das Verzeichnis zu nehmen in dem die Batch ausgeführt wurde?
Sorry - die Fragestellung ist mir nicht klar. Wofür soll ein Verzeichnis genommen werden?Vielleicht noch zur Klarstellung: "Verzeichnis(se)" in meinem Ansatz oben hat die Aufgabe, die störende letzte Zeile der "dir"-Ausgabe zu eliminieren.
Grüße
bastla

@45753
>Gibt es eine Möglichkeit der Batch beizubringen, automatisch das Verzeichnis zu nehmen in dem die Batch ausgeführt wurde?
Gibt es. Bau die Zeilen ein:
set lw=%~f0
set lw=%lw:~0,3%
Den Rest musst du allein herausfinden. Etwas sollst du ja dabei lernen, und nicht alles vorgekaut bekommen.
edit: 2 Buchstaben angefügt.
Damit wird das Laufwerk, von dem die Batch gestartet wird durchsucht.
>Gibt es eine Möglichkeit der Batch beizubringen, automatisch das Verzeichnis zu nehmen in dem die Batch ausgeführt wurde?
Gibt es. Bau die Zeilen ein:
set lw=%~f0
set lw=%lw:~0,3%
Den Rest musst du allein herausfinden. Etwas sollst du ja dabei lernen, und nicht alles vorgekaut bekommen.
edit: 2 Buchstaben angefügt.
Damit wird das Laufwerk, von dem die Batch gestartet wird durchsucht.

@bastla
Nicht ganz, jedenfalls nicht ohne Anpassung. Aber ich habe den Post berichtigt, so sollte das funktionieren.
edit: Natürlich hast du Recht. Ich bin aber erst durch den Nachfolgepost von paulepank darauf gekommen. ;)
Ich hatte das als "Laufwerk, von dem die Batch gestartet wird" interpretiert.
Nicht ganz, jedenfalls nicht ohne Anpassung. Aber ich habe den Post berichtigt, so sollte das funktionieren.
edit: Natürlich hast du Recht. Ich bin aber erst durch den Nachfolgepost von paulepank darauf gekommen. ;)
Ich hatte das als "Laufwerk, von dem die Batch gestartet wird" interpretiert.
@45426
Meine Überlegung ging eigentlich in die Richtung, dass er vielleicht einen Aufruf folgender Art produzieren würde:
Dann wäre anstatt meiner "cd"-Krücke das gänzliche Weglassen des "dir"-Zieles (wie er es in seinem Entwurf ja selbst schon gemacht hatte) oder eine vernünftige Parameterübergabe am sinnvollsten.
Grüße
bastla
[Edit] Mein Kommentar hat sich inzwischen wohl erledigt.
[/Edit]
[Edit2] Mir war allerdings, wie man oben sieht, auch nicht gleich klar, was eigentlich gemeint wäre. [/Edit2]
Meine Überlegung ging eigentlich in die Richtung, dass er vielleicht einen Aufruf folgender Art produzieren würde:
D:\Test>C:\Scripts\CountDesktopInis.bat
Grüße
bastla
[Edit] Mein Kommentar hat sich inzwischen wohl erledigt.
[Edit2] Mir war allerdings, wie man oben sieht, auch nicht gleich klar, was eigentlich gemeint wäre. [/Edit2]

> eine vernünftige Parameterübergabe am sinnvollsten
Genau!
Dann könnte man den Batch z. B. nach Senden an schieben.
Genau!
Dann könnte man den Batch z. B. nach Senden an schieben.

Lies dir die ganzen Beiträge nochmal durch, da gibt es einfachere Lösungen.
Es nutzt dir doch wenig, wenn du die fertige Lösung präsentiert bekommst, hier gibt es doch schon verschiedene Lösungsansätze. Wenn du versuchst, die mal nachzuvollziehen, kommst du auch selbst dahinter.
Beschäftige dich doch in der Windows-Hilfe mal mit dem Thema "Batch" und den ganzen Unterseiten. Dort steht doch im Prinzip alles, was du wissen musst.
Es nutzt dir doch wenig, wenn du die fertige Lösung präsentiert bekommst, hier gibt es doch schon verschiedene Lösungsansätze. Wenn du versuchst, die mal nachzuvollziehen, kommst du auch selbst dahinter.
Beschäftige dich doch in der Windows-Hilfe mal mit dem Thema "Batch" und den ganzen Unterseiten. Dort steht doch im Prinzip alles, was du wissen musst.
Hallo wobleibtdiezeit!
Damit Du ins Bett kommst:
Ausgehend von paulepanks Lösung habe ich das Ganze etwas erweitert, sodass Du die Batchdatei tatsächlich in den Ordner "SendTo" legen kannst und sowohl von einer Datei als auch von einem Ordner aus mit "Senden an" aufrufen kannst.
Falls Du eine Auswertung für ein Rootverzeichnis (also etwa "D:\") benötigst, markiere einfach eine Datei und rufe den Batch von dieser aus auf.
Du kannst den Batch auch von der Commandline verwenden (mit Übergabe eines Pfades oder auch ohne Parameter - dann wird ausgehend vom aktuellen Verzeichnis gezählt).
Grüße
bastla
Damit Du ins Bett kommst:
@echo off & setlocal
if [%1] neq cd /d %1 2>nul || cd /d "%~dp1"
for /f %%i in ('dir desktop.ini /a /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahl=%%i
if not defined anzahl set anzahl=0
echo %anzahl% desktop.ini unterhalb von %cd%
echo.
pause
Falls Du eine Auswertung für ein Rootverzeichnis (also etwa "D:\") benötigst, markiere einfach eine Datei und rufe den Batch von dieser aus auf.
Du kannst den Batch auch von der Commandline verwenden (mit Übergabe eines Pfades oder auch ohne Parameter - dann wird ausgehend vom aktuellen Verzeichnis gezählt).
Grüße
bastla

Die Zeile, die paulepank um 14.56:31 geschrieben hat, einfach um %1\ erweitert, ergibt (mit Beiwerk):
Das geht allerdings wegen "\\" in die Hose, wenn du das direkt aus dem Root-Verzeichnis aufrufst.
Aber wenigstens etwas soll für dich noch übrig bleiben.
Die Zeilen speicherst du dann als irgendwas.bat im SendTo-Ordner deines Profils.
@echo off
for /f %%i in ('dir /a /s /b %1\desktop.ini^|find /c /i "desktop.ini"') do @set anzahl=%%i
@echo %anzahl% gefundene Dateien Desktop.ini im Pfad %1
pause
Das geht allerdings wegen "\\" in die Hose, wenn du das direkt aus dem Root-Verzeichnis aufrufst.
Aber wenigstens etwas soll für dich noch übrig bleiben.
Die Zeilen speicherst du dann als irgendwas.bat im SendTo-Ordner deines Profils.

> wobei ein "Senden an" von einem Root-Ordner aus erst einmal gelingen muss.
Kannste mal sehen, dumm gelaufen. Ist mir noch gar nicht aufgefallen.
Ich nutze SendTo nur für den Unlocker.
Kannste mal sehen, dumm gelaufen. Ist mir noch gar nicht aufgefallen.
Ich nutze SendTo nur für den Unlocker.
Hallo wobleibtdiezeit!
Fleißig, fleißig ...
Kurze Anmerkungen:
Zur Menüeingabe:
Mit einem "if /i" beugst Du auch einer Fehlinterpretation wegen gedrückter Caps-Lock-Taste vor ...
Zu den Ausgaben:
Vielleicht vorweg ein
und danach dann nur noch
Die Namensgebung der Ausgabedatei habe ich hiermit ausdrücklich nicht kommentiert. 
Schließlich könntest Du den doppelt vorkommenden Teil zur Ausgabe der statistischen Daten in ein Unterprogramm auslagern, im Sinne von
Vor dem Sprungziel "Statistik" würdest Du bei Bedarf mit einem "goto :eof" dafür sorgen, dass das Unterprogramm nicht unabsichtlich durchlaufen wird (bei Dir würde das durch "exit" davor derzeit ohnehin verhindert).
Ansonsten: Keep on batchin'
bastla
P.S.: Um Code zu posten, empfiehlt es sich, diesen zwischen die Tags < code> und < /code> (natürlich ohne Leerstellen) zu setzen.
Fleißig, fleißig ...
Kurze Anmerkungen:
Zur Menüeingabe:
if "%choice%" == "y" goto txtja
Zu den Ausgaben:
echo ... >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt
set t="!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt!"
echo ... >> %t%
Schließlich könntest Du den doppelt vorkommenden Teil zur Ausgabe der statistischen Daten in ein Unterprogramm auslagern, im Sinne von
call :Statistik
Ansonsten: Keep on batchin'
bastla
P.S.: Um Code zu posten, empfiehlt es sich, diesen zwischen die Tags < code> und < /code> (natürlich ohne Leerstellen) zu setzen.
Moin wobleibtdiezeit und alle anderen,
zu Deiner P.S.-Frage nach dem CommandLine-Zip-Tool-Gesucht-Beitrag...
---> ich öffne ihn noch mal, dann kannst Du auch gerne die beiden Links auch dort noch einmal posten.
Die Entscheidung des jeweiligen Mods, einen Beitrag zu schliessen, ist sicherlich immer etwas willkürlich.
Der von Dir erwähnte schien mir aus Sicht des Fragestellers zur Zufriedenheit beantwortet zu sein.
In solchen Fällen schliesse ich den Beitrag meist nach kurzer Schamfrist, weil sonst ....
irgendein Suchmaschinen-Anwerfer auf der Suche nach einer Lösung über diesen Beitrag stolpert,
nach kurzem Überfliegen (ca 12.sec) der Postings feststellt, dass dort gar keine Antworten auf die Fragen stehen, die ihn nun beschäftigen,
und dann etwas druntersemmelt, was mit den Worten beginnt "Ich hab genau das gleiche Problem".
Was sich ab der zweiten geposteten Zeile allerdings sehr schnell relativiert, weil es dann meist schnell weitergeht mit ...
"...das klappt auch soweit, aber seit ich DSL habe und mein Nachbar eine 1400W-Senseo Turntable Premium,
zeigt mein USB-Stick manchmal weiße Streifen am Rand. Kann ich das auch ohne Adminrechte über die Gruppenlinien ändern?"
Und deshalb möchte dann lieber einen neuen Beitrag eröffnet haben, denn wenn es wirklich exakt das gleiche Problem ist, sollte auch die gepostete und akzeptierte Lösung passen.
Sollte ich natürlich mal zu voreilig sein mit dem Schliessen eines Beitrags, dann jederzeit gerne eine PN an mich (bzw. den zuständigen Mod).
Dann wird der Beitrag wieder eröffnet.
Grüsse
Biber
zu Deiner P.S.-Frage nach dem CommandLine-Zip-Tool-Gesucht-Beitrag...
p.s.: wieso ist der Beitrag schon geschlossen? "Zip Datei per Batch entpacken"
---> ich öffne ihn noch mal, dann kannst Du auch gerne die beiden Links auch dort noch einmal posten.
Die Entscheidung des jeweiligen Mods, einen Beitrag zu schliessen, ist sicherlich immer etwas willkürlich.
Der von Dir erwähnte schien mir aus Sicht des Fragestellers zur Zufriedenheit beantwortet zu sein.
In solchen Fällen schliesse ich den Beitrag meist nach kurzer Schamfrist, weil sonst ....
irgendein Suchmaschinen-Anwerfer auf der Suche nach einer Lösung über diesen Beitrag stolpert,
nach kurzem Überfliegen (ca 12.sec) der Postings feststellt, dass dort gar keine Antworten auf die Fragen stehen, die ihn nun beschäftigen,
und dann etwas druntersemmelt, was mit den Worten beginnt "Ich hab genau das gleiche Problem".
Was sich ab der zweiten geposteten Zeile allerdings sehr schnell relativiert, weil es dann meist schnell weitergeht mit ...
"...das klappt auch soweit, aber seit ich DSL habe und mein Nachbar eine 1400W-Senseo Turntable Premium,
zeigt mein USB-Stick manchmal weiße Streifen am Rand. Kann ich das auch ohne Adminrechte über die Gruppenlinien ändern?"
Und deshalb möchte dann lieber einen neuen Beitrag eröffnet haben, denn wenn es wirklich exakt das gleiche Problem ist, sollte auch die gepostete und akzeptierte Lösung passen.
Sollte ich natürlich mal zu voreilig sein mit dem Schliessen eines Beitrags, dann jederzeit gerne eine PN an mich (bzw. den zuständigen Mod).
Dann wird der Beitrag wieder eröffnet.
Grüsse
Biber
Danke Dir, wobleibtdiezeit,
habe den anderen Beitrag wieder geschlossen und werde das auch gleich mit diesem hier tun.
Wie geschrieben: eine Wieder-Eröffnung eines Threads ist kein Problem und ich fühle mich durch diesbezügliche PN-Aufforderungen nicht belästigt.
Nerviger finde ich die oben erwähnten Ich-habe-genau-dasselbe-Problem-Nachtröpfler.
Grüsse
Biber
habe den anderen Beitrag wieder geschlossen und werde das auch gleich mit diesem hier tun.
Wie geschrieben: eine Wieder-Eröffnung eines Threads ist kein Problem und ich fühle mich durch diesbezügliche PN-Aufforderungen nicht belästigt.
Nerviger finde ich die oben erwähnten Ich-habe-genau-dasselbe-Problem-Nachtröpfler.
Grüsse
Biber