как они уже указали в комментариях, нет никакого собственного способа сделать это с помощью cmd. Однако есть хак, который вы можете использовать для своего случая (так как npm bin
возвращает только одну строку):
for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)
или внутри командного файла вы должны продублировать %
:
for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)
альтернативы
партия
Вы можете сгенерировать скрипт, который получает параметр и запускает команду, что-то вроде
:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)
Сохраните его как npmbin.cmd на своем пути, тогда вы можете запустить:
npmbin.cmd grunt build
Powershell
В вашем случае вы должны иметь возможность вызывать его через powershell с помощью командлета invoke-expression:
iex "$(npm bin)\grunt build"
У меня сейчас нет npm, но я проверил с другой программой, и похоже, что это будет работать.
Переменная среды
Во всяком случае, я думаю, что предыдущие очень сложные "решения", в то время как вы только хотите упростить свою команду. Мне было интересно, если вы могли бы создать глобальную переменную, скажем, NPMBIN
а затем использовать ее для своих команд:
%NPMBIN%\grunt build
Чтобы расширить это, вы можете установить задачу, чтобы установить ее программно для вашего пользователя (или, в конечном итоге, компьютера), используя setx
, например, такой пакет:
for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)
Надеюсь, поможет. С уважением