dumbo
Goto Top

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?

Content-ID: 45813

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

AxelHahn
AxelHahn 01.12.2006 um 17:47:49 Uhr
Goto Top
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
Biber
Biber 01.12.2006 um 17:50:41 Uhr
Goto Top
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:
>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
... 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:

:: 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
Biber
Biber 01.12.2006 um 18:08:34 Uhr
Goto Top
Und, wenn ich Axels Idee aufgreife und mit der einfachen DIR-Ausgabe die dritte Zeile rausflöhen will:
[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
-oder ohne Findstr und Nummerieren..-
>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
     )
)
Gruß
Biber
dumbo
dumbo 02.12.2006 um 16:03:58 Uhr
Goto Top
auch wenn ich es momentan nicht
nachvollziehen kann, wieso es nun gerade die
dritte der Dateien aus der DIR-Anzeige sein
soll..

Das ist ganz einfach ;=)
Ein tool benötigt von wechselnden Dateien immer die Größe in Byte, also dachte ich mir, per batch ist das sicher sinniger, als ständig in den Eigenschaften nachzuschauen und das einzeln für jede Datei.

Es soll aber nicht nur die dritte sein, sondern bedingt durch die Ausgabe von dir /-C ab der 3. bis zur 3. letzten.

Ich werde mir eure Beispiel mal zu Gemüte führen und hoffentlich keine Fragen mehr haben.
Vielen Dank für die Mühe.