start命令一般用来打开一个文件(通常是可执行程序)或文件夹,当然也可以是一个网址。
先用【start /?】命令大致了解帮助信息。
这个dir既可以是磁盘根目录,也可以是磁盘内的子目录。如果不加min或max参数,就会默认最大化打开(在前台打开)。
如果要打开e盘根目录,执行命令【start e:】。

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

这个path既可以是文档类的txt、doc、excel文件,也可以是多媒体mp3、mp4文件,也可以是可执行exe、bat文件。
尝试一下打开exe文件,【start D:绿色免安装小软件汇总PdgCntEditor_PDF目录编辑器PdgCntEditor.exe】。
顺利地打开了。

啥意思呢?啥叫注意空格问题?
cmd窗口中的不同参数之间往往使用空格进行区分,如果你使用空格往往意味着空格之后是下一个参数或者赋予空格前的参数的取值。
例如酷狗音乐的路径是【D:Program Files (x86)KuGouKGMusicKuGou.exe】,那么这时我们执行命令【start D:Program Files (x86)KuGouKGMusicKuGou.exe】,会发现出错了。提示找不到文件(夹)【D:Program】,容易知道cmd程序将空格前后的路径字符串分割开了,我们如何解决这个问题呢?

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

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

如果完整路径上有多个空格,这时候给每一个层级加双引号显然就比较麻烦了。
事实上我们还有另一种方法。
假设要打开文件夹【D:BaiduNetdiskDownload est1 2 3 est 3 4 5】,执行命令【start “” “D:BaiduNetdiskDownload est1 2 3 est 3 4 5”】(第一个双引号对应title,随意填什么内容,最好填”“,不是很重要)。

因为start命令还支持打开一个网站,所以我们可借用cmd窗口打造搜索引擎。
把下面的代码放进一个bat文件中,双击执行
键入要搜索的内容,比如说【日出】 ,再回车执行,就会自动打开默认浏览器并打开这个start后的网址了。

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

如果不想执行命令后窗口立即显示在屏幕上,也即想要在后台打开,可以用/min参数。
例如打开某exe程序,执行命令【start /min D:绿色免安装小软件汇总PdgCntEditor_PDF目录编辑器PdgCntEditor.exe】

果然是在后台悄**打开的。
但是我还是发现有一些程序,即使添加/min参数,
也无法在后台打开,比如酷狗音乐。
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文件,里面的代码为。
再新建一个main.bat文件,里面的代码为。
可见直接用【call path】就能成功调用。
但是在实验过程中我还是发现了一些问题。
第一个问题:假使子程序文件最后一行有pause,就会把靠近pause的几行中句号结尾、或者问号结尾的行当做命令看待,结果就会出错。
例如将demo.bat文件修改,而main.bat文件保持不变。
执行后pause的前4行都出现了问题。

第二个问题:假使我去掉子程序文件中最后一行的pause,也会出现最后几行命令失效的情况。
同样将demo.bat文件予以修改,然后main.bat保持不变。
执行结果如下图所示,最后4行又全军覆没。

千万别以为仅仅最后4行才会出问题,你们可以自己去试,一大堆bug,所以建议这个功能谨慎使用,能把代码放在主程序就放进去。
后来,我又在子程序bat中最顶头加了一行【chcp 95001】,结果没有明显的改善。
我对Call命令有点小失望!
————————更新分割符————————-
后来我才发现不是call命令的原因。
echo的输出如果有乱码;第一个原因是编码问题,cmd窗口默认是ANSI编码(GBK编码或GB2312编码),往往需要用命令【chcp 65001】改成utf8编码才能不乱码,第二个原因是误识别成命令,这时候可以将要echo的对象两边加上双引号。
demo.bat改成如下代码
然后再双击执行main.bat,就正常了。

2.1.2 带批处理参数地调用
新建一个main.bat文件代码如下
再新建一个demo.bat文件,如下
双击执行main.bat文件,结果如下

接下来让我为大家分析一下结果。
在call执行前,只有%0有意义;在执行子程序时,%0被子程序路径覆盖,%1和%2分别对应执行命令【call D:D-desktopdemo.bat arg1 arg2】中的arg1和arg2;在子程序执行完后,又回到了全局环境,因此%0的值还是主程序路径,而%1和%2没有取值。
从上面的分析过程,我们其实完全可以将批处理参数的逻辑联想至C语言的全局变量、局部变量。
2.2.1 不带批处理参数地调用(仅包括%0)
新建一个demo.bat文件,里面放的代码如下
执行该bat文件后,输出结果如下。

也就是说,call那一行会调用:part1那一行下面一行至最后一行,然后不是结束(这是和goto命令最大的不同),而是从call的下一行继续执行。
下面给出goto命令,以此和call的内部调用用法进行比较。
当bat文件内容如下时
执行结果如下!goto命令下面的一行“我累了…”,后面压根就没执行。

2.2.2 带批处理参数地调用
新建一个bat文件,代码如下:
双击执行该文件,结果如下:

如果采用双击执行bat文件的方式,同理你们也可以发现执行到文件内定义的子程序时,%1、%2才会有意义;另外一个很有意思的点,文件内的子程序中的%0等于对应的标签,但是%~f0等于整个bat文件名。
- 显示当前正在运行的进程:
- 运行程序或命令:
- 结束进程,按名称:(关闭记事本)
- 结束进程,按 PID:(关闭 PID 为 1234 的进程)
- 显示当前正在运行的服务:
- 启动指定服务:
- 停止指定服务:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/150894.html