【批处理DOS-CMD命令-汇总和小结】-应用程序启动和调用、服务和进程操作命令(start、call、)

一、程序启动命令——start

start命令一般用来打开一个文件(通常是可执行程序)或文件夹,当然也可以是一个网址。

先用【start /?】命令大致了解帮助信息。

1.1 打开某一个文件夹——start dir

这个dir既可以是磁盘根目录,也可以是磁盘内的子目录。如果不加min或max参数,就会默认最大化打开(在前台打开)。

如果要打开e盘根目录,执行命令【start e:】。

 如果要打开e盘根目录下的某文件夹(例如adobe),执行命令【start e:\adobe】

 

1.2 打开某个文件——start path

这个path既可以是文档类的txt、doc、excel文件,也可以是多媒体mp3、mp4文件,也可以是可执行exe、bat文件。

尝试一下打开exe文件,【start D:\绿色免安装小软件汇总\PdgCntEditor_PDF目录编辑器\PdgCntEditor.exe】。

顺利地打开了。

1.3 不管是打开什么,都要注意空格问题

啥意思呢?啥叫注意空格问题?

cmd窗口中的不同参数之间往往使用空格进行区分,如果你使用空格往往意味着空格之后是下一个参数或者赋予空格前的参数的取值。

 例如酷狗音乐的路径是【D:\Program Files (x86)\KuGou\KGMusic\KuGou.exe】,那么这时我们执行命令【start D:\Program Files (x86)\KuGou\KGMusic\KuGou.exe】,会发现出错了。提示找不到文件(夹)【D:\Program】,容易知道cmd程序将空格前后的路径字符串分割开了,我们如何解决这个问题呢?

解决方法很简单,哪个层级目录的名称中有空格,就在哪里加双引号。执行命令【start D:\"Program Files (x86)"\KuGou\KGMusic\KuGou.exe】。

注意不是执行命令【start "D:\Program Files (x86)\KuGou\KGMusic\KuGou.exe"】 ,直观上反映出来,会重新打开一个cmd窗口,因为cmd程序把【"D:\Program Files (x86)\KuGou\KGMusic\KuGou.exe"】当做"title"字段了,不信你看新建的CMD窗口标题是不是跟title的一样。

 如果完整路径上有多个空格,这时候给每一个层级加双引号显然就比较麻烦了。

事实上我们还有另一种方法。

假设要打开文件夹【D:\BaiduNetdiskDownload\test1 2 3\test 3 4 5】,执行命令【start "" "D:\BaiduNetdiskDownload\test1 2 3\test 3 4 5"】(第一个双引号对应title,随意填什么内容,最好填"",不是很重要)。

1.4 打开一个网站网址——start page_site

因为start命令还支持打开一个网站,所以我们可借用cmd窗口打造搜索引擎。

把下面的代码放进一个bat文件中,双击执行

@echo off
chcp 65001
set /p var1=请输入搜索对象:
start https://www.baidu.com/s?wd=%var1%
pause

键入要搜索的内容,比如说【日出】 ,再回车执行,就会自动打开默认浏览器并打开这个start后的网址了。

正是因为键入的内容是一个变量,而这个变量放在了start后的网址字符串中,所以可以实现在cmd中搜索。 

 

 

1.5 后台打开——参数/min

如果不想执行命令后窗口立即显示在屏幕上,也即想要在后台打开,可以用/min参数。

例如打开某exe程序,执行命令【start /min D:\绿色免安装小软件汇总\PdgCntEditor_PDF目录编辑器\PdgCntEditor.exe】

果然是在后台悄咪咪打开的。 

但是我还是发现有一些程序,即使添加/min参数,

也无法在后台打开,比如酷狗音乐。

二、程序调用命令——call

2.1 外部调用用法——call filepath

2.1.1 不带批处理参数(仅有%0)地调用

Call命令的外部调用是指调用已经写好的bat文件,假设被调用bat文件名称是【demo.bat】,主动调用的bat文件名是【main.bat】,那么在main.bat中调用demo.bat就需要用到call命令。

类似C语言中的函数声明,函数定义在demo.bat中进行,函数声明在主程序文件main.bat中进行。

先打印call命令的帮助信息。

下面我们看看具体怎么用call来进行外部调用。

新建一个demo.bat文件,里面的代码为。

@echo off
echo 现在开始执行子程序
echo 你会数到10吗?
echo 难不倒我! 1,2,3,4,5,6,7,8,9,10
echo 真厉害呢
echo 祝你幸福
echo 见了鬼
echo 怎么后面的都没执行
echo 见了鬼
echo 继续啊?

再新建一个main.bat文件,里面的代码为。

chcp 65001
@echo off
echo 嘿老铁抓好了!主程序开始跑了...
echo 你会数数吗?
echo 这个我不会,但是我儿子会,你去问他。
call D:\D-desktop\demo.bat
echo 主程序也结束了,好好休息一下吧。
pause

可见直接用【call path】就能成功调用。

但是在实验过程中我还是发现了一些问题。

第一个问题:假使子程序文件最后一行有pause,就会把靠近pause的几行中句号结尾、或者问号结尾的行当做命令看待,结果就会出错。

例如将demo.bat文件修改,而main.bat文件保持不变。

@echo off
echo 现在开始执行子程序
echo 你会数到10吗?
echo 难不倒我! 1,2,3,4,5,6,7,8,9,10
echo 真厉害呢
echo 祝你幸福。
echo 见了鬼。
echo 怎么后面的都没执行。
echo 见了鬼。
echo 继续啊?
pause

执行后pause的前4行都出现了问题。 

 第二个问题:假使我去掉子程序文件中最后一行的pause,也会出现最后几行命令失效的情况。

同样将demo.bat文件予以修改,然后main.bat保持不变。

@echo off
echo 现在开始执行子程序
echo 你会数到10吗?
echo 难不倒我!1,2,3,4,5,6,7,8,9,10
echo 真厉害呢
echo 祝你幸福
echo 见了鬼
echo 怎么后面的都没执行
echo 见了鬼
echo 继续啊

执行结果如下图所示,最后4行又全军覆没。

千万别以为仅仅最后4行才会出问题,你们可以自己去试,一大堆bug,所以建议这个功能谨慎使用,能把代码放在主程序就放进去。

后来,我又在子程序bat中最顶头加了一行【chcp 95001】,结果没有明显的改善。

我对Call命令有点小失望!

------------------------20220701更新分割符-------------------------

后来我才发现不是call命令的原因。

echo的输出如果有乱码;第一个原因是编码问题,cmd窗口默认是ANSI编码(GBK编码或GB2312编码),往往需要用命令【chcp 65001】改成utf8编码才能不乱码,第二个原因是误识别成命令,这时候可以将要echo的对象两边加上双引号。

demo.bat改成如下代码

@echo off
echo "现在开始执行子程序"
echo "你会数到10吗?"
echo "难不倒我!1,2,3,4,5,6,7,8,9,10"
echo "真厉害呢"
echo "祝你幸福"
echo "见了鬼"
echo "怎么后面的都没执行"
echo "见了鬼"
echo "继续啊"

然后再双击执行main.bat,就正常了。

 

2.1.2 带批处理参数地调用

新建一个main.bat文件代码如下

chcp 65001
@echo off
echo 嘿老铁抓好了!主程序开始跑了...
echo %0
echo %1
echo %2
call D:\D-desktop\demo.bat arg1 arg2
echo %0
echo %1
echo %2
echo 主程序也结束了,好好休息一下吧。
pause

再新建一个demo.bat文件,如下

chcp 65001
echo %0
echo %~0
echo %~f0
echo %1
echo %2

双击执行main.bat文件,结果如下

接下来让我为大家分析一下结果。

在call执行前,只有%0有意义;在执行子程序时,%0被子程序路径覆盖,%1和%2分别对应执行命令【call D:\D-desktop\demo.bat arg1 arg2】中的arg1和arg2;在子程序执行完后,又回到了全局环境,因此%0的值还是主程序路径,而%1和%2没有取值。

从上面的分析过程,我们其实完全可以将批处理参数的逻辑联想至C语言的全局变量、局部变量。

2.2 内部调用用法——call :label 

2.2.1 不带批处理参数地调用(仅包括%0)

新建一个demo.bat文件,里面放的代码如下

chcp 65001
@echo off
echo 小大人,您玩累了吗?
call :part1
echo 我累了,我不想说话,麻烦转给part1先生
:part1
echo ......
echo ......
echo ......
echo 过了十分钟后...
echo 现在按任意键即可继续玩耍啦
pause

执行该bat文件后,输出结果如下。

 也就是说,call那一行会调用:part1那一行下面一行至最后一行,然后不是结束(这是和goto命令最大的不同),而是从call的下一行继续执行。

下面给出goto命令,以此和call的内部调用用法进行比较。

当bat文件内容如下时

chcp 65001
@echo off
echo 小大人,您玩累了吗?
goto :part1
echo 我累了,我不想说话,麻烦转给part1先生
:part1
echo ......
echo ......
echo ......
echo 过了十分钟后...
echo 现在按任意键即可继续玩耍啦
pause

执行结果如下!goto命令下面的一行“我累了...”,后面压根就没执行。

2.2.2 带批处理参数地调用

新建一个bat文件,代码如下:

chcp 65001
@echo off
echo 嘿老铁抓好了!主程序开始跑了...
echo %0
echo %~f0
echo %1
echo %2
call :end arg1 arg2
echo %0
echo %~f0
echo %1
echo %2
echo 主程序也结束了,好好休息一下吧。
pause
:end
echo %0
echo %~f0
echo %1
echo %2

 双击执行该文件,结果如下:

如果采用双击执行bat文件的方式,同理你们也可以发现执行到文件内定义的子程序时,%1、%2才会有意义;另外一个很有意思的点,文件内的子程序中的%0等于对应的标签,但是%~f0等于整个bat文件名。

三、进程/服务操作——tasklist、net

3.1 进程管理

  • 显示当前正在运行的进程:tasklist
  • 运行程序或命令:start 程序名
  • 结束进程,按名称:taskkill /im notepad.exe(关闭记事本)
  • 结束进程,按 PID:taskkill /pid 1234(关闭 PID 为 1234 的进程)

3.2 服务管理

  • 显示当前正在运行的服务:net start
  • 启动指定服务:net start 服务名
  • 停止指定服务:net stop 服务名
  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 spawn 打开 cmd 命令窗口,并调用某个软件读取某个文件的方法如下: 1. 首先,需要使用 Node.js 的 child_process 模块中的 spawn 方法。 2. 然后,使用 spawn 方法打开 cmd 命令窗口,语法如下: ``` const { spawn } = require('child_process'); const cmd = spawn('cmd.exe'); ``` 3. 在 cmd 命令窗口中,可以使用命令行的形式调用某个软件读取某个文件,例如: ``` cmd.stdin.write('"C:\\Program Files (x86)\\SomeSoftware\\SomeSoftware.exe" "C:\\SomeFolder\\SomeFile.txt"\n'); ``` 4. 最后,可以通过监听 cmd 命令窗口的输出事件,来获取命令行的执行结果。 ``` cmd.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); cmd.stderr.on('data', (data) => { console.error(`stderr: ${data}`); }); cmd.on('close', (code) => { console.log(`子进程退出码:${code}`); }); ``` 完整代码示例如下: ``` const { spawn } = require('child_process'); const cmd = spawn('cmd.exe'); cmd.stdin.write('"C:\\Program Files (x86)\\SomeSoftware\\SomeSoftware.exe" "C:\\SomeFolder\\SomeFile.txt"\n'); cmd.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); cmd.stderr.on('data', (data) => { console.error(`stderr: ${data}`); }); cmd.on('close', (code) => { console.log(`子进程退出码:${code}`); }); ``` 请注意,上述代码是基于 Node.js 环境的,如果你使用的是其他语 ### 回答2: 要使用spawn打开cmd命令窗口并调用某个软件来读取某个文件,你可以按照以下步骤进行操作: 1. 导入`spawn`模块:在Python程序中,首先需要导入`spawn`模块。可以使用以下代码实现导入: ```python import spawn ``` 2. 打开cmd命令窗口:使用`spawn.start() `函数打开cmd命令窗口。以下是示例代码: ```python spawn.start() ``` 3. 启动软件并执行命令:使用`spawn.send()`函数发送命令至cmd窗口,以启动软件并执行相应的命令。以下是示例代码: ```python spawn.send('path_to_your_software.exe') # 启动软件 spawn.send('command_to_read_file -f path_to_your_file.txt') # 执行命令并读取文件 ``` 请确保将`path_to_your_software.exe`替换为要打开的软件的路径,`command_to_read_file`替换为软件提供的读取文件的命令,并将`path_to_your_file.txt`替换为要读取的文件的路径。 4. 关闭cmd命令窗口:使用`spawn.close()`函数关闭cmd命令窗口。以下是示例代码: ```python spawn.close() ``` 通过按照以上步骤操作,你可以使用spawn打开cmd命令窗口并调用某个软件来读取指定的文件。记得替换相关路径和命令为你实际使用的内容。 ### 回答3: 要使用spawn命令打开cmd命令窗口并调用某个软件读取某个文件,您可以按以下步骤进行操作: 首先,您需要打开一个新的cmd命令窗口。您可以使用spawn命令在您的代码中执行此操作。具体的代码可能如下所示: ```python import subprocess def open_cmd(): subprocess.call("cmd", shell=True) # 调用open_cmd函数打开一个新的cmd命令窗口 open_cmd() ``` 接下来,您需要使用命令行中的特定命令来调用并运行您想要使用的软件。假设您想要调用Adobe Photoshop来读取一个名为file.txt的文本文件。您可以使用如下命令: ``` photoshop.exe file.txt ``` 要在打开的cmd命令窗口中调用该命令,您可以使用Popen函数。具体的代码可能如下所示: ```python import subprocess def open_cmd(): subprocess.call("cmd", shell=True) def call_software(software, filename): subprocess.Popen([software, filename]) # 调用open_cmd函数打开一个新的cmd命令窗口 open_cmd() # 调用call_software函数调用Adobe Photoshop来读取file.txt文件 call_software("photoshop.exe", "file.txt") ``` 请确保在调用软件时提供正确的软件名称和文件名。根据您想要使用的软件和文件类型,您可能需要更改以上代码中的命令和参数。 值得注意的是,以上代码仅适用于Windows操作系统。对于其他操作系统,您可能需要使用不同的命令和函数来实现相同的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值