OVH Cloud OVH Cloud

*SET /A et opération imbriquée*

2 réponses
Avatar
Daniel92
*Bonsoir*!

Dans un fichier de commande d'extension .BAT

1) Set /A: je cherche à faire une opération imbriquée
résultat= (valeur - valeur1) divisé par 60

j'ai essayé :

SET /A ti2=(%tin%-%ti1%)/60
SET /A ti2=((%tin%-%ti1%) / 60)
SET /A ti2=(%tin%-%ti1%) / 60)
===> erratum / était inattendu.

et également via le Help Microsoft pour SET /A :
< > Groupement
<< >> Décalage logique
& ET au niveau du bit
^ OU exclusif au niveau du bit
| OU au niveau du bit
, Séparateur d'expression

SET /A ti2=<%tin%-%ti1%> / 60
=> ce qui me donne le message douteux suivant :
Le fichier spécifié est introuvable.

* Merci de m'indiquer des exemples si vous en avez pour
Groupement , Décalage logique, ET , OU exclusif , OU ,
Séparateur d'expression ?

Je ne connaîs pour l'instant que non 0 qui donne 1 grâce
à Jean-Claude avec l'Opérateur "!" non répertorié dans
le tableau :

> p.ex. :
> set /A valeur=!0
> echo %valeur%
> 1


2) Peut-on en ligne de commandes faire un ECHO direct
de la valeur Hexa d'un caractère et peut-on obtenir cette
valeur Hexa du caractère par SET ou une autre commande ?
à moins qu'avec charmap en ligne de commande... ?

Merci,
Daniel.
====

2 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news: ,
Daniel92 s'est ainsi exprimé:


Dans un fichier de commande d'extension .BAT

1) Set /A: je cherche à faire une opération imbriquée
résultat= (valeur - valeur1) divisé par 60

j'ai essayé :

SET /A ti2=(%tin%-%ti1%)/60
SET /A ti2=((%tin%-%ti1%) / 60)
SET /A ti2=(%tin%-%ti1%) / 60)
===> erratum / était inattendu.


???????
Je viens de le faire à l'instant :

C:WINDOWSsystem32>set tin 0
C:WINDOWSsystem32>set ti1
C:WINDOWSsystem32>set /A ti2=(%tin%-%ti1%)/60
3
C:WINDOWSsystem32>SET /A ti2=((%tin%-%ti1%) / 60)
3
Çà marche très bien !
(ta dernière ligne "SET /A ti2=(%tin%-%ti1%) / 60)" est invalide car il
manque ou il y a en trop une paraenthèse)



et également via le Help Microsoft pour SET /A :
< > Groupement
Pardon ?????

C'est une version boldomalvaque de Windows que tu possèdes ? ;-)

Chez moi :
[...] L'évaluation de l'expression est assez simple et prend
en charge les opérations suivantes dans l'ordre décroissant
de préséance :

() - groupement
...
<< >> - décalage logique

Le signe de groupement a toujours été la PARENTHÈSE , et non pas < ou >

[...]
SET /A ti2=<%tin%-%ti1%> / 60
=> ce qui me donne le message douteux suivant :
Le fichier spécifié est introuvable.


Pas douteux du tout !
Mais parfaitement NORMAL !
Les caractères "<" et ">" sont les symboles de REDIRECTION des flux stdin et
stdout !
La sous-chaine
... <%tin% ...
est interprétée comme
... lire le contnu du fichier %tin%
!!!

Si on veut écrire un caractère "<" ou ">" , il faut le faire précéder de "^"
Exemple :
Echo Le caractère ^> redirige la sortie vers un fichier

Car si on écrivait :
Echo Le caractère > redirige la sortie vers un fichier
cela provoquerait la création du fichier "redirige" qui contiendrait "Le
caractère "



* Merci de m'indiquer des exemples si vous en avez pour
Groupement , Décalage logique, ET , OU exclusif , OU ,
Séparateur d'expression ?


Je parie que tu n'as pas lu cette ligne FONDAMENTALE :
"[...]
Si vous utilisez des opérateurs logiques ou des nombres,
vous devez mettre l'expression entre guillemets.
[...]"

P.ex., si on veut procédéer à un décalage :

set /A ti3="%ti2%<<2"
12

3 = 0011 en binaire
si on décale de 2 positions vers la gauche -> 1100
et 1100 en binaire = 12 en décimal !
CQFD ..


[...]
2) Peut-on en ligne de commandes faire un ECHO direct
de la valeur Hexa d'un caractère et peut-on obtenir cette
valeur Hexa du caractère par SET ou une autre commande ?


Non, il n'existe pas de commande de conversion analogue à ASC ou CHR en VB
(ou VBS)
Si tu as besoin de ce genre de choses, autant passer directement à VBS !


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*

Avatar
Daniel92
*Bonjour*!

Jean-Claude BELLAMY nous dit dans :
http://groups.google.com/groups?threadm=eGpOH9vDFHA.4020%40TK2MSFTNGP14.phx.gbl

: > Dans un fichier de commande d'extension .BAT
: >
: > 1) Set /A: je cherche à faire une opération imbriquée
: > résultat= (valeur - valeur1) divisé par 60
: >
: > j'ai essayé :
: >
: > SET /A ti2=(%tin%-%ti1%)/60
: > SET /A ti2=((%tin%-%ti1%) / 60)
: > SET /A ti2=(%tin%-%ti1%) / 60)
: > ===> erratum / était inattendu.

: ???????
: Je viens de le faire à l'instant :
:
: C:WINDOWSsystem32>set tin 0
: C:WINDOWSsystem32>set ti1
: C:WINDOWSsystem32>set /A ti2=(%tin%-%ti1%)/60
: 3
: C:WINDOWSsystem32>SET /A ti2=((%tin%-%ti1%) / 60)
: 3
: Çà marche très bien !
: (ta dernière ligne "SET /A ti2=(%tin%-%ti1%) / 60)" est invalide car il
: manque ou il y a en trop une parenthèse)

** Je sais d'où cela vient, je les avais essayées avec cette syntaxe:
(set /A ti2=(%tin%-%ti1%)/60)
(set /A tidu=(%tin%-%ti1%-%ti2%) / 60)
set ti

* en les reprenant de ceci ... on sait jamais au cas où ... ça marche :
SET tin1=(set /A ti1=%tin%/3600):(set /A ti2=%tin%/60)
après j'ai décliné en oubliant de retirer les parenthèses.
* J'ai aussi expérimenté l' Octal ... sans le vouloir.


: > et également via le Help Microsoft pour SET /A :
: > < > Groupement
: Pardon ?????
: C'est une version boldomalvaque de Windows que tu possèdes ? ;-)
:
: Chez moi :
: [...] L'évaluation de l'expression est assez simple et prend
: en charge les opérations suivantes dans l'ordre décroissant
: de préséance :
:
: () - groupement
: ...
: << >> - décalage logique
:
: Le signe de groupement a toujours été la PARENTHÈSE , et non pas < ou >

** Le rédacteur de chez Ms, boldomalvaque de surcroît,
a dû avoir son chat qui passait sur le clavier au moment de
l'écriture de la page de nos ordinateurs :

HH ntcmds.chm::/set.htm
(à mettre où tu veux sauf la Barre d'adresses)

: > [...]
: > SET /A ti2=<%tin%-%ti1%> / 60
: > => ce qui me donne le message douteux suivant :
: > Le fichier spécifié est introuvable.
:
: Pas douteux du tout ! Mais parfaitement NORMAL !

** j'ai oublié de rajouter ... par rapport au résultat escompté.
J'avoue avoir un petit peu serré la partie postérieure charnue
de mon anatomie en essayant le batch ... du fait des symbôles
de redirection que tu expliques en dessous.

: Les caractères "<" et ">" sont les symboles de REDIRECTION
: des flux stdin et stdout !
: La sous-chaine
: ... <%tin% ...
: est interprétée comme
: ... lire le contnu du fichier %tin%
: !!!

** et oui, il a même essayé de créer un fichier "/ 60"


: Si on veut écrire un caractère "<" ou ">" , il faut le faire précéder de "^"
: Exemple :
: Echo Le caractère ^> redirige la sortie vers un fichier
:
: Car si on écrivait :
: Echo Le caractère > redirige la sortie vers un fichier
: cela provoquerait la création du fichier "redirige" qui contiendrait "Le
: caractère "

** J'ai expérimenté aussi ... On ne rigole pas!

: > * Merci de m'indiquer des exemples si vous en avez pour
: > Groupement , Décalage logique, ET , OU exclusif , OU ,
: > Séparateur d'expression ?

: Je parie que tu n'as pas lu cette ligne FONDAMENTALE :
: "[...]
: Si vous utilisez des opérateurs logiques ou des nombres,
: vous devez mettre l'expression entre guillemets.
: [...]"
:
: P.ex., si on veut procédéer à un décalage :
:
: set /A ti3="%ti2%<<2"
: 12
:
: 3 = 0011 en binaire
: si on décale de 2 positions vers la gauche -> 1100
: et 1100 en binaire = 12 en décimal !
: CQFD ..

** Chi, mais il m'arrive de ... ne pas tout comprendre. Merci,
je vais pouvoir refaire des booléennes.

: > [...]
: > 2) Peut-on en ligne de commandes faire un ECHO direct
: > de la valeur Hexa d'un caractère et peut-on obtenir cette
: > valeur Hexa du caractère par SET ou une autre commande ?

: Non, il n'existe pas de commande de conversion analogue
: à ASC ou CHR en VB (ou VBS)
: ...[...]... , autant passer directement à VBS !

** Alors ma bidouille, j'avais dû la faire en Basic, en fait je
voulais descendre ou remonter dans les lignes de l'Invite
avec 0x12 et 0x10 , je ne me souviens plus de ce que fait
0x14 le FF ?
( http://worldserver3.oleane.com/tthomas/jeucar.html )

** Un petit entête de batch :
echo Test du batch (%~n0%~x0) # le %date% , il est %time:~0,8% #
echo du Repertoire: & echo ("%~p0") & echo.

Merci Jean-Claude,
Daniel.
====