一、在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. wampserver配置域名

    装载自http://blog.csdn.net/znb26/article/details/51204313

  2. YCSB测试Mysql,MongoDB,TokuMX,Couchbase性能

    测试是由同事完成的,这里只做收藏. 测试说明: 1.数据量为3kw记录,每条记录11个字段,一个为主键,主键为字符类型,类似:user****,后续为数值 其他10字段为字符类型,100字符,记录长度 ...

  3. c语言自定义BOOL函数

    C语言中没有BOOL类型变量,它是C++独有的,由于使用BOOL类型可以使代码更具有可读性,很多编程者都在C中自己定义了类似的应用,一般方法有两种: 第一种:采用宏定义方式 typedef int B ...

  4. (转)R空间数据处理与可视化

    前言 很多朋友说在R里没法使用高德地图,这里给出一个基于leaflet包的解决方法. library(leaflet) # 添加高德地图 m <- leaflet() %>% addTil ...

  5. SQL多表联查

    left join >>>外联 on >>>跟and一样使用,作为外联条件 表明后面加大写字母表示该表别名 例: select A.*,B.name userNam ...

  6. avalon使用笔记

    //保存取消操作(使用双向绑定) <div ms-controller='test'> <table border="1" style="border- ...

  7. spark优化

    spark.shuffle.consolidateFiles=false 默认是false,shuffle阶段不进行文件的合并,1000个map和1000个reduce将产生1000 000个文件. ...

  8. {Reship}{原文}{资治通鉴}

    this article came from here ================================================= 资治通鉴 (361人评分) 9.0   作者 ...

  9. web初学之request,session与application

    request (1)request的setAttribute()与getAttribute()方法一般都是成对出现,首先通过setAttribute()方法设置属性与属性值,然后通过getAttri ...

  10. Python 多线程 Condition 的使用

    Condition Condition(条件变量)通常与一个锁关联.需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例. 可 ...