在 Bash 上,我可以使用子 shell 将一个命令的结果填充到下一个命令中:
$ echo $(sub-command args)
如果$(sub-command args)
写入foo
标准输出,则上述命令相当于:
$ echo foo
Windows 7 有办法做到这一点吗cmd.exe
?
我这样做的原因是我可以轻松地从 npm 的安装目录运行可执行文件,而无需将该目录放在我的路径上:
$ $(npm bin)/grunt build
答案1
正如他们在评论中所述,没有使用 cmd 执行此操作的本机方法。但是,您可以针对您的情况使用一种 hack(因为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
电源外壳
对于您的情况,您应该能够使用invoke-expression cmdlet通过powershell调用它:
iex "$(npm bin)\grunt build"
我现在没有 npm,但我用其他程序测试过,看起来它可以工作。
环境变量
无论如何,我认为前面的“解决方案”非常复杂,而您只想简化命令。我想知道您是否可以创建一个全局变量,然后将NPMBIN
其用于您的命令:
%NPMBIN%\grunt build
为了扩展此功能,您可以设置一个任务,以编程方式为您的用户(或最终是计算机)设置它setx
,使用一些批处理,例如:
for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)
希望对您有所帮助。问候