De FIND-opdracht
Om te zoeken naar tekst in meerdere bestanden vanaf de Windows-opdrachtprompt of batchbestanden, kunt u de FIND opdracht gebruiken, die bestaat sinds de dagen van MS DOS en nog steeds beschikbaar is in Windows 11. Het lijkt op de Unix grep
opdracht, maar ondersteunt geen reguliere expressies. Als u de woord borogoves
in de huidige map wilt zoeken, volg dan deze syntaxis:
find "borogoves" *
Let op dat de dubbele aanhalingstekens rond het patroon verplicht zijn. Als u PowerShell gebruikt, moet u ook enkele aanhalingstekens opnemen:
find '"borogoves"' *
In plaats van de asterisk (*
), kunt u een bestandsmasker specificeren zoals *.htm?
. De find
opdracht toont de namen van de bestanden die het scant, zelfs als er geen overeenkomsten in deze bestanden worden gevonden:
De zoekopdracht is standaard hoofdlettergevoelig, dus u hebt meestal de /I
schakelaar nodig om hoofdletters en kleine letters als equivalent te behandelen:
find /I "<a href=" *.htm
Als u het bestand waarin moet worden gezocht niet specificeert, zal find
wachten op tekstinput van stdin, zodat u output van een andere opdracht kunt pipen. Bijvoorbeeld, u kunt alle kopieeropdrachten die in Windows worden ondersteund weergeven:
help | find /i "copy"
Een andere schakelaar, /V
, stelt u in staat om alle regels te vinden die het patroon niet bevatten, vergelijkbaar met de grep -v
opdracht.
In batchbestanden, kunt u gebruik maken van het feit dat de find
opdracht de uitvoercode (errorlevel) instelt op 1 als het patroon niet wordt gevonden. Bijvoorbeeld, u kunt controleren of de machine een 64-bits of 32-bits versie van Windows uitvoert:
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
De FINDSTR-opdracht: Zoeken met reguliere expressie
Als u een reguliere expressie wilt vinden, probeer dan de FINDSTR
-opdracht, die geïntroduceerd werd in Windows XP. Vanwege historische redenen, ondersteunt findstr
een beperkt deel van reguliere expressies, dus u kunt alleen deze regex-functies gebruiken:
- De punt
.
komt overeen met elk teken behalve nieuwe regel en uitgebreide ASCII-tekens. - Tekenlijsten
[abc]
komen overeen met een van de opgegeven tekens (a
,b
, ofc
). - Tekenlijstbereiken
[a-z]
komen overeen met elk letter uita
totz
. - De asterisk (
*
) geeft aan dat het vorige teken nul of meer keer herhaald kan worden. - De symbolen
\<
en\>
markeren het begin en het einde van een woord. - De caret (
^
) en de dollar-teken ($
) duiden het begin en het einde van een regel aan. - De backslash (
\
) ontslaat elk metateken, waardoor u letterlijke tekens kunt vinden. Bijvoorbeeld,\$
vindt het dollarteken zelf.
Findstr ondersteunt geen tekenklassen (\d
), alternatieven (|
), of andere herhalingen (+
of {5}
).
De basissyntaxis is dezelfde als voor de FIND
opdracht:
findstr "\<20[0-9][0-9]\>" *.htm
Deze opdracht vindt alle jaren die beginnen met 2000 in de .htm
bestanden van de huidige map. Net als bij find
, gebruik de /I
schakelaar voor een hoofdletterongevoelige zoekopdracht:
FINDSTR Beperkingen en Eigenaardigheden
Karakterlijsten [a-z]
zijn altijd hoofdletterongevoelig, dus echo ABC | findstr "[a-z]"
matcht.
Het spatie karakter werkt als het alternatiewe meta-karakter in findstr
, dus een zoekquery zoals findstr "new shoes" *
zal alle regels vinden die ofwel new
of shoes
bevatten. Helaas is er geen manier om de spatie te ontsnappen en het als een letterlijk karakter in een reguliere expressie te gebruiken. Bijvoorbeeld, je kunt geen regels vinden die beginnen met een spatie.
Syntaxisfouten in reguliere expressie worden genegeerd. Bijvoorbeeld, findstr "[" *
zal alle regels matchen die het [
karakter bevatten.
Als het bestand Unix-regeloverbruggingen (LF) bevat, werkt het $
meta-karakter niet correct. Als de laatste regel van een bestand geen regelterminator mist, zal findstr
het niet kunnen vinden. Bijvoorbeeld, findstr "</html>$" *
werkt niet als er geen CR+LF na </html> is.
Vroege Windows-versies hadden beperkingen voor de lijnlengte voor find
en findstr
, evenals voor andere opdrachten. De recente versies hebben deze beperkingen opgeheven, dus je hoeft er niet meer zorgen over te maken. Zie deze StackOverflow-vraag voor findstr
-beperkingen en -bugs, met name in vroege Windows-versies.
De findstr-opdracht werkt in de OEM (MS DOS)-codepagina; het punt-metacharacter komt niet overeen met een van de uitgebreide ASCII-karakters. Hierdoor is de opdracht niet erg nuttig voor niet-Engelse tekst. Bovendien kun je niet zoeken naar Unicode-karakters (UTF-8 of UTF-16).
Conclusie
Je kunt meer over andere schakelaars leren door findstr /?
of find /?
in te typen. Bijvoorbeeld, de extra schakelaars stellen je in staat om in submappen te zoeken of regelnummers af te drukken. Je kunt ook verwijzen naar de officiële documentatie.
Over het algemeen zijn de find
en findstr
opdrachten verouderd en komen ze met verschillende eigenaardigheden en beperkingen.
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt