Utilisez find pour retourner uniquement le nombre

J’ai un processus externe qui doit essentiellement appeler:

int myInt = exec('find /v /c "" filepath'); 

Il compte le nombre de lignes dans un fichier texte. S’il existe un meilleur moyen d’obtenir le nombre entier, cela fonctionne également très bien.

Avec find, la commande full renvoie un nombre important d’informations autres que le compte, par exemple, elle renvoie des tirets pour chaque occurrence, le nom du fichier, puis: 10.

Alors:

 ---------- filepath :10 

Est-il possible de faire que find ne retourne que la partie entière? Ou dois-je transférer cette sortie dans un autre processus (similaire à grep sur unix)?

find donne la sortie ---------- file.txt :10 lorsque vous travaillez avec des fichiers. S’il traite STDIN, il ne vous donne que le numéro:

 find /v /c ""  

pour obtenir cette sortie dans une variable, utilisez ceci for Statement:

 for /f %%i in ('find /v /c "" ^ 

(pour une utilisation sur la ligne de commande, utilisez single %i au lieu de %%i )

Je pense que vous devrez redirect les résultats de la find vers un autre utilitaire tel que findstr 2 .

Raison d’être: L’option / C Displays only the count of lines containing the ssortingng. .

Selon le filepath d’ filepath recherche filepath vous fournissez, plusieurs entrées peuvent être filepath . Pour vous assurer que les résultats sont significatifs, find doit vous fournir le filepath du filepath afin de vous fournir le contexte approprié.

Donc, vous voudriez émettre quelque chose comme:

 int myInt = exec('find /v /c "" 'filepath' | findstr /r ': [0-9]*'); 

1 S’il vous plaît noter: je n’ai pas validé que regex dans findstr fonctionnera.
2 Apparemment, findstr renvoie également la ligne entière, vous devrez donc trouver une commande différente.

Vous pouvez le faire en utilisant cette syntaxe:

 type filepath | find /c /v "" 

Source originale ici .

 type filepath 

renvoie les lignes du fichier, tout en

 find /c /v "" 

renvoie le nombre d’entre eux (apparemment, le terme de recherche “” est une fonctionnalité de bogue de la recherche vous permettant de compter les lignes).

Vous pouvez essayer de remplacer la partie de find /v /c "" filepath par la ligne de commande suivante:

 cmd /V:ON /C "for /F "delims=" %L in ('find /V /C "" "filepath"') do set "LINE=%L" & echo LINE=!LINE:*: =!" 

Ou vous créez un fichier de commandes, par exemple line_cnt.bat , avec le code similaire suivant, que vous appelez à la place de votre ligne de commande de find :

 @echo off setlocal EnableDelayedExpansion for /F "delims=" %%L in (' find /V /C "" "filepath" ') do ( set "LINE=%%L" echo !LINE:*: =! ) endlocal 

Pour que cela fonctionne, vous devez soit le placer dans le répertoire de travail approprié de votre processus, appeler line_cnt.bat utilisant son chemin complet, soit inclure son répertoire contenant dans le PATH de recherche de votre système.

Cela fonctionne pour moi sur Windows 7:

type pretty-print-example.R |\windows\system32\find.exe /i /v /c ""

la sortie est juste le nombre de lignes, 82