Lorsque je travaille dans un environnement Bash , pour définir la valeur d'une variable à la suite d'une commande, je fais généralement:
var=$(command -args)
où var
est la variable définie par la commande command -args
. Je peux ensuite accéder à cette variable en tant que $var
.
Une manière plus conventionnelle de faire ceci qui est compatible avec presque tous les shell Unix est:
set var=`command -args`
Cela dit, comment puis-je définir la valeur d'une variable avec le résultat d'une commande dans un fichier batch Windows ? J'ai essayé:
set var=command -args
Mais je trouve que var
c'est réglé sur command -args
plutôt que sur la sortie de la commande.
la source
for /f "delims=" %a in ('ver') do @set foobar=%a
sur l'invite de commande. utiliserfor /f "delims=" %%a in ('ver') do @set foobar=%%a
dans les fichiers de scriptbash
. Ensuite, vous pouvez écrire des commandes bash. Vous pouvez également exécuter des scripts bash.Il faut être un peu prudent, car la commande batch Windows:
n'a pas la même sémantique que l'instruction du shell Unix:
Considérez le cas où la commande échoue, provoquant une erreur.
Dans la version shell Unix, l'affectation à "theValue" se produit toujours, toute valeur précédente étant remplacée par une valeur vide.
Dans la version batch de Windows, c'est la commande "for" qui gère l'erreur, et la clause "do" n'est jamais atteinte - donc toute valeur précédente de "theValue" sera conservée.
Pour obtenir plus de sémantique de type Unix dans le script batch Windows, vous devez vous assurer que l'affectation a lieu:
Ne pas effacer la valeur de la variable lors de la conversion d'un script Unix en batch Windows peut être une cause d'erreurs subtiles.
la source
command
; par exemple:for /f "delims=" %%a in ('command1 ^| command2') do set VAR=%%a
.Voici comment procéder lorsque j'ai besoin des résultats d'une requête de base de données dans mon fichier de commandes:
La clé se trouve à la ligne 2: "set / p" définit la valeur de "result" sur la valeur de la première ligne (uniquement) dans "__query.tmp" via l'opérateur de redirection "<".
la source
La seule façon dont je l'ai vu est si vous faites ceci:
ver
est la commande de version pour Windows et sur mon système, elle produit:La source
la source
Documents officiels Microsoft pour la
for
commandela source