node.js 用child_process的exec 如何调用一个需要后续输入数据的.bat文件

node.js 用child_process的exec 如何调用一个需要后续输入数据的.bat文件,第1张

const spawn = require('child_process')spawn;

const bat = spawn('cmdexe', ['/c', 'mybat']);

batstdouton('data', (data) => {  consolelog(data);

});

batstderron('data', (data) => {  consolelog(data);

});

baton('exit', (code) => {  consolelog(`Child exited with code ${code}`);

});

这个方法?

1、新建一个txt文本,然后重命名为bat的文件(比如:testbatbat)。

2、然后进行编辑,输入“start calcexe”。

3、另存文本文档为bat 格式,下图为更改为bat格式的文件。

4、右键点击以管理员身份运行。

5、运行后时,d出对话框,点击是允许更改。

6、下图就是运行出的计算器程序。

qq提示请把nodedll放在exe目录怎么解决:可以把把软件所在的整个目录复制到桌面上。动态链接库和EXE文件放在同一目录会加快程序的运行速度,如果不放在一个目录就要在EXE等可执行文件的内核代码增加转向指令。

nodeexe不是软件。是Windows *** 作系统中的一个可执行文件(程序)。 文件的扩展名是exe的表示是可执行请务必运行那些您信任的可执行文件,因为可执行文件存在潜在的风险,它们可以改变您计算机的设置并伤害您的计算机

这样写命令

运行 ("cmdexe start"+取运行目录+"\KMSexe" ,假,)

原理是调用Cmd的命令Start来代替易语言执行。

扩展:

Start命令语法

C:\Users\Administrator>start/

启动一个单独的窗口运行指定的程序或命令。

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]

    [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]

    [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]

    [command/program] [parameters]

  "title"     在窗口标题栏中显示的标题。

  path        启动目录。

  B           启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。

              除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断

              该应用程序的方式。

  I           新的环境将是传递给 cmdexe 的原始环境,而不是当前环境。

  MIN         以最小化方式启动窗口。

  MAX         以最大化方式启动窗口。

  SEPARATE    在单独的内存空间中启动 16 位 Windows 程序。

  SHARED      在共享内存空间中启动 16 位 Windows 程序。

  LOW         在 IDLE 优先级类中启动应用程序。

  NORMAL      在 NORMAL 优先级类中启动应用程序。

  HIGH        在 HIGH 优先级类中启动应用程序。

  REALTIME    在 REALTIME 优先级类中启动应用程序。

  ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。

  BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。

  NODE        将首选非一致性内存结构 (NUMA) 节点指定为十进制整数。

  AFFINITY    将处理器关联掩码指定为十六进制数字。进程被限制在这些

              处理器上运行。

              当 /AFFINITY 和 /NODE 结合时,会对关联掩码进行不同的解释。

              指定关联掩码,正如 NUMA 节点的处理器掩码正确移动到零位

              起始位置一样。进程被限制在指定关联掩码和 NUMA 节点之间的

              那些通用处理器上运行。如果没有通用处理器,则进程被限制在

              指定的 NUMA 节点上运行。

  WAIT        启动应用程序并等待它终止。

  command/program

              如果它是内部 cmd 命令或批文件,则该命令处理器是使用

              cmdexe 的 /K 开关运行的。这表示运行该命令之后,该窗口

              将仍然存在。

              如果它不是内部 cmd 命令或批文件,则它就是一个程序,并将

              作为一个窗口化应用程序或控制台应用程序运行。

  parameters  这些是传递给 command/program 的参数。

注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。

通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式创建进程。例如,

可以创建两个完全通过共享内存互相通信的进程以共享相同的首选 NUMA 节点,

从而最大限度地减少内存延迟。如有可能,它们即会分配来自相同 NUMA 节点的

内存,并且会在指定节点之外的处理器上自由运行。

  启动 /NODE 1 application1exe

  启动 /NODE 1 application2exe

这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器上运行。在以下

示例中, application1 在节点的两个低顺序处理器上运行,而 application2

在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑

处理器。请注意,节点号可更改为该计算机的任何有效节点号,而无需更改关联

掩码。

  启动 /NODE 1 /AFFINITY 0x3 application1exe

  启动 /NODE 1 /AFFINITY 0xc application2exe

如果命令扩展被启用,通过命令行或 START 命令的外部命令

调用会如下改变:

将文件名作为命令键入,非可执行文件可以通过文件关联调用。

  (例如,WORDDOC 会调用跟 DOC 文件扩展名关联的应用程序)。

  关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和

   FTYPE 命令。

执行的应用程序是 32-位 GUI 应用程序时,CMDEXE 不等应用

  程序终止就返回命令提示符。如果在命令脚本内执行,该新行为

  则不会发生。

如果执行的命令行的第一个符号是不带扩展名或路径修饰符的

  字符串 "CMD","CMD" 会被 COMSPEC 变量的数值所替换。这

  防止从当前目录提取 CMDEXE。

如果执行的命令行的第一个符号没有扩展名,CMDEXE 会使用

  PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展

  名。PATHEXT 变量的默认值是:

      COM;EXE;BAT;CMD

  请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

查找可执行文件时,如果没有相配的扩展名,看一看该名称是否

与目录名相配。如果确实如此,START 会在那个路径上调用

Explorer。如果从命令行执行,则等同于对那个路径作 CD /D。

比如,你要去学校,要先出门,然后左转,经过某个地方,右转,往前走100米等等,就到了学校。再比如,你要去超市,你同样得出门,然后往前走到一个十字路口,然后过马路,往右经过一个面包店等等等等,然后到达了超市。好了,说这些有什么关系呢?同样的,你要执行某个软件,你得先找到这个软件,找不到软件会发生什么情况呢?

如下图:

这就相当于你想去学校或者超市,但是你却忘记了你该怎么走。执行软件的时候却找不到软件,所以就报错了。

那么如何让我们每次都能记起来去学校、超市,或者其他等等地方的路线呢?没错,写到本子上、记在手机的记事本里。同样,要使每次报错不能运行的软件能够正常运行,我们也可以把软件的运行路径记录到 *** 作系统的(PATH)变量里。那么,这个叫做(PATH)的东西,该去哪里修改,让它记住我们程序的路径呢?

首先,先找到我们的程序在哪,比如nodejs,我放在了这:

那么我们需要的是哪一个路径呢?nodeexe所在的目录,也就是:D:\softs\node-v10142-win-x64 这个路径。为什么不是D:\softs\node-v10142-win-x64/nodeexe呢?先不说可行不可行,单只从合理性上来说,如果你有100个执行软件,都添加到(PATH)里,那么你的(PATH)都会被你写成一篇论文那么长的字符串。每次从论文里面修改东西,先不说计算机不知道累不累,但我们人本身,肯定是累得够呛,这完全是反人类的设计。所以,记住,需要添加到(PATH)的是执行文件所在的目录,而不是执行文件本身。

好了,得到node所在的这个目录之后,我们先来测试一下,怎么测试呢?先用cd(change directory 改变目录)这个命令,切换到我们nodeexe可执行文件所在的目录。

看到没,切换到node本身所在的目录再执行node -v命令,版本号就出现了。所以,这就更加确定了,node执行不了,不是node本身不能运行或不存在,而是系统找不到它。有人可能会问,这个软件就在我的计算机上的, *** 作系统怎么找不到?这里我们用屁股来想一想, *** 作系统本身的文件加上你平时使用软件和软件本身产生的文件,少说也有几十万。那么每次 *** 作系统执行文件,总不能每次从这几十万文件里面去找node在哪吧?虽然电脑速度快,但是完全不需要搞得这么傻逼对不对。所以,把需要执行的软件所在的目录,放到(PATH)里面。这样,每次执行命令,就去(PATH)记录的目录里面去找,这样是不是快得一笔?

好了, node所在的目录路径找到了,现在放到(PATH)里面去,我用的是windows7系统,其他系统请参考。

1,打开计算机的属性面板,至于怎么打开?方法比较多,右击桌面上的电脑图标,选择属性。或者点击左下角开始菜单,右击计算机,选择属性也行。

2,打开属性面板之后,再点击高级系统设置

3,d出一个框,选择环境变量

4,然后,我们就看到了,两个同样的(PATH)属性。

5,强迫症患者此刻已经抱头痛哭,为什么要让我选择!!!

对啊,选择哪一个呢?为什么会有两个(PATH)呢?这里稍微说一下,windows是多用户,多任务 *** 作系统,一台电脑可以多个人用。多个人用是什么意思呢?五六个人凑一起打键盘?手摸着手,叠罗汉点击鼠标?当然不是这样。多用户的意思是,你可以在电脑上注册多个账号,比如上图的(chensuiyi)就是我自己的账户。A用户用这台电脑的时候,显示A用户安装过的软件和创建的文件,B用户登录的时候,显示B用户安装的软件和创建的文件。现在生活水平的提高和技术的发展,电脑已经基本个人化,不存在多个人不同时段公用一台电脑的事情了,所以多用户其实很少接触到。

好了,就算说完了这,这两个(PATH)还是如何选择呢?随便选一个就好了(那说这么多放屁啊!)。这里选择(系统变量)里面的那个(PATH)。

这里注意一下,系统变量里面设置的参数,所有登录的用户都会生效。

6,选中(PATH),点击编辑,把node所在的目录路径,放到最后,注意箭头处的那个分号!!!每个路径一个分号隔开!每个路径一个分号隔开!每个路径一个分号隔开!,好了,说三遍,你懂的。

点击确定,重新打开一次cmd命令行,记住,是重新打开一遍!!!再次输入node -v命令,如图,大功告成!收工!

结语

感谢您的观看,如有不足之处,欢迎批评指正。

本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。

对web开发技术感兴趣的同学,欢迎加入Q群:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10123476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)