nodemon在cmd中工作但不在批处理文件中工作的原因是什么?

问题描述 投票:0回答:3

我正在制作不和谐机器人。我为机器人编写的所有代码都工作,除了应该运行它的批处理文件。最初我只是使用node命令,当我打开cmd,导航到文件夹,并手动输入它工作正常,但当我把相同的代码放入批处理文件时,它给了我这个错误:

'node'不被识别为内部或外部命令,可操作程序或批处理文件。

这是该批处理文件的所有代码:

@echo off
node bot.js
pause

节点命令在我的路径中,所以我不确定它为什么不工作,但在另一个post,有人建议,而不是只键入node键入完整的文件路径,所以我尝试了这个,它工作。

这是新的工作代码:

@echo off
"C:\Program Files\nodejs\node.exe" bot.js
pause

然后我安装了nodemon。当我导航到文件夹并手动输入时,这在cmd中再次起作用,但是当我尝试在批处理文件中执行它时它不起作用。而不是在窗口即刻关闭之前给出错误。这是代码:

@echo off
nodemon bot.js
pause

因为我在代码的末尾有暂停命令,所以如果我收到错误,它应该停在那里,但它在它出现之前因为某些原因而关闭。 nodemon命令在我的路径中,我也尝试用文件路径nodemon替换C:\Users\tdkni\AppData\Roaming\npm\nodemon.cmd,就像我在上一篇文章中推荐的那样。这些解决方案都不起作用,我认为这是因为除了没有检测到nodemon命令之外还有其他一些问题。我没有看到任何错误消息,因为它立即关闭,所以我不知道到底出了什么问题。

根据同时删除的评论中的建议,文件扩展名.bat.cmd的注册如下。

node.js batch-file npm cmd nodemon
3个回答
1
投票

我要感谢你们所有人试图帮助我解决我遇到的这个问题。你们都非常有帮助,虽然它可能没有解决我的问题但它确实帮助我理解了所有这些是如何工作的。我只是尝试使用我制作的批处理文件启动机器人,它突然起作用。我不知道为什么,因为我试图以与我一直相同的方式开始它,但据我所知,没有其他人有这个问题,所以我可能没那么重要。知道修复了什么。再次感谢所有帮助我的人。


1
投票

好吧,很明显为什么node.exe在目录cmd.exe中找不到C:\Program Files\nodejs

系统和用户Path连接的本地Path包含"C:\Program Files\nodejs;"而不仅仅是C:\Program Files\nodejs

Path中的文件夹路径不应该用双引号括起来,但有一个例外:文件夹路径本身包含一个或多个;。在这种情况下,;的文件夹路径必须用双引号括起来,以使文件夹路径中的分号不被解释为文件夹路径之间的分隔符。这是一般的CSV语法,如维基百科文章comma-separated values所述,Windows使用分号作为分隔符,用于Path中的文件夹路径。

出于这个原因,cmd.exe在一个名为C:\Program Files\nodejs;的文件夹中搜索node.*,文件扩展名以分号在环境变量PATHEXT中分隔。但是没有文件夹C:\Program Files\nodejs;,因为文件夹是C:\Program Files\nodejs,最后没有分号。

并且PATHEXT定义错误,因为它包含在文件夹路径C:\Program Files\nodejs的末尾,尽管它应该只包含由分号分隔的文件扩展名。

其他小错误:

  1. 系统PATH中的前4个文件夹路径应始终为: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0 某些安装程序在文件夹路径列表的开头添加文件夹路径,而不是在结尾处附加它们,如此处所示。在PowerShell文件夹路径之后,应在系统PATH中移动Intel64编译器和Oracle Java文件夹路径。
  2. 文件夹路径可以但不应以反斜杠结尾。应从系统和用户PATH中删除文件夹路径末尾的所有反斜杠。微软自Windows Vista以来添加了一个带有反斜杠的PowerShell路径,原因不明。但它是安全的,并建议在WindowsPowerShell\v1.0后删除反斜杠。
  3. 系统和用户Path(如果后者存在)和PATHEXT不应该以分号结尾。在最后一个文件夹路径之后应该没有;分别是最后一个文件扩展名,因为这意味着根据CSV规范还有一个值为空值的值(文件夹路径,文件扩展名)。

我建议使用以下值分别定义系统Path文件夹路径:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0;%SystemRoot%\System32\OpenSSH;%ProgramFiles(x86)%\Common Files\Intel\Shared Libraries\redist\intel64\compiler;%ProgramFiles(x86)%\Common Files\Oracle\Java\javapath;%ProgramFiles%\nodejs;%ProgramFiles(x86)%\Windows Kits\8.1\Windows Performance Toolkit

我建议使用以下值分别为文件夹路径定义用户Path

%LocalAppData%\Microsoft\WindowsApps;%AppData%\npm

这两个文件夹路径是用户帐户相关的,应该为此添加到用户而不是系统Path

我建议将系统环境变量PATHEXT修复为:

.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

有关PathPATHEXT使用的更多详细信息,请参阅What is the reason for '...' is not recognized as an internal or external command, operable program or batch file?上的答案。请查看有关Windows Environment Variables的维基百科文章。


0
投票

请试一试,如果有效,我会解释:

@echo off
cd /d "C:\Users\tdkni\AppData\Roaming\npm"
echo Testing Script > OUTPUT.log
nodemon.cmd bot.js >> OUTPUT.log
pause
© www.soinside.com 2019 - 2024. All rights reserved.