2015-01-13 4 views
7

Gibt es eine Möglichkeit zum Extrahieren/Kopieren der ersten X Anzahl von Zeilen aus einer Datei und geben Sie sie in eine andere Datei mit einem einzigen Befehl mit der Windows-Eingabeaufforderung?
mehr + X [file_containing Daten]> [file_to_export_data_to]Extrahieren N Zeilen aus Datei mit einzelnen Windows-Befehl

Wenn der Kopf Befehl funktionieren würde, ich glaube, ich könnte dies nur tun: mit

kann ich die ersten X Anzahl der Zeilen löschen
Kopf - X [file_containing data]> [file_to_export_data_to]

Aber das funktioniert leider nicht.

Es wäre toll, wenn Windows einen "weniger" Befehl hätte aber wieder kein Glück.

Ich bin ein absoluter Neuling, wenn es um dieses Zeug geht, also bin ich sicher, dass ich etwas offensichtliches vermisse. Ich möchte nichts installieren oder etwas anderes als die Eingabeaufforderung verwenden.

Dank

+3

Powershell: 'get-Content-Datei | Auswahlobjekt -first 10'. (PowerShell ist ab Windows 7 integriert.) –

+0

POWERSHELL> get-content int.txt | select-object -first 10> out.txt – sdd

Antwort

1
Set Inp = WScript.Stdin 
Set Outp = Wscript.Stdout 
x = 0 
    Do Until Inp.AtEndOfStream 
       x = x + 1 
     OutP.WriteLine Inp.Readline 
       If x = 5 then Exit Do 
    Loop 

Dies druckt Zeilen 1 bis 5.

cscript //nologo <path to script.vbs> <inputfile >outputfile 
2
(@FOR /f "tokens=1* delims=:" %a IN ('findstr /n "^" "standardwaffle.txt"') DO @IF %a leq 7 ECHO(%b)>u:\junk.txt 

die ersten 7 Zeilen standardwaffle.txt-u:\junk.txt so ist es in einer cmd Linie hier würde extrahieren verwenden - aber ich würde dich trotzen, um das zuverlässig zu betreten.

Es würde auch alle führenden : auf einer Quellleitung entfernen.

@ECHO OFF 
SETLOCAL 
IF %1 lss 0 (SET /a line=-%1) ELSE (SET /a line=%1) 
FOR /f "tokens=1* delims=:" %%a IN ('findstr /n "^" "%~2"') DO IF %%a leq %line% ECHO(%%b 

GOTO :EOF 

Dieser Ansatz, gespeichert als head.bat überall auf Ihrem Weg gelegt Sie erlauben würde,

head -n standardwaffle.txt >junk.txt 

zu extrahieren, um die ersten n Linien standardwaffle.txt-junk.txt

die - wären optional zu verwenden

aber Dies beinhaltet die Installation der Charge auf Ihrer Maschine. Ist das durch Ihre "no installing" -Anforderung verboten, oder ist "installing" nur für Dienstprogramme von Drittanbietern gedacht?

+0

Die Batch-Datei scheint zuerst die ganze Datei zu lesen, da es in einer Datei mit 500 MB viel kostet und in kleinen Dateien sofort funktioniert. Auf der anderen Seite scheint die Lösung mit Powershell von dbenham den beabsichtigten Teil schnell auszugeben, so dass er unterbrochen werden kann, während er den Rest der Datei noch liest. –

13

Sie können Powershell verwenden, aus der cmd.exe Konsole:

powershell -command "& {get-content input.txt|select-object -first 10}" >output.txt 

Sie könnten einen DOSKEY erstellen Makro, um es einfacher von der Kommandozeile zu verwenden:

doskey head=powershell -command "& {get-content $1|select-object -first $2}" 

Verbrauch:

head input.txt 10 >output.txt 

Sie können jedoch ein DOSKEY-Makro nicht innerhalb eines Stapel-Skripts verwenden.

Sie könnten einen Kopf erstellen.Fledermaus-Skript statt und legen Sie sie in einem Ordner, der in PATH enthalten ist:

head.bat

@powershell -command "& {get-content %1|select-object -first %2}" 

in der Befehlszeile, würden Sie head input.txt 10 >output.txt

Aus einem Batch-Skript verwenden würden Sie verwenden call head input.txt 10 >output.txt

Ich entschied mich, die Ausgabedatei nicht als Parameter zu haben, wenn Sie das Ergebnis einfach auf dem Bildschirm anzeigen möchten, anstatt zu schreiben zu einer Datei.

8

Die einfachste Lösung mit einem Befehl ist Powershell Get-Content.

N - Anzahl der Zeilen.

Vom Anfang der Datei:

Get-Content -Head N file.txt 

Vom Ende der Datei:

Get-Content -Tail N file.txt 
+2

Ich bekomme "Ein Parameter kann nicht gefunden werden, der mit dem Parameternamen 'Head' übereinstimmt." Error. –

+0

Überprüfen Sie die Version von PowerShell, ich nehme an, es ist alt. Oder ein Tippfehler irgendwo im Kommando. – Janusz

1

Um eine korrekte UTF-8-Ausgabe zu erhalten, gehen Sie wie folgt in Power

chcp 65001 

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding 

get-content input.txt -encoding UTF8 |select-object -first 10000 > output.txt 

Dies wird die ersten 10000 Zeilen von input.txt (Datei im utf8 Format) zu output.txt mit korrekter Kodierung bringen.

0

Sie können diese verwenden:

break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb X /t |more +4 | findstr /B /E /V "*****" 

, wo Sie die X mit den Linien ersetzen sollten Sie want.or dieses head.bat nennen:

break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb %~1 /t |more +4 | findstr /B /E /V "*****" 
Verwandte Themen