windows - Kontroller, at en linje findes i en tekstfil eller ikke i cmd

Indlæg af Hanne Mølgaard Plasc

Problem



@echo off
set doit=false
if exist findstr /n . lla.txt | findstr ^j: set doit=true
if "\%doit\%"=="true" (
echo found
) else (
echo doelse
)


Hej allesammen
Jeg vil gerne tjekke linjer i en tekstfil
for eksempel hvis line3 findes i min tekstfil, så findes ekko
hvis ikke så ekko doelse


hvad er mit problem?

Bedste reference


For at se om lla.txt har mindst 3 linjer erstattet j med 3 og brug denne type struktur:


@Echo Off
(
    FindStr /N "^" "lla.txt" | FindStr "^j:" > Nul
) && (
    Echo Line Found
) || (
    Echo Line Not Found
)

Pause


Dette bruger betinget udførelse, hvorved:



  • && betyder i det væsentlige, om den foregående kommando/blok var
    succesfuld.
    (returnerede en 0 \%ErrorLevel\%)

  • || betyder hovedsagelig, om den foregående kommando/blok var
    mislykket.
    (returnerede en ikke 0 \%ErrorLevel\%)






Hvis lla.txt ikke kan findes, udsender den første FindStr en fejl og udfører kommandoerne i dine parenteser Line Not Found.


Hvis det er det du vil, kan du undertrykke fejlmeddelelsen ved at sende STDERR -udgangen til en NUL enhed som denne:


@Echo Off
(
    FindStr /N "^" "lla.txt" 2> Nul | FindStr "^j:" > Nul
) && (
    Echo Found
) || (
    Echo Line Not Found
)

Pause


Hvis du vil gøre noget anderledes i disse tilfælde, bør du bekræfte kildefilens eksistens først:


Dette bruger en If/Else struktur:


@Echo Off
If Exist "lla.txt" (
    (
        FindStr /N "^" "lla.txt" | FindStr "^j:" > Nul
    ) && (
        Echo Found
    ) || (
        Echo DoElse
    )
) Else (
    Echo No source file
)

Pause


Dette bruger en If, Echo es en meddelelse til 3 sekunder og Exit s


@Echo Off
If Not Exist "lla.txt" (
    Echo No source file
    Timeout /T 3 > Nul
    Exit /B
)

(
    FindStr /N "^" "lla.txt" | FindStr "^j:" > Nul
) && (
    Echo Line Found
) || (
    Echo Line Not Found
)

Pause