【问题标题】:What is the reason for nodemon working in cmd but not in a batch file?nodemon 在 cmd 中工作但不在批处理文件中的原因是什么?
【发布时间】:2019-02-02 03:06:07
【问题描述】:

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

'node' 不是内部或外部命令、可运行程序或批处理文件。

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

@echo off
node bot.js
pause

node 命令在我的路径中,所以我不确定它为什么不起作用,但在另一个 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的注册根据同时删除的评论中的建议如下。

【问题讨论】:

  • 打开 cmd.exe,然后从那里运行脚本,它会告诉你问题出在哪里。不要双击批处理文件。
  • 是的,我就是这样做的,我打开 cmd,进入文件夹,输入批处理文件的名称,它运行良好,但是当我双击它时它就关闭了。跨度>

标签: node.js batch-file npm cmd nodemon


【解决方案1】:

请给我们试一试,如果可行,我会解释:

@echo off
cd /d "C:\Users\tdkni\AppData\Roaming\npm"
echo Testing Script > OUTPUT.log
nodemon.cmd bot.js >> OUTPUT.log
pause

【讨论】:

  • 如果从 cmd.exe 运行它,输出是什么?它会显示暂停吗?
  • 在 bot.js 文件中它只是一个循环,因此除非出现错误,否则它永远不会真正暂停。它不会显示暂停,而是启动机器人,如果我想停止它,我可以关闭窗口。暂停实际上只是在发生错误时显示错误,但它没有显示它。当我尝试从 cmd 运行它时,机器人会按预期启动。
  • 你做错了什么。 cmd 怎么称呼它?给我确切的字符串。还有,你的这个批处理文件到底在哪里?
  • 我使用cd\Users\tdkni\OneDrive\Desktop\DiscordBot 转到文件夹。然后我使用命令"run_nodemon,bat"。 run_nodemon.bat 是包含以下内容的脚本:@echo off nodemon bot.js pause
  • 如果您将代码放在那里,它不可能不起作用。如果您从 cmd 运行它并且它可以工作,那么它必须在双击时工作。请尝试编辑的代码。它应该回显到文件。双击它,让它运行,在同一目录下会有一个名为 OUTPUT.log 的文件。请看它的内容。如果双击后文件确实存在
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    嗯,很清楚为什么cmd.exe 在目录C:\Program Files\nodejs 中找不到node.exe

    本地 Pathsystemuser Path 串联包含"C:\Program Files\nodejs;" 而不仅仅是C:\Program Files\nodejs

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

    因此,cmd.exe 在名称为 C:\Program Files\nodejs; 的文件夹中搜索 node.*,文件扩展名以分号分隔在环境变量 PATHEXT 中。但是没有文件夹C:\Program Files\nodejs;,因为文件夹是C:\Program Files\nodejs,末尾没有分号。

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

    其他小错误:

    1. systemPATH 中的前 4 个文件夹路径应始终为:

      %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0
      

      一些安装程序在文件夹路径列表的开头添加文件夹路径,而不是在末尾附加它们,如这里所示。 Intel64 编译器和 Oracle Java 文件夹路径应该移到 system PATH PowerShell 文件夹路径之后。

    2. 文件夹路径可以但不应以反斜杠结尾。应从 systemuser PATH 中删除文件夹路径末尾的所有反斜杠。自 Windows Vista 以来,Microsoft 出于某种未知原因添加了带有尾部反斜杠的 PowerShell 路径。但还是建议删除WindowsPowerShell\v1.0 之后的反斜杠是安全的。

    3. Systemuser Path(如果后者存在的话)以及 PATHEXT 不应以分号结尾。在最后一个文件夹路径和最后一个文件扩展名之后不应有;,因为这意味着根据 CSV 规范,还有一个空值(文件夹路径、文件扩展名)。

    我建议使用以下值分别定义 system 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
    

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

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

    这两个文件夹路径与用户帐户相关,因此应该添加到 user 而不是 system Path

    我建议将 system 环境变量 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 的维基百科文章。

    【讨论】:

      【解决方案4】:

      为了其他 Windows 用户的利益(Linux/Mac 用户不是我的问题),这是我对原始问题的回答。

      本质上,用户正在尝试使用 nodemon 运行一些 script.js 文件;

      C:\path\to\my\project>nodemon bot.js
      

      ,并想放入一个批处理文件。

      如果nodemon全局安装-g,则安装在

      C:\Users\<YourLogin>\AppData\Roaming\npm\nodemon.cmd
      

      所以你的批处理文件应该是

      cd C:\path\to\my\project\
      %AppData%\npm\nodemon.cmd bot.js
      PAUSE press any key to exit
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多