Gibt es eine Möglichkeit, die X-Zeilenanzahl der Faust aus einer Datei zu extrahieren/zu kopieren und sie mit einem einzigen Befehl über die Windows-Eingabeaufforderung in eine andere Datei einzugeben?
Ich kann die ersten X Zeilenanzahl löschen mit:
more + X [dateihaltige Daten]> [file_to_export_data_to]
Wenn das Kopfkommando funktionieren würde, denke ich, könnte ich das einfach tun:
head -X [dateihaltige Daten]> [file_to_export_data_to]
Das geht aber leider nicht.
Es wäre großartig, wenn Windows einen "weniger" -Befehl hätte, aber auch kein Glück.
Ich bin ein absoluter Neuling, wenn es um dieses Zeug geht. Ich bin mir sicher, dass mir etwas offensichtlich fehlt. Ich möchte nichts installieren oder etwas anderes als den Befehl Prompt verwenden.
Vielen Dank
Sie können PowerShell über die cmd.exe-Konsole verwenden:
powershell -command "& {get-content input.txt|select-object -first 10}" >output.txt
Sie können ein DOSKEY-Makro erstellen, um die Verwendung über die Befehlszeile zu erleichtern:
doskey head=powershell -command "& {get-content $1|select-object -first $2}"
Verwendungszweck:
head input.txt 10 >output.txt
Sie können jedoch kein DOSKEY-Makro in einem Batch-Skript verwenden.
Sie können stattdessen ein head.bat-Skript erstellen und es in einem Ordner ablegen, der in Ihrem 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
verwenden.
In einem Batch-Skript würden Sie call head input.txt 10 >output.txt
verwenden.
Ich habe mich entschieden, die Ausgabedatei nicht als Parameter zu verwenden, wenn Sie das Ergebnis einfach auf dem Bildschirm anzeigen möchten, anstatt in eine Datei zu schreiben.
die einfachste Ein-Befehl-Lösung ist die Verwendung von Powershell Get-Content.
N - Anzahl der Zeilen.
Vom Anfang der Akte:
Get-Content -Head N file.txt
Vom Ende der Datei:
Get-Content -Tail N file.txt
(@FOR /f "tokens=1* delims=:" %a IN ('findstr /n "^" "standardwaffle.txt"') DO @IF %a leq 7 ECHO(%b)>u:\junk.txt
würde die ersten 7 Zeilen von standardwaffle.txt
nach u:\junk.txt
extrahieren, so dass es sich hier um eine cmd
-Zeile handelt - aber ich würde Sie herausfordern, das zuverlässig einzugeben.
Es würde auch alle führenden :
in einer Quellzeile 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 Stapel, der als head.bat
an einem beliebigen Ort in Ihrem Pfad gespeichert wurde, könnte Sie verwenden
head -n standardwaffle.txt >junk.txt
die ersten n
-Zeilen von standardwaffle.txt
nach junk.txt
extrahieren
der -
wäre optional
aber dies beinhaltet die Installation des Stapels auf Ihrem Computer. Ist dies aufgrund Ihrer Anforderung "keine Installation" verboten, oder ist "Installation" nur für Dienstprogramme von Drittanbietern gedacht?
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
Dadurch werden die Zeilen 1 bis 5 gedruckt
cscript //nologo <path to script.vbs> <inputfile >outputfile
Führen Sie folgende Schritte in Powershell aus, um eine korrekte Ausgabe von utf8 zu erhalten
chcp 65001
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
get-content input.txt -encoding UTF8 |select-object -first 10000 > output.txt
Dadurch werden die ersten 10000 Zeilen input.txt (Datei im Format utf8) mit korrekter Kodierung in output.txt übertragen.
sie können dies verwenden:
break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb X /t |more +4 | findstr /B /E /V "*****"
wo Sie dasXdurch die gewünschten Zeilen ersetzen sollen. Oder nennen Sie diesen head.bat
:
break>"%temp%\empty"&&fc "%temp%\empty" "%file_to_process%" /lb %~1 /t |more +4 | findstr /B /E /V "*****"
Wenn Sie sich an einfache Windows-Befehle halten möchten, können Sie dies verwenden, wären aber für große Dateien etwas langsam ;-) (Ich habe eine zweite Lösung hinzugefügt, die besser funktioniert :-) Dadurch werden die letzten 100 Datensätze von beliebiger Länge extrahiert Datei)
find /n " " <test.txt >test.tmp
for /l %%i in (1,1,100) do find "[%%i]" <test.tmp >test.tmp2
for /f "delims=] tokens=2" %%i in (test.tmp2) do echo %%i >>test.new
del test.tmp
del test.tmp2
move /y test.new test.txt
find /v /n "" <test.txt >test.tmp
for /f "delims=: tokens=2 %%i in ('find /v /c "" test.txt') do set /a NR=%%i
set /a NS=%NR%-100
for /l %%i in (%NS%, 1, %NR%) do find "[%%i]" <test.tmp >>test.tmp2
for /f %%i "delims=] tokens=2 %%i in (test.tmp2) do echo %%i >>test.new
move /y test.new test.txt