Arrondir un nombre au centième BATCH

Fermé
Marks - 17 oct. 2022 à 11:41
brucine Messages postés 14311 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 25 avril 2024 - 17 oct. 2022 à 14:06

Bonjour,

j'aurais besoin d'aide pour arrondir une valeur récupérer en 100 000 et arrondir cette valeur en 100. 

C'est pour un script .bat automatiser qui récupère les 3 processus qui consomment le plus de mémoire ainsi que la mémoire consommer. Cet arrondie me permettrais de pouvoir comparer cette valeur avec une autre valeur avec des conditions. 

Merci d'avance. 

Voici le code en question : 

@echo off
setlocal enableDelayedExpansion
SET CMK_VERSION = "2.0.0p21"

SET count=1
FOR /F "tokens=1 USEBACKQ delims= " %%a IN (`tasklist /NH ^| SORT /r /+58 ^| find /N " " ^| findstr /r \[[0-3]\]`) DO (
  SET processus!count!=%%a
  SET /a count=!count!+1
)

SET count=1
FOR /F "USEBACKQ tokens=5 delims= " %%a IN (`tasklist /NH ^| SORT /r /+58 ^| find /n " " ^| findstr /r \[[0-3]\]`) DO (
  SET memoire!count!=%%a
  SET /a count=!count!+1
)

IF !memoire1! GTR 600 (GOTO :WARN) ELSE (GOTO :OK)

:WARN
SET status=1
SET resultat=Attention, le processus !processus1! utilise beaucoup de mémoire avec !memoire1! Mo
goto EXIT

:OK
SET status=0
SET resultat=Les processus qui consomment le plus de memoire sont !processus1!, !processus2! et !processus3! utilisant !memoire1!, !memoire2! et !memoire3! Mo
goto EXIT

En sortie, ce script renvoie la valeur en de mémoire utiliser au format "100 000" et cette espace au milieu gène l'affichage sur un outil de supervision. Donc in faudrait que j'arrive à mettre la valeur renvoyé avec un nombre à 3 chiffres et non 3 + 3 séparé par un espace. 
Windows / Edge 104.0.1293.81

A voir également:

1 réponse

brucine Messages postés 14311 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 25 avril 2024 1 812
17 oct. 2022 à 12:15

Bonjour,

En rajoutant après la déclaration de la variable mémoire une diminution de sa taille?

SET/A "memoire!count!=%memoire!count!:~0,3%"

mais qui va poser problème si tous les résultats attendus ne sont pas à 6 chiffres, puisque par exemple 1000, 100 000 et
1 000 000 vont toujours valoir 100 et qu'il faudrait alors tester la taille de cette variable et tenir compte le cas échéant d'un caractère supplémentaire (l'espace).

0

Bonjour,

Merci pour ta réponse mais en faisant cela, j'obtiens -1 comme valeur pour le variable !memoire!count!

Ce que je cherche c'est qu'en exécutant ce script, il récupère les valeurs de Task Manager qui sont en Ko donc XXX XXX Ko et je voudrais juste récupérer les 3 premiers chiffres.

C'est pas un problème si les résultats attendus ne sont pas à 6 chiffres car ici je recherche simplement la plus grandes valeurs parmi les 3 pour ensuite l'afficher. 

En laissant mon code comme là haut, en ajoutant /A devant la variable !memoire!count! j'obtiens "Opérateur manquant" pour la récupération de la mémoire.  

0
brucine Messages postés 14311 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 25 avril 2024 1 812
Modifié le 17 oct. 2022 à 13:18

Pour la première partie, j'ai été un peu expéditif; pour limiter le résultat à 3 chiffres, il faut sortir de la boucle:

FOR /F "USEBACKQ tokens=5 delims= " %%a IN (`tasklist /NH ^| SORT /r /+58 ^| find /n " " ^| findstr /r \[[0-3]\]`) DO (
  SET memoire!count!=%%a
  SET /a count=!count!+1
)

SET/A "memoire1=%memoire1:~0,3%"
echo %memoire1%

0
Marks > brucine Messages postés 14311 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 25 avril 2024
17 oct. 2022 à 13:26

Du coup maintenant cela fonctionne bien, je vais juste refaire une boucle pour memoire2 et memoire3. 

Merci beaucoup pour ton aide et bonne journée. 

0
brucine Messages postés 14311 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 25 avril 2024 1 812 > Marks
17 oct. 2022 à 14:06

Il faut rester en dehors de la boucle et écrire 2 lignes à suivre SET/A pour memoire2 et memoire3 avant de sortir ton résultat via ECHO ou SET et qui n'ont en principe pas besoin d'être en variable retardée: %memoire1% ou %processus2% suffisent.

Le fait d'écrire Mo derrière entraîne une erreur d'approximation pouvant aller jusqu'à 999 Ko, mais j'imagine que tu n'es pas à ça près.

0