新手问-运行本地命令得不出正确结果
新手贴
我想写一个脚本,通过命令行临时修改windows系统的环境变量。程序代码如下。
var exec = require('child_process').exec;
var arg = process.argv[2];
if(arg == "--as"){
console.log("set as environment.");
exec('set path=%path%;D:\Android\sdk\platform-tools;D:\Android\sdk\tools;',function(err, stdout, stderr){
if(err){
console.error('exec error: ${err}');
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
}else if(arg == "--adt"){
console.log("set adt environment");
exec('set path=%path%;D:\android-sdk-windows\tools;D:\android-sdk-windows\platform-tools;',function(err, stdout, stderr){
if(err){
console.error('exec error: ${err}');
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
}else if(arg == "--help"){
console.log(" --adt 设置ADT所需要的环境变量");
console.log(" --as 设置AS所需要的环境变量");
console.log(" --help显示该信息");
}else{
console.log("参数错误,请使用--help命令查看");
}
为什么使用set命令后面直接接参数运行之后,设置的环境变量无效。
4 回复
看了一下 api, exec 是新建了一个 shell ,然后在里面执行你给的命令。所以你设置的环境变量只在那个新 shell 生效,对你执行 node 程序的 shell 就没影响了
@IchiNiNiIchi 去看了官方文档,同意你的说法,但是我并没有从官方文档中找到对应的解决方法,这个问题在node里面可解吗?我实在不想去写个bat。
@shenzhiguo 你可以试试 setx 这个命令,不像 set 的设置只对当前 shell 生效,而是可以设置对当前用户或者系统生效的环境变量,node 程序执行完之后再重开一个 shell。暂时只想得到这么办,因为我不知道 windows 系统怎么让更改后的环境变量在当前的 shell 生效
@IchiNiNiIchi 谢谢你的回答对我很有帮助,我使用bat完成了我所需要的功能,因为setx是全局的,我想要的是临时的在几个环境变量中进行切换,实验了setx的功能,结果不理想,我就用bat了。