一、程序启动命令——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 服务名

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

  1. 【批处理DOS-CMD命令-汇总和小结】-跳转、循环、条件命令(goto、errorlevel、if、for[读取、切分、提取字符串]、)cmd命令错误汇总,cmd错误

    一.本文摘要 此文主要研究对代码分支化执行和重复利用的实现. 分支化执行指根据中途的实际执行结果决定下一步执行的代码,跳转的代码行号:分支化执行大概分为跳转执行.条件判断执行:因此,分支化执行基本是只 ...

  2. 【批处理DOS-CMD命令-汇总和小结】-CMD窗口的设置与操作命令(cd、title、mode、color、pause、chcp、exit、goto :eof)

    一. 改变cmd窗口当前目录--资源管理器或cd 具体方法详见我的专栏中另一篇文章的章节1.5. [批处理DOS-CMD命令-汇总和小结]-文件与目录操作命令(md.rd.xcopy.dir.cd.s ...

  3. 【批处理DOS-CMD命令-汇总和小结】-将文件夹映射成虚拟磁盘——subst

    一.subst命令的意义 有时候文件(夹)的目录很深,每一次打开的时候需要一直切换目录,有了镜像虚拟磁盘subst命令,临时地将文件夹映射成磁盘显示在我的电脑中,就会让工作变得更轻松,可以节约很多时间 ...

  4. windows常用dos(cmd)命令

    windows常用dos(cmd)命令.md 参考网址: https://mp.weixin.qq.com/s/DJMGUmw8hPMkWMEbj4KVIg 前言 最近一直在Windows下操作,但与 ...

  5. 利用批处理执行 cmd命令

    写在前面: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. 有时候,我们会用到 cmd命令控制台来打开 ...

  6. CMD命令行中以管理员权限启动应用程序实现方法

    这篇文章主要介绍了CMD命令行中以管理员权限启动应用程序实现方法,本文使用一个JS脚本来实现,需要的朋友可以参考下 很多时候我们需要管理员权限来运行bat那么就需要结合vbscript来实现了 方法一 ...

  7. 【批处理DOS-CMD命令-汇总和小结】-Cmd窗口中常用操作符(<、<<、<、>、>>、>、、、||、|、()、;、@、““、‘‘)

    一.重定向操作符--<.<<.&<.>.>>.&> 1.1 清除重定向--<和> cmd>file     //cmd ...

  8. 【批处理DOS-CMD命令-汇总和小结】-cmd扩展命令、扩展功能(cmd /e:on、cmd /e:off)

    一.问题背景 在打印erase的帮助信息时,提示如果启用扩展命令,...,如果是这个命令出现还好,没有引起我的注意,但是我发觉好多命令的最后都有提到这个扩展功能了. 不得已去百度谷歌查一通,资料很少, ...

  9. 【批处理DOS-CMD命令-汇总和小结】-cmd的内部命令和外部命令怎么区分,CMD命令和运行(win+r)命令的区别,cmd的命令扩展(扩展命令)

    一.cmd的内部命令和外部命令怎么区分? 区分规则很简单,在cmd窗口中用help命令能打印出来的命令都是cmd内部命令,没包括在里面的都是外部命令. D:\>help 有关某个命令的详细信息, ...

  10. 【批处理DOS-CMD命令-汇总和小结】-批处理命令中的参数%0、%1、%2、%[0-9]、%0-9和批处理命令参数位置切换命令shift,dos命令中操作符%用法

    一.执行CMD命令的3种方式 执行CMD命令的两种方式分别是手动创建一个Cmd窗口和执行bat批处理文件. 第一种,先手动创建一个cmd窗口,然后往里面输入cmd命令,最后回车执行. 第二种,先在一个 ...

最新文章

  1. python导入模块报错syntaxerror_SyntaxError: invalid syntax python错误解决方法
  2. jquery rotate.js
  3. Android常用开源库之Universal-image-loader
  4. SPOJ Python Day2: Prime Generator
  5. leetcode 62. 不同路径(dp)
  6. Linux 启动mysql提示表不存在
  7. CSS3 文本阴影 text-shadow属性
  8. OGRE源代码resource分析
  9. Reloading Java Classes 101: Objects, Classes and ClassLoaders Translation
  10. 《Phper》MySQL 的一些基本操作
  11. 《货币金融学》期末复习题
  12. 数学分析(3): 函数极限
  13. 服务器带外管理默认账号
  14. 银行笔试用计算机,2018银行招聘笔试:如何备考银行计算机
  15. LTE网络PCI规划
  16. EI国际会议计算机2018,【Ei检索】2018年自动控制,机电和工业工程国际会议
  17. matlab 2015 积分,浅谈MATLAB在数值积分中的应用
  18. 人工智能知识体系梳理
  19. 340. 至多包含K个不同字符的最长子串
  20. 记 · 再看 · 前端社区氛围

热门文章

  1. python appium自动化测试框架unittest_appium+python+unittest自动化测试
  2. 图片去水印神器-图片免费去水印app神器
  3. 分享一个非常不错的微信聊天记录导出软件
  4. 【安鸾渗透实战平台】实战渗透/企业网站
  5. 《华尔街日报》制造商纷纷在仿真软件上下注
  6. 联发科推出天玑1200,新一年的头道“5G甜点”究竟滋味如何?
  7. 2022TWS蓝牙耳机推荐,盘点600元真无线蓝牙耳机
  8. 9 应用系统负载分析与磁盘容量预测
  9. 11.cuBLAS开发指南中文版--cuBLAS中的Level-1函数amax()和amin()
  10. [C程序设计]设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球面积、圆柱体积。