PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Envoie d'une commande au DOS (CMD)
Envoie d'une commande au DOS (CMD)
Débuté par Chronocoll_Bernard, 28 oct. 2025 11:39 - 3 réponses
Membre enregistré
7 messages
Posté le 28 octobre 2025 - 11:39
Bonjour les copains,
Je veux compter le nombre de lignes d'un très volumineux fichier (>> 4 MM lignes, au moins).
Je veux utiliser pour cela une instruction dos très simple et très rapide :
C:\Windows\System32\cmd.exe /u /c find /c /v "" + le chemin du fichier à analyser

Dans mon cas :
Str_LigneCommande = "C:\Windows\System32\cmd.exe /u /c find /c /v " + caract(34) + caract(34) + " " + Str_NomFichier

C'est l'instruction de lecture qui se passe mal, elle me donne une chaine de retour vide.

Str_Sortie est une chaîne = MaCommandeAExécuter.LitSortieStandard(Vrai)

Quelqu'un d'entre vous a t il déjà fait marcher un truc pareil ?

Je vous donne comme info sup que la ligne de commande qui est enregistrée dans la variable Str_LigneCommande, lorsque j'ouvre la console et que je l'exécute, elle me donne le bon résultat !

Microsoft Windows [version 10.0.26200.6901]
(c) Microsoft Corporation. Tous droits réservés.
C:\Users\Admin>C:\Windows\System32\cmd.exe /u /c find /c /v "" "R:\@prenoms-2023-dpt.csv"
---------- R:\@PRENOMS-2023-DPT.CSV: 3884324
C:\Users\Admin>

Str_Commande est une chaîne = "/u /c find /c /v " + Caract(34) + Caract(34) +" " + Caract(34) + Str_CheminFichier + Caract(34)
MaCommandeAExécuter est une Commande
// Exécutable à lancer
MaCommandeAExécuter.Exécutable = "C:\Windows\System32\cmd.exe"
MaCommandeAExécuter.Arguments = Str_Commande
// Activation des flux
MaCommandeAExécuter.Flux = cmdSortieStandard
// Exécution de la commande
Bool_Resultat = CmdExécute(MaCommandeAExécuter, Vrai)
SI Bool_Resultat ALORS
Str_Sortie est une chaîne = MaCommandeAExécuter.LitSortieStandard(Vrai)
SI (Str_Sortie<> "") ALORS
I_NbreLigne = Val(SansEspace(ExtraitChaîne(Str_Sortie, -1, ":")))
SINON
Info("Pas de ligne détectée par la fonction cmd")
FIN
SINON
Info("Erreur lors de l'exécution de la commande","cmd " + Str_Commande)
FIN
RENVOYER I_NbreLigne


Ici, Str_Sortie est toujours vide...... ;(

Un grand merci à vous d'avoir lu jusqu'ici !
Bernard
Membre enregistré
283 messages
Posté le 28 octobre 2025 - 14:08
Bonjour Bernard,

Essayes ceci... ça devrait fonctionner :
MaCommandeAExécuter est une Commande
I_NbreLigne est un entier
// Exécutable à lancer
MaCommandeAExécuter.Exécutable = "C:\Windows\System32\find.exe"
MaCommandeAExécuter.Arguments = "/c /v " + Caract(34) + Caract(34) +" " + Caract(34) + Str_CheminFichier + Caract(34)
// Activation des flux
MaCommandeAExécuter.Flux = cmdSortieStandard
// Exécution de la commande
Bool_Resultat est un booléen = cmdExecute(MaCommandeAExécuter, Vrai)
SI Bool_Resultat ALORS
Str_Sortie est une chaîne = MaCommandeAExécuter.LitSortieStandard(Vrai)
SI (Str_Sortie<> "") ALORS
I_NbreLigne = Val(SansEspace(ExtraitChaîne(Str_Sortie, rangDernier, ":")))
SINON
Info("Pas de ligne détectée par la fonction cmd")
FIN
SINON
Info("Erreur lors de l'exécution de la commande")
FIN
RENVOYER I_NbreLigne


Cdlt
Fabrice
Membre enregistré
7 messages
Posté le 28 octobre 2025 - 14:49
Fabrice N a écrit :
Bonjour Bernard,

................................
Cdlt
Fabrice


Merci beaucoup, Fabrice, ca fonctionne effectivement parfaitement, j'ai le bon nombre de lignes qui remonte.
C'est mon instruction
MaCommandeAExécuter.LitSortieStandard(Vrai)

Qui était mal écrite....
Au plaisir !
Membre enregistré
131 messages
Posté le 29 octobre 2025 - 09:58
Chronocoll_Bernard a écrit :
C'est mon instruction
MaCommandeAExécuter.LitSortieStandard(Vrai)
Qui était mal écrite....


heu non, c'est ton exécutable qui n'était pas le bon. Tu avais mis cmd.exe au lieu de find.exe