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