新手问-运行本地命令得不出正确结果
发布于 7 年前 作者 shenzhiguo 2908 次浏览 来自 问答

新手贴

我想写一个脚本,通过命令行临时修改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了。

回到顶部