Microsoft Windows

Windows 是一组由微软开发、经营、销售的图形化操作系统家族。

CMD 不等于 PowerShell

PowerShell 不直接执行 CMD 指令,而是通过别名(alias)支持。

PowerShell 的每一条命令都比 CMD 的复杂,称为 cmdlets(command-lets),是一个小型命令程序。

设计理念不同,CMD 只用于简单操作,PowerShell 则支持复杂的功能如运行复杂脚本、面相对象等。

PowerShell 更像一种高级语言。

补充:

PowerShell 和 CMD 最大的不同,并且也是和其它 Unix Shell 最大的不同在于 PowerShell 的 pipe 传递的是 .net object,而不是 raw 字符串。

启动 CMD/PowerShell

CMD 指令

命令行格式类似 Linux Shell:

<command> <arg 1> ... <arg n>

参数可以是文件名、路径、选项:

  • 文件名:与 Linux 相同(e.g. myfile.txt);

  • 路径:与 Linux 稍有不同(e.g. D:\Program Files\python)

    • 惯用'\',有时也支持 '/'

    • 开头为盘符(e.g. C:,D:)。

  • 选项:以'/''-'开头,后面一般跟一个字母(e.g. erase /f myfile.txt,强制删除文件)。

空格和引号的含义不规律:

echo 不管参数间隔几个空格,都正常输出。即使带有双引号,也正常输出。

cd 则会忽略双引号。

重定向和管道与 Linux 一样。

常用命令

CMD命令

功能

Linux Shell 命令

help

查看帮助文档

man

cls

清屏

clear

echo

显示消息

echo

cd

切换当前路径

cd

del/erase

删除

rm

move

移动、重命名

mv

copy

复制

cp

mkdir/md

新建目录

mkdir

type

显示文件内容

cat

fc

比较文件内容

diff

dir

显示当前路径

ls

findstr

搜索字符串

grep

where

寻找命令路径

whereis

文件权限

访问控制列表(Access Control List, ACL)

  • 右键单击文件 --> "属性" --> "安全" 选项卡;

  • 描述一个用户/用户组对该文件拥有哪些权限

CMD 变量

赋值:set foo=bar(同样慎用空格!);

访问:%foo%,将 foo 的值替换掉 %foo%

例如,为环境变量 PATH 添加一条路径:set PATH=%PATH%;D:\game 002

删除:set foo=

set查看所有环境变量 & 当前局部变量

set foo可以查看变量名中包含 foo 的变量

set 指令仅影响当前 CMD 窗口

要永久修改可以用 setx 指令(当前 CMD 窗口不会立即生效)

setx foo "bar" 添加/修改当前用户的环境变量

setx foo "bar" /M 添加/修改系统环境变量

没有永久删除环境变量的指令

CMD 脚本

创建脚本文件:新建空白文档,直接修改后缀名为.bat(也叫批处理文件);

双击运行,或者使用命令行 call script.batscript.bat

语法:

  • if, for, 返回值......

  • 例如,创建 file0.txt ~ file5.txt 和 text0.txt ~ text5.txt 的脚本:

@echo off
for /L %%i in (0,1,5) do (echo.> file%%i.txt & echo.> text%%i.txt)

推荐用 python

PowerShell 指令

PowerShell 指令又称为 cmdlets(command-lets);

每个指令是一个形如 Verb-Noun 的组合

E.g. Get-VerbGet-CommandGet-MemberGet-Help

指令后跟的参数名要以'-'开头,其余格式与 CMD 基本相同

e.g. Get-Command -Name *-Process

PowerShell 对象

查看对象:Get-Member

用法:使用管道将要查看的对象传给 Get-Member

e.g. Get-Process | Get-Member

常见类型:System.String, System.Int32, System.Int64...,支持所有 .NET 类型。

PowerShell 别名

PowerShell 看上去能够支持很多 CMD 指令归功于别名机制

查看别名与指令名的对应:Get-Alias(e.g. Get-Member 与 gm)

别名 --> 指令名:Get-Alias [-Name] gm

指令名 --> 别名:Get-Alias -Definition Get-Member

PowerShell 脚本

脚本文件 .ps1 文件

PowerShell 脚本比 CMD 更接近于高级语言

for ($i = 0; $i -le 5; $i++) {
    New-Item file$i.txt -ItemType File
    New-Item text$i.txt -ItemType File
}

跨平台面相对象语言。