web-dev-qa-db-fra.com

Extraire N lignes du fichier en utilisant la commande Windows unique

Existe-t-il un moyen d'extraire/copier le premier nombre X de lignes d'un fichier et de les entrer dans un autre fichier avec une seule commande à l'aide de l'invite de commande Windows?

Je peux supprimer le premier nombre X de lignes en utilisant:
more + X [données contenant_fichiers]> [fichier_d'export_données_port]

Si la commande principale fonctionnait, je pense pouvoir faire ceci:
head -X [données contenant_fichier]> [file_to_export_data_to]

Mais cela ne fonctionne malheureusement pas.

Ce serait génial si Windows avait une commande "moins" mais encore une fois pas de chance. 

Je suis un novice complet dans ce domaine, alors je suis sûr qu'il me manque quelque chose d'évident. Je ne veux rien installer ou utiliser autre chose que la commande Invite.

Merci

9
user1769292

Vous pouvez utiliser PowerShell à partir de la console cmd.exe:

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

Vous pouvez créer une macro DOSKEY pour faciliter son utilisation à partir de la ligne de commande:

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

Usage:

head input.txt 10 >output.txt

Mais vous ne pouvez pas utiliser une macro DOSKEY dans un script batch.

Vous pouvez créer un script head.bat à la place et le placer dans un dossier inclus dans votre PATH:

head.bat

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

En ligne de commande, vous utiliseriez head input.txt 10 >output.txt

A partir d'un script batch, vous utiliseriez call head input.txt 10 >output.txt

J'ai choisi de ne pas utiliser le fichier de sortie comme paramètre si vous souhaitez simplement afficher le résultat à l'écran au lieu d'écrire dans un fichier.

16
dbenham

la solution la plus simple en une commande consiste à utiliser Powershell Get-Content.

N - nombre de lignes.

Depuis le début du fichier:

Get-Content -Head N file.txt

A partir de la fin du fichier:

Get-Content -Tail N file.txt
15
Janusz
(@FOR /f "tokens=1* delims=:" %a IN ('findstr /n "^" "standardwaffle.txt"') DO @IF %a leq 7 ECHO(%b)>u:\junk.txt

extrairait les 7 premières lignes de standardwaffle.txt à u:\junk.txt, le voici donc dans une ligne cmd - mais je vous défierais de le saisir de manière fiable.

Cela supprimerait également tout : en tête sur une ligne source.

@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

Ce lot, enregistré en tant que head.bat placé n'importe où sur votre chemin, vous permettrait d'utiliser

head -n standardwaffle.txt >junk.txt

extraire les premières lignes n de standardwaffle.txt dans junk.txt

le - serait optionnel

mais cela implique l'installation du lot sur votre machine. Est-ce que cela est interdit par votre exigence "pas d'installation", ou est-ce que "installer" ne concerne que des utilitaires tiers?

2
Magoo
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

Ceci imprime les lignes 1 à 5. Pour utiliser

cscript //nologo <path to script.vbs> <inputfile >outputfile
1
Serenity

Afin d’obtenir la sortie utf8 correcte, procédez comme suit dans Powershell

chcp 65001

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

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

Cela aura 10000 premières lignes de input.txt (fichier au format utf8) en output.txt avec le codage correct.

1
sdk

vous pouvez utiliser ceci:

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

où vous devez remplacer leXpar les lignes de votre choix. Ou nommez ce head.bat:

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