Mon fichier texte comprend 23 lignes (les lignes incluent:! @ $: /; ")

Comment puis-je afficher uniquement la ligne 3? dans ou 7? ou 19?

J'ai essayé toutes les commandes étaient dans stackoverflow

Exemple:

setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (mytext.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))

C'est seulement montrer la première ligne

4
Alexander 23 mai 2018 à 17:46

4 réponses

Meilleure réponse

@Compo a donné une bonne réponse. C'est seulement pour l'expliquer. L'utilisation d'alias comme GC ne doit pas être placée dans des scripts. Sur la ligne de commande, bien sûr, allez-y et réduisez la saisie si vous en avez envie. En outre, l'épellation des noms de paramètres fournit plus d'informations et facilite la compréhension.

Pour obtenir uniquement la ligne 3.

GC .\mytext.txt -T 3|Select -L 1

Get-Content -Path '.\mytext.txt' -TotalCount 3 | Select-Object -Last 1

Depuis la console CMD (invite de commande): (pour obtenir uniquement la ligne sept (7)

PowerShell "GC .\mytext.txt -T 7|Select -L 1"

PowerShell -NoProfile "Get-Content -Path '.\mytext.txt' -TotalCount 7 | Select-Object -Last 1"

Pour obtenir les lignes 3 à 7:

$FirstLine = 3
$LastLine=7
powershell -NoProfile -Command "Get-Content -Path '.\t.txt' -TotalCount $LastLine | Select-Object -Last ($LastLine - $FirstLine + 1)"

Ou, dans un script batch cmd.exe.

SET "FIRSTLINE=3"
SET "LASTLINE=7"
powershell -NoProfile -Command ^
    "Get-Content -Path '.\t.txt' -TotalCount %LASTLINE% |" ^
        "Select-Object -Last (%LASTLINE% - %FIRSTLINE% + 1)"
5
lit 24 mai 2018 à 15:35

Il y a plusieurs façons de faire ça. Votre première option est de passer par la boucle for normalement et de sortir de la boucle une fois que vous avez atteint la ligne souhaitée.

@echo off

:: Specify which line to return
set get_line=7

:: Skip all lines before it, then print the next line and abort
set /a get_line-=1
for /F "skip=%get_line% delims=" %%A in (mytext.txt) do (
    echo %%A
    goto :end_loop
)

:end_loop

Votre autre option est de stocker toutes les lignes avant la ligne indésirable dans une variable temporaire, puis d'afficher la ligne suivante.

@echo off
setlocal enabledelayedexpansion

:: Specify which line to return
set get_line=7

:: Skip all lines before it, then print the next line and abort
set /a get_line-=2

(
    for /L %%A in (0,1,%get_line%) do set /p skip_line=
    set /p return_line=
) <file.txt

echo !return_line!

Notez que la première option n'est pas adaptée pour renvoyer la première ligne du script.

1
SomethingDark 23 mai 2018 à 15:25

Puisque vous avez dit "afficher", pourquoi ne pas essayer PowerShell:

Depuis la console PowerShell:

GC .\mytext.txt -T 3|Select -L 1

Depuis la console CMD (Invite de commande) :

PowerShell "GC .\mytext.txt -T 7|Select -L 1"

À partir d'un fichier batch:

@(PowerShell "GC .\mytext.txt -T 19|Select -L 1"&Pause)
0
Compo 23 mai 2018 à 15:53
@echo off
setlocal
set "FILE_TO_PROCESS=%~f1"
set /a LINE_NUMBER=%~2
set /a trim=LINE_NUMBER-1

break>"%temp%\empty"&&fc "%temp%\empty" "%FILE_TO_PROCESS%" /lb  %LINE_NUMBER% /t |more +4 | findstr /B /E /V "*****"|more +%trim%
endlocal

Essayez avec cette batte (appelée lineNumber.bat) le premier argument est le fichier que vous voulez traiter le second est le numéro de ligne:

call lineNumber.bat someFile.txt 5
1
npocmaka 23 mai 2018 à 15:28