J'ai besoin d'assigner la sortie d'un programme à une variable à l'aide d'un fichier batch MS.
Donc, dans le shell GNU Bash, j'utiliserais VAR=$(application arg0 arg1)
. J'ai besoin d'un comportement similaire dans Windows en utilisant un fichier batch.
Quelque chose comme set VAR=application arg0 arg1
.
batch-file
cmd
variable-assignment
windows-console
initialZero
la source
la source
for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
En plus de cette réponse précédente , les tuyaux peuvent être utilisés dans une instruction for, échappés par un symbole caret:
la source
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
mais en général, leusebackq
devrait être utilisé pour gérer des commandes complexes.for /f "tokens=*" %%i in ('"tasklist | grep explorer"') do set VAR=%%i
. Plus facile pour moi s'il n'y a pas de guillemets dans la commande elle-même.@OP, vous pouvez utiliser des boucles for pour capturer l'état de retour de votre programme, s'il génère autre chose que des nombres
la source
en supposant que la sortie de votre application est un code de retour numérique, vous pouvez effectuer les opérations suivantes
la source
Lors de l'exécution:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
j'obtenais une erreur: %% j'étais inattendu à ce moment. Comme correctif, j'ai dû exécuter ci-dessus commefor /f %i in ('application arg0 arg1') do set VAR=%i
la source
%%
et en dehors d'un fichier batch sur une ligne de commande dont vous avez besoin%
En plus de la réponse, vous ne pouvez pas utiliser directement les opérateurs de redirection de sortie dans la partie définie de la
for
boucle (par exemple, si vous souhaitez masquer la sortie stderror d'un utilisateur et fournir un message d'erreur plus agréable). Au lieu de cela, vous devez leur échapper avec un caractère caret (^
):Référence: rediriger la sortie de la commande dans la boucle du script de commandes
la source
la source
Vous pouvez utiliser une macro batch pour une capture simple des sorties de commande, un peu comme le comportement du shell bash.
L'utilisation de la macro est simple et ressemble à
Et cela fonctionne même avec des tuyaux
La macro utilise la variable comme un tableau et stocke chaque ligne dans un index séparé.
Dans l'exemple de
%$set% allDrives="wmic logicaldisk
, les variables suivantes seront créées:Pour l'utiliser, il n'est pas important de comprendre comment fonctionne la macro elle-même.
L'exemple complet
la source
J'ai écrit le script qui interroge google.com toutes les 5 secondes et enregistre les résultats avec l'heure actuelle. Ici vous pouvez trouver la sortie des variables "commandLineStr" (avec index)
la source