Est-il possible de définir la sortie d'une instruction d'un fichier batch sur une variable, par exemple:
findstr testing > %VARIABLE%
echo %VARIABLE%
windows
batch-file
Dennis
la source
la source
Réponses:
J'utilise toujours USEBACKQ pour que si vous avez une chaîne à insérer ou un nom de fichier long, vous pouvez utiliser vos guillemets doubles sans visser la commande.
Maintenant, si votre sortie contient plusieurs lignes, vous pouvez le faire
la source
ENABLEDELAYEDEXPANSION
|
auquel cas cela ne fonctionne pas.^|
à la place de|
, comme décrit icicommand
toute façon, s'il vous plaît? Je suis sûr qu'il retourne un code non nul mais%ERRORLEVEL%
contient toujours 0, peu importe où j'essaye de l'utiliser (même à l'intérieur dudo
bloc). Donc, je suppose qu'une partie de cettefor
construction la remplace. BTW Il est incroyable de voir à quel point un code fou est nécessaire pour quelque chose d'aussi élémentaire.J'ai trouvé ce fil sur ce truc Interweb. Se résume à:
Vous pouvez également rediriger la sortie d'une commande vers un fichier temporaire, puis placer le contenu de ce fichier temporaire dans votre variable, comme ici. Cependant, cela ne fonctionne pas avec une entrée multiligne.
Crédits au thread sur Tom's Hardware.
la source
en une seule ligne:
la sortie de la commande sera définie en% g puis en VAR.
Plus d'informations: https://ss64.com/nt/for_cmd.html
la source
Pour lire un fichier ...
Pour écrire un fichier
Remarque; avoir des espaces avant le caractère <> entraîne l'ajout d'un espace à la fin de la variable, également
Pour ajouter à un fichier, comme un programme d'enregistrement, commencez par créer un fichier avec une seule touche d'entrée appelée e.txt
votre journal ressemblera à ceci
etc
Quoi qu'il en soit, quelques choses utiles
la source
Ces réponses étaient toutes si proches de la réponse dont j'avais besoin. C'est une tentative de les développer.
Dans un fichier batch
Si vous exécutez à partir d'un
.bat
fichier et que vous voulez une seule ligne qui vous permet d'exporter une commande compliquée commejq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
vers une variable nommée,AWS_ACCESS_KEY
vous voulez ceci:Sur la ligne de commande
Si vous êtes à l'
C:\
invite, vous voulez une seule ligne qui vous permet d'exécuter une commande compliquée commejq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
une variable nommée,AWS_ACCESS_KEY
alors vous voulez ceci:Explication
La seule différence entre les deux réponses ci-dessus est que sur la ligne de commande, vous utilisez un seul% dans votre variable. Dans un fichier batch, vous devez doubler sur les signes de pourcentage (%%).
Étant donné que la commande comprend des deux-points, des guillemets et des parenthèses, vous devez inclure la
USEBACKQ
ligne dans les options afin de pouvoir utiliser des guillemets arrière pour spécifier la commande à exécuter, puis toutes sortes de caractères amusants à l'intérieur.la source
Si vous ne voulez pas sortir dans un fichier temporaire puis lire dans une variable, ce code stocke le résultat de la commande directement dans une variable:
Si vous souhaitez mettre la chaîne de recherche entre guillemets:
Si vous souhaitez stocker ce code dans un fichier batch, ajoutez un symbole% supplémentaire:
Un exemple utile pour compter le nombre de fichiers dans un répertoire et stocker dans une variable: (illustre la tuyauterie)
Notez l'utilisation de guillemets simples au lieu de guillemets doubles "ou d'accent grave" dans les crochets de commande. C'est une alternative plus propre à
delims
,tokens
ouusebackq
enfor
boucle.Testé sur Win 10 CMD.
la source
la source
appcmd
n'est pas un programme standard et je ne vois pas où vous affectez la sortie du programme à une variable. Enfin, vous avez besoin de plus d'explicationsJe l'ai testé comme ça et ça a fonctionné:
En canalisant la commande dans une variable, l'invite insérera le résultat de la commande "
Cmd
" dans la variable "Var
".Mettre à jour:
Cela ne fonctionne pas, mon mauvais, le script que j'ai fait était le suivant:
Il montrait en fait disons "
test.txt
", mais il montrait en fait le résultat de la "dir /b *.txt
" commande, pas leecho %var%
. J'ai été confus car les deux sorties étaient les mêmes.la source
pipe the command into a variable prompt
vous devriez l'avoir écritdir /b *.txt | SET /P Var=
pour obtenir la bonne direction de votre tuyau. PS: ça ne marche pas non plus!J'espère que cette aide
la source