Lot équivalent de Bash contre-apostrophes
-
03-10-2019 - |
Question
Lorsque vous travaillez avec Bash, je peux mettre la sortie d'une commande dans une autre commande comme ceci:
my_command `echo Test`
serait la même chose que
my_command Test
(De toute évidence, cela est juste un exemple non pratique.)
Je me demande si vous pouvez faire la même chose dans le lot.
La solution
Vous pouvez le faire en redirigeant la sortie vers un fichier. Par exemple:
echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
Autres conseils
Vous pouvez obtenir une fonctionnalité similaire en utilisant des scripts cmd.exe avec la commande for /f
:
for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a
Oui, il est un peu non évidente (pour le moins), mais il est ce qui est là.
Voir for /?
pour les détails sordides.
Sidenote: Je pensais que d'utiliser « echo
» à l'intérieur des backticks dans une commande « for /f
» aurait besoin d'être fait en utilisant « cmd.exe /c echo Test
» depuis echo
est une commande interne à cmd.exe
, mais il fonctionne de la manière plus naturelle. scripts batch Windows me surprennent toujours en quelque sorte (mais généralement pas dans le bon sens).
Lire la documentation de la commande "pour": for /?
Malheureusement, je ne suis pas connecté à Windows pour vérifier moi-même, mais je pense que quelque chose comme cela peut rapprocher ce que vous voulez:
for /F %i in ('echo Test') do my_command %i
Peut-être que je vissant la syntaxe de la méthode standard de for /f
, mais quand je mets une commande très complexe impliquant && et | dans les backticks dans la limite du for /f
, il provoque des problèmes. Une légère modification de l'habituel est possible de gérer une commande de complexité arbitraire:
SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling
for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a
En mettant votre commande complète et complexe dans une variable d'abord, puis mettre une référence à la variable dans la limite plutôt que de mettre la commande complexe directement dans la limite de la boucle, vous pouvez éviter les problèmes d'interprétation de syntaxe. À l'heure actuelle si je copie la commande exacte que j'ai mis à la variable VV
dans l'exemple ci-dessus dans lequel il est utilisé, %VV%
, il provoque des erreurs de syntaxe.