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
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.
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
(@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?
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
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.
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 "*****"