Comme ils l'ont déjà indiqué dans les commentaires, il n'y a pas de moyen natif de faire cela avec cmd. Cependant, il y a un hack que vous pouvez utiliser dans votre cas (comme npm bin
ne renvoie qu'une seule ligne) :
for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)
ou à l'intérieur d'un fichier batch, vous devez dupliquer l'adresse de l'utilisateur. %
:
for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)
Alternatives
Lot
Vous pourriez générer un script qui reçoit le paramètre et exécute la commande, quelque chose comme
:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)
Enregistrez-le sous le nom de npmbin.cmd dans votre chemin, puis vous pourrez l'exécuter :
npmbin.cmd grunt build
Powershell
Dans votre cas, vous devriez pouvoir l'invoquer via powershell en utilisant le cmdlet invoke-expression :
iex "$(npm bin)\grunt build"
Je n'ai pas npm sur moi pour l'instant, mais j'ai testé avec un autre programme et il semble que cela pourrait fonctionner.
Variable d'environnement
De toute façon, je pense que les précédentes sont des "solutions" très compliquées, alors que vous voulez seulement simplifier votre commande. Je me demandais si vous pouviez créer une variable globale, par exemple NPMBIN
et ensuite l'utiliser pour vos commandes :
%NPMBIN%\grunt build
Pour aller plus loin, vous pourriez mettre en place une tâche pour le paramétrer de façon programmatique pour votre utilisateur (ou éventuellement l'ordinateur) en utilisant setx
un certain lot comme :
for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)
J'espère que cela vous aidera. Salutations