如何使用Windows控制台&x27;设置';使用NPM脚本的变量?

如何使用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

这在Windows控制台中正常工作:

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