[Windows]Windows路径探究
Windows路径是我们经常使用的东西,它看似简单,实际上隐含许多细节,这些都是在平常的使用过程中注意不到的。下面让我们来看看各种各样的Windows路径。
提起路径,我们都会想到“绝对路径”和“相对路径”,实际上绝对路径是一个广泛的概念,它表示的是可以唯一定位一个文件或文件夹的路径,有多种形式的路径都属于绝对路径的范畴,例如:
完整路径(Full path)
我们平时所说的“绝对路径”通常就是指完整路径,它的格式如下:
C:\Windows\System32\calc.exe
UNC(Universal Naming Convention通用命名规范)路径
UNC路径用于在局域网上定位文件或文件夹,在通过网上邻居访问其它系统上的共享文件时使用的就是UNC路径。UNC路径的格式如下:
\\PC101\ShareFiles\job.doc
其中PC101是目标系统的计算机名,ShareFiles是目标系统上的共享文件夹名称。
以\\?\开头的路径
在某些手工辅助杀毒的工具中可以看到以\\?\开头的路径,这种路径我还找不到正式的名称。完整路径和UNC路径都可以以\\?\开头:
\\?\C:\Windows\System32\calc.exe
\\?\UNC\PC101\ShareFiles\job.doc
相对路径(Relative path)
上面四种路径都可以在本地或网络上绝对定位一个文件,因此属于绝对路径。另一种我们常常使用的是相对路径,这种路径需要与进程的当前文件夹(Current directory)一起合作才可以定位一个文件或文件夹。进程的当前文件夹并不是指EXE文件所在的文件夹,它是每个进程都有的一个属性。例如在命令提示符中显示的路径就是这个cmd.exe进程的当前文件夹,使用cd命令可以改变当前文件夹,无论当前文件夹如何改变,cmd.exe文件所在的文件夹总是不变的。在进程启动的时候可以指定它的当前文件夹,例如在快捷方式的属性中有一个“起始位置”输入框,这个就是进程启动后的当前文件夹。如果在启动时不指定进程的当前文件夹(直接双击EXE文件的情况),那么EXE文件的所在文件夹就会作为它的当前文件夹。
纯粹的相对路径格式如下:
Windows\System32\calc.exe
要注意的是相对路径的开头不能有\,很多人以为有没有\都是一样的,其实不然,以\开头的路径是另外一种路径,下文会详细介绍这种路径。
如果在进程中操作文件时传递一个相对路径,那么进程会将当前文件夹的路径与这个相对路径合并,得到一个完整路径。例如命令提示符的当前文件夹是C:\Windows,如果执行start System32\calc.exe命令,程序就会将两个路径合并得到C:\Windows\System32\calc.exe。
由于这样的特性,当前文件夹又称为工作文件夹,因为进程使用相对路径时都是针对该文件夹的。
除了上面所说的纯粹的相对路径,还有两种特殊的相对路径,为了不至于混淆,不再将它们称为相对路径。
以\开头的路径
上面说过相对路径不能以\开头,一旦如此,它就表示相对于当前文件夹根目录的路径。例如进程的当前文件夹是C:\Windows,那么\System32\calc.exe就表示C:\System32\calc.exe。不论当前文件夹的路径有多深,只取根目录进行合并。可以在命令提示符中进行验证:首先将C:\Windows设置为当前文件夹,然后执行start \System32\calc.exe命令,将会提示错误,所找不到文件。再执行start \Windows\System32\calc.exe命令,这时计算器程序成功启动了,证明了上面的说法。
以盘符和冒号开头的路径
这种路径就像是拼写错误的完整路径,它的格式如下:
C:System32\calc.exe
盘符加冒号是一种特殊的表示法,表示的是进程在“该分区上的当前文件夹”。这里又蹦出来了一个当前文件夹,这与上文的当前文件夹是不同的。简单来说,对于每一个分区,进程都会保存在这个分区上最后使用的当前文件夹。可能解析的不够好,那么可以使用命令提示符来操作一遍以加深理解。
运行cmd,执行cd /d C:\Windows\System32命令进入该文件夹,然后切换到其它的分区,再执行C:calc.exe命令,可以看到计算器程序启动了。
我们在执行cd命令进入C:\Windows\System32文件夹后,进程便以此为当前文件夹,当切换到其余的分区时,进程先将这个文件夹的路径保存起来,再进行切换。使用盘符和冒号的形式读取指定分区上的当前文件夹。
路径中的限制
除了路径格式上的限制,还有很多字符上的限制,下面一一来看看各种路径有什么限制。
除了以\\?\开头的路径之外,其它路径的长度都不能超过260个字符(包括结尾的\0字符),而\\?\开头的路径长度可以达到约32000个字符(系统在处理\\?\前缀的时候可能将它扩展成更长的字符串)。网络上流传的一则技巧:文件路径太长而不能被删除,可以在执行del命令时在路径前加上\\?\前缀。
文件或文件夹名称的最后一个字符不能为空格或句点。但在路径中,最后一个字符可以为句点,因为路径中的句点表示的是当期文件夹(这与上文的当前文件夹完全不同),两个句点表示的是上一级文件夹。以\\?\开头的路径中不能使用句点表示当前文件夹或上一级文件夹,在资源管理器的地址栏中虽然可以这么做,那是因为资源管理器对其作了处理。
文件或文件夹名称不能包含的字符 :
< > : " / \ | ? *
在路径中可以使用 : \ ?,冒号是与盘符一起使用的,问号是\\?\前缀中特有的,除此之外不能出现这两个字符;而\是文件夹分割符。虽然我们也能使用/作为分隔符,实际上这是不允许的,系统在处理路径时会将/替换成\。另外,如果路径最后一个字符是\,那么该路径表示的是文件夹;否则表示的是一个文件。
UNC路径的计算机名部分不能出现以下字符:
` ~ ! @ # $ % ^ & * ( ) = + _ [ ] { } \ | ; : . ‘ “ , < > / ?
确实是够多的了,实际上标准的计算机名推荐只使用26个英文字母、10个数字以及-(连字符),否则可能会出现找不到计算机的情况。在更改计算机名的时候如果出现非标准字符,系统会作出提示。
转载于:https://www.cnblogs.com/zplutor/archive/2010/08/21/1805335.html
[Windows]Windows路径探究相关推荐
- mysql和web文件夹_Linux使用记录---自动备份MySQL和web文件夹到windows共享路径
环境:centos7下有两个PHP网站和MySQL数据库,需要将网站内容和数据库备份到windows共享存储上 思路:在Centos上创建临时文件夹,备份两个数据库到临时文件夹,再备份Web文件到临时 ...
- python安装到桌面的路径是什么_Python 获取windows桌面路径的5种方法小结
这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑. 前两个方法是通过注册表来获取当前windows桌面绝对路径,比较推荐使 ...
- windows java路径问题_java 文件路径问题
问题 windows下路径分割符'',java程序可识别的是'\'或'/',通过用户输入的路径进行转换,变成程序可识别的,但是转化后的路径程序不识别. 程序 import java.io.FileNo ...
- Windows变量路径与通配符
Windows变量路径 %SystemDrive% 操作系统所在的分区号.如 C: %SystemRoot% 操作系统根目录.如 C:\WINDOWS %windir% 操作系统根目录.如 ...
- C语言获取Windows桌面路径
C语言获取Windows桌面路径 总述 思路 函数 函数RegOpenKeyEx() RegOpenKeyEx()参数 RegOpenKeyEx()权限掩码 注册表五个主键 了解上信息后写出下面的代码 ...
- 【WCE】Windows Shell 路径处理函数
MSDN Library 上从未公布过 Windows Shell 路径处理函数的 Windows CE 实现信息.不过 $(_WINCEROOT)/PUBLIC/SHELL/OAK/LIB/$(_T ...
- Python 获取windows桌面路径的5种方法小结
今天小编就为大家分享一篇Python 获取windows桌面路径的5种方法小结,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 这里介绍了5中python获取window桌面路径的方法 ...
- python中如何写windows系统路径_Python在windows系统中表示文件路径
Windows系统中,路径使用的是\.而Linux系统中,路径使用/.\同时也是转义字符,所以使用\的时候会有问题. 如果运气好,\后没有可以转义的字符,还是可以正常输出:print("C: ...
- [ffmpeg][qsv][windows]windows下配置fmpeg英特尔qsv
[ffmpeg][qsv][windows]windows下配置fmpeg英特尔qsv 文章目录 [ffmpeg][qsv][windows]windows下配置fmpeg英特尔qsv 预装mingw ...
- Windows/Windows下堪称神器的软件集合
Windows/Windows下堪称(我封的 hhh)神器的软件集合,持续更新 以下排名不分先后,按照字母表顺序排列 CuteHttpFileServer/chfs:免费的.HTTP协议的文件共享服务 ...
最新文章
- appium-java自动化框架设计学习
- VBS基础篇 - 内置函数
- Unity3D GUI中的图片尾随鼠标旋转脚本
- mongodb系列-访问控制
- STL中算法锦集(二)
- android 生命周期_Android生命周期组件 Lifecycle 源码详解(一)
- 达内计算机毕业好找工作吗,大学生学什么好找工作 转行IT行业需要多久
- Cap03_项目立项管理
- Java 中的抽象类和接口
- volatile解析
- php教师评价系统,正韵教学评价系统 v3.2
- 10个小故事,思考大数据
- opengl简单模拟行星运转
- 从零开始的颜值评分 游戏项目 (一)Maven的相关配置 ——第一个SpringBoot小程序
- Python-Flask开发微电影网站(八)
- mysql百度翻译_百度翻译与谷歌翻译哪个好,亲测给你们看
- Lake Shore 625 型超导磁体电源
- dva数据流实现自动(调用接口)刷新页面数据【React-Redux框架】
- 支付宝获取二维码充值
- Element-UI安装使用教程(一)
热门文章
- stm32如何执行软复位_常见的单片机复位方式及其原理分析
- 创建linux目录,Linux目录的创建方法
- python基础网易_十年Python大牛花了三天总结出来的python基础知识实例,超详细!...
- 词云图可视化python_python 可视化 词云图
- Android获取顶部状态栏statusBar高度、底部导航栏navigationBar高度
- 开发日记-20190624 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 1
- 三次握手和四次断开问题
- 深入理解groupByKey、reduceByKey区别——本质就是一个local machine的reduce操作
- angular路由移除#号(跟nginx)
- 使用CoreOS及Docker搭建简单的SaaS云平台