一、在cmd中执行一个不带后缀的命令(不带路径),首先会在无后缀的系统命令(如cd、dir等)中搜索,如果找到了就执行该命令,

(dir是无后缀的系统命令所以优先执行,无视当前目录中的dir.exe)

如果在无后缀的系统命令中找不到,则在当前目录中查找该命令+.exe、.msc、.bat等后缀的可执行文件或批处理文件,如果找到了则执行,如果没找到,再在环境变量那些目录中按上述规则搜索

 (系统的tasklist命令其实是tasklist.exe,所以在无后缀的系统命令中找不到,然后就在当前目录中搜索以tasklist命名的可执行文件【后缀为.exe、或.bat、.msc】当前目录中正好有个tasklist.exe)

(当前目录中不存在tasklist.exe或者tasklist.bat、tasklist.msc等可执行文件,遂在环境变量中搜索,找到系统目录中的tasklist.exe执行之)

二、如果cmd中输入的命令带后缀(不带路径),则首先在当前目录中搜索该文件若存在,如果该文件是一个可执行文件或批处理文件,则执行之,如果是其他一般文件则用与该类型文件关联的默认程序打开它

(在cmd当前工作目录中放入tst.exe、tst.exe.exe、tst.txt、tst.txt.exe四个文件,在已加入环境变量的目录D:\Program Files\Tencent\QQ\Bin中也放入同名的四个文件,不过exe文件输出内容以及txt文件存储的文本不同,分别显示了对应文件名和所在位置。如上面两图所示,在cmd中执行tst.exe和tst.txt命令,结果分别执行了当前目录中的tst.exe和打开了当前目录的tst.txt,表名优先在当前目录中搜索该文件。)

若当前目录不存在该文件,则在当前目录中查找是否存在以该文件名+可执行文件或批处理文件后缀(.exe、.bat、.msc等)命名的文件,如果找到了则执行之;

(将当前目录中的tst.exe和tst.txt删除后,再执行tst.exe和tst.txt命令,结果如上两图所示,分别执行了当前目录中的tst.exe.exe和tst.txt.exe程序,这说明在当前目录找不到该文件则继续在当前目录找以该文件名+可执行文件或批处理文件后缀命名的文件来执行,而不是去环境变量中查找该文件)

如果在当前目录中上述两种情况都未找到,才在环境变量所设置的那些目录中按上述顺序搜寻先是按cmd命令所给的准确文件名查找,如果有,是程序或批处理则执行,是其它文件就用默认程序打开;

(将当前目录中的tst.exe.exe和tst.txt.exe也删除后,cmd执行tst.exe和tst.txt命令,结果执行了已加入环境变量的目录中的tst.exe程序以及打开了该目录中的tst.txt文件,说明如果在cmd当前目录没找到该文件或该文件名.exe等可执行文件,就转而到环境变量中找该文件)

如果在环境变量目录中未找到该文件,再在环境变量目录中查找是否存在该文件名+可执行文件或批处理文件后缀(.exe、.bat、.msc等)的文件,如果找到了则执行之。

如果还是没有,则只好报错,该命令 is not recognised as an internal or external command, operable program or batch file.

当然如果cmd命令中带路径,很明显只在指定目录中寻找文件,而不会到环境变量中去找,如果文件名不带后缀,则跟第一种情况一样,在指定目录中寻找这个名称的可执行文件或批处理文件执行,找不到报错;如果带后缀,若存在,则执行或用默认程序打开,若不存在,寻找该文件名+可执行文件或批处理文件后缀的文件来执行,找不到报错。

ps: 又是一篇洋洋洒洒辛苦钻牛角尖的心血。我特么是不是钻得太细了? 强迫症使然,这是我学习过程中最大的绊脚石和障碍,严重影响效率。实际应用中哪有这么复杂的情况?命令中还带后缀,文件名还接连多个后缀,真是太钻牛角尖了。实际应用中一般都是很简单的,文件名+1个后缀,也不大可能会有这种刻意为之的重名,cmd命令一般都是第一种情况,不加后缀,执行系统命令或当前目录或环境变量目录中的可执行文件或批处理文件。但是我特么有强迫症,不去想这么细心理不舒服。

Windows cmd命令搜索顺序的更多相关文章

  1. Windows CMD命令大全(转)

    Windows CMD命令大全   命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行 ...

  2. 【转】Python实现修改Windows CMD命令行输出颜色(完全解析)

    用Python写命令行程序的时候,单一的输出颜色太单调.其实我们可以加些色彩,比如用红色表示警告,绿色表示结果正常等.网上也有几篇类似的帖子,但是没有把问题讲清楚,贴的代码也不是太清晰.这里,对Win ...

  3. Windows —— cmd命令

    Windows —— cmd命令 cd 命令 进入cmd的默认目录:默认为 C:\Users\Administrator> 进入文件夹:cd 文件夹名 返回上一层目录:cd.. 切换目录: 清屏 ...

  4. windows cmd命令显示UTF8设置

    windows cmd命令显示UTF8设置   在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容.在默认情况 ...

  5. windows cmd 命令和 linux 命令

    windows cmd 命令和 linux 命令 常用的内部命令有md.cd.rd.dir.path.copy.type.edit.ren.del.cls.ver.date.time.prompt.常 ...

  6. SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法

    create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...

  7. Python实现Windows CMD命令行彩色输出

    #! /usr/bin/env python #coding=utf-8   import ctypes,sys   STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE ...

  8. Windows cmd 命令行基本操作

    Windows cmd 命令行基本操作 1. 进入到指定根目录 注意:不区分大小写 例如进入到 D 盘 2. 进入到指定的目录 例如 (如果目录文件名太长,可以使用 tab 键来自动补全.重复按可以进 ...

  9. Windows cmd命令

    运行操作 CMD命令锦集       1. gpedit.msc-----组策略 2. sndrec32-------录音机 3. Nslookup-------IP地址侦测器 ,是一个监测网络中DN ...

随机推荐

  1. ASP.NET生成WORD文档,服务器部署注意事项

    网上转的,留查备用,我服务器装的office2007所以修改的是Microsoft Office word97 - 2003 文档这一个. ASP.NET生成WORD文档服务器部署注意事项 1.Asp ...

  2. 24. Oracle 10g安装检测中DHCP报错

    编辑hosts文件: #vi /etc/hosts 添加虚拟机ip 主机名,原来的保持不变,如: 192.168.100.12          localhost.localdomain

  3. Foundation ----->NSSet

    1.集合类     NSString *s1 = @"zhangsan";     NSString *s2 = @"lisi";     NSString * ...

  4. shell生成随机数的几种方法

    一.通过内部系统变量($RANDOM) 生成0-32767之间的整数随机数,若超过5位可以加个固定10位整数,然后进行求余. [root@web01 scripts]# echo $RANDOM [r ...

  5. HDOJ(1348)二维凸包

    Wall http://acm.hdu.edu.cn/showproblem.php?pid=1348 题目描述:有个国王想在他的城堡外面修围墙,围墙与城堡的最小距离为L,要求围墙长度最短.求围墙的长 ...

  6. [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat

    概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...

  7. Chrome54安装最新版Flash版本办法

    从 Chrome54 版本开始,flash默认已经不能使用了.打开机器上的C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Pe ...

  8. Gate level Simulation(门级仿真)

    1 什么是后仿真? 后仿真也成为时序仿真,门级仿真,在芯片布局布线后将时序文件SDF反标到网标文件上,针对带有时序信息的网标仿真称为后仿真. 2 后仿真是用来干嘛的? 检查电路中的timing vio ...

  9. Python内置函数总结

    1.abs() 取绝对值 1 2 3 4 >>> a = abs(-7) >>> b= abs(7) >>>print(a,b) 7 7 2.al ...

  10. c++面试题

    转自http://blog.csdn.net/jingxuewang110/article/details/6789557/ 1.new.delete.malloc.free关系 delete会调用对 ...