我们依然不讲代码,而是先说命令行。
为什么命令行如此重要?之前说到,命令行是你和电脑对话的地方。你可以用句子的方式把信息发给电脑,电脑再以句子的方式给你回应。在编程领域,有些消息只能用命令行告诉电脑——或许是编程人员早就习惯了,或许打字更有效——毕竟你和闭着眼睛的人交流,肯定比捂着耳朵的人交流方便(你不能用鼠标写字!)。在编程中,大部分消息都是靠说,而不是靠比划(画图就是比划的例子)。呃……总之你得懂命令行。
在Windows里有命令行,Linux也有,但是大同小异。要弄懂命令行怎么干活,只要想象电脑没有屏幕,但是会说话。比如——
——“桌面上有什么?”
——“有3个文件夹:回收站,资料,工具;5个文件:便签.txt,语言哲学.pdf,截图.png,antistops.py,安装程序.exe”
——“E盘里有什么?”
——“有1个文件夹:work”
——“work文件夹里有什么?”
——“您的电脑里有不止一个名为work的文件夹。”
顿时尴尬,毕竟眼前就有个work文件夹,却进不去。所以设计命令行的人想出了“当前位置”这个概念。我们知道文件夹的组织可以看成“树”——(其实#不能用于文件名,我用的cs而不是c#)
实际肯定比这复杂。当前位置的意思就是,你只能站在这棵树的一个文件夹节点上,即你不能同时位于多个文件夹。你只能看到周围的点。以上图为例,你想让电脑运行hello.exe,图上却有两个hello.exe。加上“当前位置”这个概念后,你只能打开当前文件夹中的文件。而同一个文件夹中,文件名不能重复,就保证了你能唯一地指定一个文件。想运行文件夹(很多人管文件夹叫目录,因为不拗口)C下的hello.exe,就要走到目录C 。
但是人是会走丢的。设计者是这么处理的:
1.x盘是固定的,不必多说。
2.E盘下的目录C记作“E:\C”,再下层的hello.c记作E:\C\hello.c
层层嵌套。所以如果你在运行栏(或者点开始菜单里的“运行”)输入cmd回车,我猜你明白C:\Users\Administrator>是什么意思了,表示你处在一个名叫Administrator的文件夹里。
其实,没有“当前位置”,也是可以定位每一个文件的。上例中,不管你在哪里,输入E:\C\hello.exe,电脑都知道你要找的不是E:\C#\hello.exe 。但是每次树一长串,谁愿意呢?另外,命令行里显示的那个目录叫“当前工作目录”,简称工作目录,我相信你几次用命令行运行python就会明白为什么叫“工作”了。
所以你可以对命令行说这些东西:
- 进入某个子目录(即当前文件夹中的文件夹)—— cd xxx
- 进入上一层目录(可以称为父目录) —— cd .. (就是两个点)
- 进入E:\C —— cd E:\C
- 进入自身(“并非毫无用处”) —— cd . (一个点)
cd 是change directory 的首字母
(你可能发现某些命令并不起作用,因为上图的home是假的。上面的命令只有当在同一个盘中才有用,不能用cd 换盘。想切换盘符,直接输入“盘符名:”回车,比如e: 回车 )
上一篇文章还说到,“python xxx.py”是一条命令。其实命令分为两部分,第一个词是一部分,剩下的是第二部分。python是python.exe,在命令行.exe可省略(不省也可以用,但习惯上省略)。python xxx.py就是启动python.exe,并且告诉程序一个额外信息: xxx.py。这可能令人困惑,运行程序是允许加点别的东西的(加一个算少的了)。cd xxxxx,就是运行cd.exe 附加【参数】xxxxx——虽然未必有cd.exe,但完全可以当做有。所有的命令,几乎都只有第一个词真的做了事。(exe文件也是文件)
最后还要说绝对路径和相对路径,用处在于,你如何称呼一个可能重名的文件?仍然用刚才的例子,你位于目录C,想运行隔壁目录C#的hello.exe 。目前有三种办法:
1. cd .. 再 cd C# 再 hello (.exe可以省略)
2. E:\C#\hello
3. ..\C#\hello.exe
2和3都做到了不切换工作目录而处理了别的目录的exe文件。2叫做绝对定位,因为从盘开始;3叫相对定位,因为从自身开始。电脑只认盘符,要是没有,就假设是从工作目录开始。虽然这样看,好像上层目录被当成名为..的子文件夹了,但是无妨——这其实挺奇妙。(你仔细看看树图,会发现节点都可以看成根节点,有点参考系的味道)
两种定位都是可以的。其实还有一种定位——你有没有想过,python.exe在哪?!还记得安装第一步点的PATH么,名为“环境变量”之物,环境变量里写着的若干目录可以无条件引用(当前目录也是无条件引用的)。电脑收到你的命令python,首先在工作目录里找python.exe,找不到就到环境变量里的目录里找,再找不到就报错。
然后你就能读懂这些了:(除了.和..用法特别,还有\ 表示当前盘起始,可以用cd \ 、cd \C 等等 )
* cd xxx (两种定位皆可)
* cd \ ——回到本盘起始位置
* dir —— 查看当前目录信息(directory 缩写)
* dir xxx —— 查看xxx目录(两种定位皆可)
* md xxx —— 建立新文件夹(两种定位皆可) (make dir缩写)
* rd xxx ——删除【空】文件夹(两种定位皆可)(remove dir 缩写)【请注意!命令行删除不进回收站,是永久删除!】
* cls ——清屏(clean screen 缩写)
* copy xxx xxx —— 复制文件内容(不包括名称),后面的名字为新的名字(当然,两种定位皆可)
* del xxx —— 删除文件,不包括文件夹(可用 del * 删除所有文件,del * .txt 删除所有.txt文件,等等)(delete缩写)
* deltree xxx —— <危险操作>删除文件夹以及一切内容
* ren xxx xxx —— 重命名(rename 缩写)
命令可以有参数,即在输完上述命令后,还可以后跟一些东西。之前说到python.exe 可以后跟文件名,但参数只是字符串,不一定是文件名。你输入的命令如果有多个词,那么所有的词都会告诉第一个词,因为那是唯一被运行的东西,他会收到所有参数。比如dir命令可以有超过2个参数(除了本身dir 和常规的xxx),比如后跟\a或\s等等,请自行百度“dos命令”