花了一整个下午踩的坑,有必要记录一下
之前在学习mysql的时候,cmd命令运行mysql就容易出现这种问题,后面在用户变量又配置了一遍,就好了。
今日错误是clone了一个项目下来,通过PowerShell启动执行npm i命令安装依赖时报错“node”不是内部命令,但是在PowerShell中输入 node -v 是没有问题的。
检索错误发现安装依赖时有个必须通过cmd的管理员执行才能安装,所以在PowerShell中间接就报"node"不是内部命令。
然后通过cmd执行node -v 果然报 "node"不是内部命令。
于是又去配置了一遍环境变量和用户变量,还是无法执行命令。
重装nodejs还是无果。
最后看到高赞的博客说检查系统环境变量path值中里有没有下面这三个,我开始以为没有,就直接粘到后面了,再次cmd运行 还是报错。检查了一下,下面这三条值我原本就有。
%SystemRoot%\system32;
%SystemRoot%; %SystemRoot%\System32\Wbem; %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;
过了会我想了想要不把path里值全部删了重新来一遍好了,就把所有的path值剪贴到txt文本上,防止丢失,但是我还是不死心,又检查了一遍。好笑的就来了。
path值中:每个分号 ; 对应一条值
原本是一长串的值,我在txt文本中以 ; 分割为一行一行的, 就看到有条值的前面有个引号 !!
呵呵,真是可笑啊。
一个引号引发的错误!
把引号删除掉,cmd就可执行命令了。
但是这又引起了我的思考,开始在执行node命令时报错,但是执行java命令就不报错。这是为什么呢?
再次检查系统环境变量path值,发现java的路径放在path值里的最前面,刚好错过了有引号发生错误的位置。
可以理解为引号有误的值的后面的所有路径都会受到影响。
所以以后发现某个命令不是内部命令时,就把那个命令的执行路径放到path的最前面,就不会出问题的!
还有一点
在配置某个命令环境变量时,在系统环境变量path中加入之后不行,在用户环境变量中加入肯定也没用。