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
开始菜单/快捷键 Win + R --> 键入 cmd 或 powershell;
Shift + 右键单击空白处 --> "在此处打开 PowerShell 窗口";
安装或更新 PowerShell:https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4
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 一样。
常用命令
文件权限
访问控制列表(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.bat
或script.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-Verb
,Get-Command
,Get-Member
,Get-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
}
跨平台面相对象语言。