Lorsque je travaille 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, ce n'est qu'un exemple non pratique.)
Je me demande simplement si vous pouvez faire la même chose dans Batch.
bash
batch-file
backticks
MiffTheFox
la source
la source
Réponses:
Vous pouvez le faire en redirigeant d'abord la sortie vers un fichier. Par exemple:
la source
for /f
variante est bien meilleure.%random%
Vous pouvez obtenir une fonctionnalité similaire à l'aide de scripts cmd.exe avec la
for /f
commande:Ouais, c'est un peu non évident (pour dire le moins), mais c'est ce qu'il y a.
Voir
for /?
pour les détails sanglants.Note de bas de page: Je pensais que pour utiliser "
echo
" à l'intérieur des backticks dans unefor /f
commande " ", il faudrait utiliser "cmd.exe /c echo Test
" puisqueecho
c'est une commande interne àcmd.exe
, mais cela fonctionne de manière plus naturelle. Les scripts batch Windows me surprennent toujours d'une manière ou d'une autre (mais généralement pas dans le bon sens).la source
system()
était bien, iirc, car il démarre un shell dans tous les cas, mais .NET aProcess.Start
besoin d'appeler explicitement le shell. Quelque chose comme ça, iirc. En tout cas, je considère que c'est la meilleure réponse que celle acceptée :-)for
ne pas blesser mais confondre le problème. Et à propos de ça:for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
c'est important. Sinon, si le résultat de la commande comprend des espaces, seul le premier mot est sorti. Exécutez ce à l'invite:for /f %a in ('"echo foo bar"') do echo "%a"
. Il imprimera"foo"
.Lisez la documentation de la commande "for":
for /?
Malheureusement, je ne suis pas connecté à Windows pour le vérifier moi-même, mais je pense que quelque chose comme ça peut approximer ce que vous voulez:
la source
Vous pouvez toujours exécuter Bash dans Windows. Je le fais tout le temps avec MSYS (beaucoup plus efficace que Cygwin ).
la source
Peut-être que je fous la syntaxe de la
for /f
méthode standard , mais quand je mets une commande très complexe impliquant && et | dans les backticks dans la limite dufor /f
, cela pose des problèmes. Une légère modification par rapport à l'habituel est possible pour gérer une commande de complexité arbitraire:En plaçant d'abord votre commande complète et complexe dans une variable, puis en mettant une référence à la variable dans la limite plutôt que de placer la commande complexe directement dans la limite de la boucle for, vous pouvez éviter les problèmes d'interprétation de la syntaxe. Actuellement, si je copie la commande exacte que j'ai définie dans la
VV
variable de l'exemple ci-dessus dans l'endroit où elle est utilisée%VV%
, cela provoque des erreurs de syntaxe.la source