如何使用Windows控制台&x27;设置';使用NPM脚本的变量?
这在Windows控制台中正常工作:如何使用Windows控制台&x27;设置';使用NPM脚本的变量?,npm,cmd,package.json,npm-scripts,Npm,Cmd,Package.json,Npm Scripts,这在Windows控制台中正常工作: set A=“qwerty”和&echo%A% 输出:“qwerty” 但当我尝试在NPM scipts中运行相同的命令时: package.json: >npm运行qwerty 输出为:%A% 我是做错了什么,还是在NPM运行时不应该这样做?到目前为止,我发现这些命令必须在不同的脚本中,并且以特定的顺序运行才能正常工作。下面是它的工作原理: "scripts": { "aaa": "set TMP=test && npm run bbb
set A=“qwerty”和&echo%A%
输出:“qwerty”
但当我尝试在NPM scipts中运行相同的命令时:
package.json:
>npm运行qwerty
输出为:%A%
我是做错了什么,还是在NPM运行时不应该这样做?到目前为止,我发现这些命令必须在不同的脚本中,并且以特定的顺序运行才能正常工作。下面是它的工作原理:
"scripts": {
"aaa": "set TMP=test && npm run bbb",
"bbb": "echo %TMP%"
}
npm运行aaa
输出:
测试
但是这个不行:
"scripts": {
"aaa": "set TMP=test",
"bbb": "npm run aaa && echo %TMP%"
}
npm运行bbb
输出:
似乎需要两个单独的npm run
命令来查找创建的变量:变量应该在第一次npm运行中创建,并且可以在第二次运行中找到。您的示例set A=“qwerty”&&echo%A%
不正确。cmd
prompt/a批处理文件中的变量每行/命令展开一次:
==> set "A="
==> echo %A%
%A%
==> set A="qwerty" && echo %A%
%A%
==> echo %A%
"qwerty"
1983年3月,MS-DOS2.0首次引入了SET
命令,
当时,内存和CPU非常有限,并且的扩展
每行一次变量就足够了
使用以下选项的解决方法:
编辑:
为完整起见,以下批处理脚本详细显示了百分比扩展的机制及其与调用命令的组合(注意批处理文件调用Echo%%\u var%%
)中的百分比符号:
输出,回显关闭
:
==> D:\bat\SO\55237418.bat
1st:
first
second
2nd:
second
first
==> D:\bat\SO\55237418.bat on
==> echo 1st:
1st:
==> Set "_var=first"
==> Set "_var=second" & Echo first & CALL Echo %_var%
first
second
==> echo 2nd:
2nd:
==> Set "_var=first"
==> Set "_var=second" & CALL Echo %_var% & Echo first
second
first
输出,回声打开
:
==> D:\bat\SO\55237418.bat
1st:
first
second
2nd:
second
first
==> D:\bat\SO\55237418.bat on
==> echo 1st:
1st:
==> Set "_var=first"
==> Set "_var=second" & Echo first & CALL Echo %_var%
first
second
==> echo 2nd:
2nd:
==> Set "_var=first"
==> Set "_var=second" & CALL Echo %_var% & Echo first
second
first
我猜set A=“qwerty”&&echo%A%
似乎在我的控制台中工作,因为上一次运行实际上不起作用,但我没有注意到这一点,只看到它在下一次运行中起作用。嗯,您的第一个命令行实际上不起作用;执行设置“A=”
,然后重试,您将得到%A%
的回音。要在所需的同一行或同一代码块中写入和读取变量,请在使用cmd/V:ON启动命令提示符时设置“a=qwerty”&echo(!a!
)。或者,尝试set“a=qwerty”&call echo(%^a%
)(尽管在某些情况下仍可能失败)…是的,我的第一个命令似乎是有效的,因为我猜是上次运行的。确切地说,这就是原因。。。
==> D:\bat\SO\55237418.bat on
==> echo 1st:
1st:
==> Set "_var=first"
==> Set "_var=second" & Echo first & CALL Echo %_var%
first
second
==> echo 2nd:
2nd:
==> Set "_var=first"
==> Set "_var=second" & CALL Echo %_var% & Echo first
second
first