Die ersten und letzten 2 Zeilen einer Textdatei löschen
Es gibt hier ja Tipps in Hülle und Fülle, aber ich fürchte ich blicks nicht.
Wie kann man bitte die 2 ersten und letzten Zeilen einer Textdatei aus selbiger entfernen oder aber
beim erneuten einlesen diese Zeilen weglassen?
Mal ausführlicher:
cls
dir /-C > bla.txt && @for /F "eol= tokens=3,4 skip=7 delims= " %%i in (bla.txt) do @echo Name/Groesse: %%j / %%i >> sizes.txt
--
dir /-C listet den Verzeichnisinhalt(Dateigroesse ohne Punkte in Bytes) auf und schreibt die Ausgabe in die Datei bla.txt
Daraus bedient sich die for Schleufe und gibt mir nur Spalte 3 und 4 wieder (Dateiname und -größe -in Bytes) und gibt das in die Datei sizes.txt
Wenn ich mir die Datei nun anschaue, so enthält diese:
Name/Groesse: bla.txt / 0
Name/Groesse: size.bat / 255
Name/Groesse: INTERESSANTE_DATEI / 25798954
Name/Groesse: bytes / 255
Name/Groesse: bytes / 12513308672
Die Dateien, von denen ich exakt diese beiden Daten benötige lägen also in Zeile 3 sodass ich Zeile 1+2 und 3+4 nicht benötige.
Nur wie bekomme ich die wech?
Wie kann man bitte die 2 ersten und letzten Zeilen einer Textdatei aus selbiger entfernen oder aber
beim erneuten einlesen diese Zeilen weglassen?
Mal ausführlicher:
cls
dir /-C > bla.txt && @for /F "eol= tokens=3,4 skip=7 delims= " %%i in (bla.txt) do @echo Name/Groesse: %%j / %%i >> sizes.txt
--
dir /-C listet den Verzeichnisinhalt(Dateigroesse ohne Punkte in Bytes) auf und schreibt die Ausgabe in die Datei bla.txt
Daraus bedient sich die for Schleufe und gibt mir nur Spalte 3 und 4 wieder (Dateiname und -größe -in Bytes) und gibt das in die Datei sizes.txt
Wenn ich mir die Datei nun anschaue, so enthält diese:
Name/Groesse: bla.txt / 0
Name/Groesse: size.bat / 255
Name/Groesse: INTERESSANTE_DATEI / 25798954
Name/Groesse: bytes / 255
Name/Groesse: bytes / 12513308672
Die Dateien, von denen ich exakt diese beiden Daten benötige lägen also in Zeile 3 sodass ich Zeile 1+2 und 3+4 nicht benötige.
Nur wie bekomme ich die wech?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 45813
Url: https://administrator.de/contentid/45813
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
Hi,
warum diese Ausgabe in eine Datei und ein Dir-Kommando, was für deinen Fall unnütze Ausgaben mitliefert??
Auf Kommandozeile:
for /F %a in ('dir /b [Verzeichnis]') do echo %a %~za
... in einer Batch doppelte % verwenden
Viele Grüsse
-= Axel =-
Nachtrag:
Wenn Leerzeichen drin sind, braucht man noch tokens=*:
for /F "tokens=*" %a in ('dir /b [Verzeichnis]') do echo %a %~za
warum diese Ausgabe in eine Datei und ein Dir-Kommando, was für deinen Fall unnütze Ausgaben mitliefert??
Auf Kommandozeile:
for /F %a in ('dir /b [Verzeichnis]') do echo %a %~za
... in einer Batch doppelte % verwenden
Viele Grüsse
-= Axel =-
Nachtrag:
Wenn Leerzeichen drin sind, braucht man noch tokens=*:
for /F "tokens=*" %a in ('dir /b [Verzeichnis]') do echo %a %~za
Moin dumbo,
auch wenn ich es momentan nicht nachvollziehen kann, wieso es nun gerade die dritte der Dateien aus der DIR-Anzeige sein soll..
...machbar ist mit Batch ja alles.
[Sieht nur manchmal unappetitlich aus.]
Am CMD-Prompt:
... wobei, von innen nach außen erklärt:
dir /-c ....die "übliche" DIR-Anzeige; Größenangaben ohne Tausenderpunkte
Da ist ein 5-Zeiliger Vorspann dabei ("Datenträger in Laufwerk X: heißt ..." usw)
Den filtere ich wech mit ^|more +5.
Den verbleibenden Rest numeriere ich durch mit findstr /n .
und will von den durchnumerierten Zeilen nur die Zeile haben, die mit "3:" anfängt. findstr "^3:"
Das alles geht INNEN ab und dampft die Ausgabe auf eine, die dritte Zeile und damit die dritte Datei zusammen.
Außen, also die Spaltenauswertung dieser Zeile bleibt alles (fast) gleich. Die Tokens 3,4 heißen bei mir 3,* wegen Dateien mit Leerzeichen.
Als Batch mit Parameter welcheZeile sähe das dann ungetestet so aus:
HTH Biber
auch wenn ich es momentan nicht nachvollziehen kann, wieso es nun gerade die dritte der Dateien aus der DIR-Anzeige sein soll..
...machbar ist mit Batch ja alles.
[Sieht nur manchmal unappetitlich aus.]
Am CMD-Prompt:
>for /F "tokens=3,*" %i in ('dir /-c ^|more +5^|findstr /n .^|findstr /r "^3:"') do @echo Name/Größe: %j/%i
Name/Größe PDF_ConverterPro_drucker.zip/6723
dir /-c ....die "übliche" DIR-Anzeige; Größenangaben ohne Tausenderpunkte
Da ist ein 5-Zeiliger Vorspann dabei ("Datenträger in Laufwerk X: heißt ..." usw)
Den filtere ich wech mit ^|more +5.
Den verbleibenden Rest numeriere ich durch mit findstr /n .
und will von den durchnumerierten Zeilen nur die Zeile haben, die mit "3:" anfängt. findstr "^3:"
Das alles geht INNEN ab und dampft die Ausgabe auf eine, die dritte Zeile und damit die dritte Datei zusammen.
Außen, also die Spaltenauswertung dieser Zeile bleibt alles (fast) gleich. Die Tokens 3,4 heißen bei mir 3,* wegen Dateien mit Leerzeichen.
Als Batch mit Parameter welcheZeile sähe das dann ungetestet so aus:
:: ZeigMirDateiNumero.bat [Pflicht-Parameter1: Zeilennummer]
@for /F "tokens=3,*" %%i in ('dir /-c ^|more +5^|findstr /n .^|findstr /r "^%1:"') do @echo Name/Größe: %%j/%%i
HTH Biber
Und, wenn ich Axels Idee aufgreife und mit der einfachen DIR-Ausgabe die dritte Zeile rausflöhen will:
[CMD-Prompt]
-oder ohne Findstr und Nummerieren..-
Als Batch mit [Parameter zeilennr]
Gruß
Biber
[CMD-Prompt]
>for /F "delims=: tokens=2" %a in ('dir /b *.zip^|findstr /n .^|findstr "^3:"') do @echo %a %~za
PDF_ConverterPro_drucker.zip 6723
>Set /a "x=0">nul & for /F %a in ('dir /b *.zip') do @Set /a "x+=1">nul & @if !x!==3 @echo %a %~za
PDF_ConverterPro_drucker.zip 6723
Als Batch mit [Parameter zeilennr]
::-----DispFileNo.Bat Parameter nr
@echo off & setlocal EnableDelayedExpansion
Set /a "x=0"
for /F %%a in ('dir /b') do (
Set /a "x+=1"
if [!x!]==[%1] (
echo %%a %%~za
goto :eof
)
)
Biber