---
layout: post
title: Windows CMD语法和常用命令
description: 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全、稳定,有的用户还在使用
keywords: PHP,树形结构,源代码
author: admin
date: 2023-06-02 10:38
category: 网络技术
tags: windows
---


Windows CMD ,cmd是command的缩写 。即命令行 。虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全、稳定,有的用户还在使用,所以一般Windows 的各种版本都与其兼容,用户可以在Windows 系统下运行DOS
命令提示符、终端等进一步提高了与DOS下操作命令的兼容性,用户可以在命令提示符直接输入中文调用文件。


## 基本命令

### **copy**

```
copy 文件a + 文件b
```

将文件a和文件b合并,合并到a上。

### **dir**

`dir /s /b /a-d` 显示文件夹以及子文件夹下的文件
`/s` 显示文件和子文件下的文件 `/b`不显示文件和摘要 `/a d` 只显示目录 `/a -d` 不显示目录,只显示文件

`dir /a-d` 只显示文件
`dir /ad` 只显示目录

把目录写入文件时,`cmd>a.txt`中间不加空格
把当前目录下的所有子文件目录写入a.txt
```
dir /s /b /ad>a.txt
```
**把当前目录下的所有子文件写入b.txt**
```
dir /s /b /ad>b.txt
```

```
[drive:][path][filename]
              指定要列出的驱动器、目录和/或文件。
  /A          显示具有指定属性的文件。
  属性         D  目录                R  只读文件
               H  隐藏文件            A  准备存档的文件
               S  系统文件            I  无内容索引文件
               L  解析点             -  表示“否”的前缀
  /B          使用空格式(没有标题信息或摘要)。
  /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
              禁用分隔符显示。
  /D          跟宽式相同,但文件是按栏分类列出的。
  /L          用小写。
  /N          新的长列表格式,其中文件名在最右边。
  /O          用分类顺序列出文件。
  排列顺序     N  按名称(字母顺序)     S  按大小(从小到大)
               E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
               G  组目录优先           -  反转顺序的前缀
  /P          在每个信息屏幕后暂停。
  /Q          显示文件所有者。
  /R          显示文件的备用数据流。
  /S          显示指定目录和所有子目录中的文件。
  /T          控制显示或用来分类的时间字符域。
  时间段      C  创建时间
              A  上次访问时间
              W  上次写入的时间
  /W          用宽列表格式。
  /X          显示为非 8.3 文件名产生的短名称。格式是 /N 的格式,
              短名称插在长名称前面。如果没有短名称,在其位置则
              显示空白。
  /4          用四位数字显示年


可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)
来替代预先设定的开关。例如,/-W。

```



### cd

```arduino
//进入d盘
D:
//进入F盘
F:
```

```bash
cd /? //获取使用帮助

cd \ //跳转到硬盘的根目录

cd C:\WINDOWS //跳转到当前硬盘的其他文件

d: //跳转到其他硬盘

cd /d e:\software //跳转到其他硬盘的其他文件夹,注意此处必须加/d参数。否则无法跳转。

cd.. //跳转到上一层目录
```

### 查看目录文件

```bash
//查看当前目录下的文件,类似于linux下的ls
dir
```

如果是需要查看隐藏文件的或者更多操作的话,可以使用 `dir /?` 来查看其它用法,cmd这点挺好的。

```auto
python /?
```

### 创建目录和删除目录

```arduino
//创建目录
md 目录名(文件夹)
//删除目录
rd 目录名(文件夹)
```

### 查看本机ip

```auto
ipconfig
```

### 清除屏幕

```auto
cls
```

类似于linux下的clear

### 复制文件

```go
copy 路径\文件名 路径\文件名 :把一个文件拷贝到另一个地方。
```

### 移动文件

```arduino
move 路径\文件名 路径\文件名 :把一个文件移动(就是剪切+复制)到另一个地方。
```

### 删除文件

```less
//这个是专门删除文件的,不能删除文件夹
del 文件名
```

### ping

```scss
//用来测试网络是否畅通
ping ip(主机名)
```

### taskkill

**列出所有任务及进程号,杀进程**

```auto
taskkill

taskkill /? 获取使用帮助
```

**taskkill**是用来终止进程的。具体的命令规则如下:

```css
TASKKILL [/S system [/U username [/P [password]]]]
{ [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]
```

**描述:**

这个命令行工具可用来结束至少一个进程。

可以根据进程 id 或映像名(Image)来结束进程。

**参数列表:**

```sql
/S system 指定要连接到的远程系统。
/U [domain]user 指定应该在哪个用户上下文
```

执行这个命令:

```arduino
/P [password] 为提供的用户上下文指定密码。如果忽略,提示输入。
/F 指定要强行终止的进程。
/FI filter 指定筛选进或筛选出查询的的任务。
/PID process id 指定要终止的进程的PID。
/IM image name 指定要终止的进程的映像名称。通配符 '*'可用来指定所有映像名。
/T Tree kill: 终止指定的进程和任何由此启动的子进程。
/? 显示帮助/用法。
```

**例如:**

```r
TASKKILL /S system /F /IM notepad.exe /T
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM QQ.exe
TASKKILL /F /IM notepad.exe /IM mspaint.exe
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
```

### netstat 查看网络连接状态

显示协议统计信息和当前 **TCP/IP** 网络连接。该命令可以查看当前机器建立的所有网络链接状态,以及对应哪个进程。

```bash
netstat -help 获取命令行使用帮助信息

netstat -ano //查看网络连接、状态以及对应的进程id
```

**语法:**

```css
netstat [选项]
```

**参数:**

```css
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
```

### find

```arduino
find /?获取使用帮助

netstat -ano|find ".8" //使用管道符,进行模糊查询
```

### tracert

**tracert**也被称为**Windows**路由跟踪实用程序,在命令提示符(cmd)中使用**tracert**命令可以用于确定IP数据包访问目标时所选择的路径。

```auto
tracert /? 获取使用帮助
```

## 查看cmd下的命令

**1、使用help命令,查看所有的dos命令**

使用这个命令之后,我们可以看到所有的dos命令,并且后面还有中文的解释。简直不要太赞,这样我们就可以根据自己的需求要找到想要使用的命令。

**2、找到命令之后,使用 命令+ /?来查看该命令下的其他属性**

```scss
命令 -help //第1种形式的使用帮助

命令 /? //第2种形式的使用帮助
```

**注意:这些字符只能是英文的**











### **start**

打开新终端

### **move**

移动

## 高级命令

### set

#### 变量读入

`SET /P variable=[promptString]`

将变量变量数值设成用户输入的一行输入

(set/p variablre=[空格]:空格也会被输出。)

```
@echo off
::下面 k 值是 16 个空格。
set k=
echo %k%水光潋滟晴方好,
echo %k%山色空蒙雨亦奇。
echo %k%欲把西湖比西子,
echo %k%淡妆浓抹总相宜。
pause
```

#### 数学计算

`SET /A expression`

指定等号右边的字符串为待计算的数字表达式

```
@echo off
::下面 k 值是 16 个空格。
set k=
echo %k%水光潋滟晴方好,
echo %k%山色空蒙雨亦奇。
echo %k%欲把西湖比西子,
echo %k%淡妆浓抹总相宜。
pause
```

#### 字符串计算

`%PATH:str1=str2% `

将字符串变量**%PATH%**中的 **str**1 替换为 **str**2

```
@echo off
set a=bbs.verybat.cn
echo 替换前的值: "%a%"
set var=%a:.=伤脑筋%
echo 替换后的值: "%var%"
pause

运行显示:
替换前的值: "bbs.verybat.cn"
替换后的值: "bbs 伤脑筋 verybat 伤脑筋 cn"
```

解释“set var=%a:.=伤脑筋% ”,a 是要进行字符替换的变量,"."为 要替换的值, "伤脑筋"为替换后的值, 执行后就会把变量%a%里面 的"."全部替换为"伤脑筋"。

### if
实例代码:
```
@Echo Off
:1
Set /p str=《青玉案·元夕》作者是谁?
If not %str%==辛弃疾 echo 错误 & goto 1
If %str%==辛弃疾 echo 正确
:2
Set /p str=《红楼梦》前80回的作者是谁?
If not %str%==曹雪芹 echo 错误 & goto 2
If %str%==曹雪芹 echo 正确
Pause>Nul
::后面的依次类推

```
### 批处理for语句

#### (一)、for语句的基本用法

基本形式:
Cmd下:

`FOR %variable IN (set) DO command [command-parameters]`

批处理中:

`FOR %%variable IN (set) DO command [command-parameters] `

区别:cmd下变量引用为%i,批处理下为%%i.

#### (二)、For /f 文本解析

它能够对字符串进行操作**,**也能够对命令的返回值进行操作**,**还可以 访问硬盘上的 **ASCII** 码文件**,**比如 **txt** 文档等。常用于文本信息编辑**,** 如查询、提取、替换等等 。

`FOR /F "Delims=符号" %%I    IN (Command1)      DO Command2 `

for 默认以空格作分割符**,**当我们没有写**"delims=",**就默认以空格分隔

`for /f "tokens=1,2 delims=:" %%a in (易经.txt) do echo %%a %%b`

1、“tokens=1,2”中 1 和 2 数字之间**,**用的逗号必须是英文格式逗号。

2、这里需要显示两列的内容**,**那么,echo 后面就需要用多个变量符 号%%a 和%%b。同样,如果需要显示三列内容就必须这么写 echo%%a%%b%%c。

#### (三)、遍历文件夹

##### For /r

1.基本形式:for /r 目录 %%i in (元素集合) do 命令语句集合
作用:列举“目录”及该目录路径下所有子目录,并把列举出来的目录路径和元素集合中的每一个元素拼接成形如“目录路径\元素”格式的新字符串,然后,对每一条这样的新字符串执行“命令语句集合”中的每一条命令。
2.当“元素集合”带以点号分隔的通配符?或的时候,把“元素集合”视为文件(不视为文件夹),整条语句的作用是匹配“目录”所指文件夹及其所有子文件夹下匹配的文件;若不以点号分隔,则把“元素集合”视为文件夹(不视为文件);
3.当省略掉“目录”时,则针对当前目录;
4.当元素集合中仅仅是一个点号的时候,将只列举目录路径;


★与dir /ad /s的区别:

For /r:不能显示隐藏文件,速度快
Dir /ad:可以指定特定格式,速度慢

##### For /d

作用:只能匹配```第一层```目录
带通配符时:匹配文件夹

```
For /r /d
```

显示当前目录下所有的文件夹(包括子文件夹)
等价于dir /ad /s/b



#### (四)、For /l :计数循环

基本形式:

`for /l %%i in (x,y,z) do (.......)`

x——起始值
y——步长
y——终止值 (不能取0)

创建一系列文件

```
@echo off
md text
rem cd text
for /l %%i in (1,2,20) do cd.> text\%%i.txt
```





#### (五)、FOR变量

| 变量 | 作用 |
| --------- | --------------------------------------------- |
| **~I** | - 删除任何引号("),扩充 %I |
| **%~fI** | - 将 **%I** 扩充到一个完全合格的路径名 |
| **%~dI** | - 仅将 **%I** 扩充到一个驱动器号 |
| **%~pI** | - 仅将 **%I** 扩充到一个路径 |
| **%~nI** | - 仅将 **%I** 扩充到一个文件名 |
| **%~xI** | - 仅将 **%I** 扩充到一个文件扩展名 |
| **%~sI** | - 扩充的路径只含有短名 |
| **%~aI** | - 将 **%I** 扩充到文件的文件属性 |
| **%~tI** | - 将 **%I** 扩充到文件的日期**/**时间 |
| **%~zI** | - 将 **%I** 扩充到文件的大小 |
| **%~dpI** | - 仅将 **%I** 扩充到一个驱动器号和路径 |
| **%~nxI** | - 仅将 **%I** 扩充到一个文件名和扩展名 |
| **%~fsI** | - 仅将 **%I** 扩充到一个带有短名的完整路径名 |

其中 **I** 为变量

```
ECHO off
SETlOCAL enabledelayedexpansion

SET FIND_DIR=E:\dirA\dirC\dirD

for /R %FIND_DIR% %%f in (*.txt) do (
SET FULL_PATH=%%f
ECHO 完整的路径: !FULL_PATH!

SET FILE_DIR=%%~dpf
ECHO 所在的目录: !FILE_DIR!

SET FILE_NAME=%%~nf
ECHO 无后缀文件: !FILE_NAME!

SET FILE_EXT=%%~xf
ECHO 文件名后缀: !FILE_EXT!

SET "FILE_NAME_NOT_PATH=%%~nxf"
ECHO 无路径文件: !FILE_NAME_NOT_PATH!

SET "FULL_PATH_NOT_EXT=%%~dpnf"
ECHO 无后缀全名: !FULL_PATH_NOT_EXT!
)
pause
---------------------
作者:AlbertS
来源:CSDN
原文:https://blog.csdn.net/albertsh/article/details/79651437
版权声明:本文为博主原创文章,转载请附上博文链接!
```

运行结果

```
完整的路径: E:\dirA\dirC\dirD\eee.txt
所在的目录: E:\dirA\dirC\dirD\
无后缀文件: eee
文件名后缀: .txt
无路径文件: eee.txt
无后缀全名: E:\dirA\dirC\dirD\eee
```

## 基本操作

删除文件夹:`rmdir /s/q aaa` /s 表示删除子目录





## 辅助符号或命令

** ‘|’**

**“|”cmd命令中|代表前一个的输出代表后一个的输入**

查找特定ip的网络连接及进程号:`netstat -ano|find "192.168.1.10"`

** 重定向输出符号> >>**

将原本输出到命令窗口的内容,转存到文件中,如`jstack 12912 >d:/s.txt` 打印线程到指定文件

**cmd >** 重定向输出并覆盖源文件。

**例如**

```php
echo hello >c:\1.txt // 1.txt的文件内容先被清空,然后写入hello。
```

**cmd >>重定向输出追加到文件末尾**

**例如:**

```php
echo hello >>c:\1.txt // 在1.txt文件末尾加上hello
```

** 重定向输入符号< <<**

```auto
cmd < file
```

使cmd命令从file读入

```arduino
cmd << text
```

**从命令行读取输入,直到一个与text相同的行结束。**

除非使用引号把输入括起来,此模式将对输入内容进行**shell**变量替换。

如果使用 <<- ,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容,可以参考后面的例子。

```arduino
cmd <<< word
```

把word(而不是文件word)和后面的换行作为输入提供给cmd。

```xml
cmd <> file
```

以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。

```auto
cmd >| file
```

功能同>,但即便在设置了noclobber时也会覆盖file文件,注意用的是|而非一些书中说的!,目前仅在csh中仍沿用>!实现这一功能。

** 终止一直在运行的命令ctrl+c**

有时某个命令一直打印输出结果(如ping 192.168.1.10 -t),我们想终止这个命令的执行,直接按ctrl+c即可。

** 清空cmd窗口内容命令cls**

有时cmd内容太多,滚动费尽,需要清空屏幕内容,直接输入cls即可

cmd命令中,按键盘的向上箭头可以直接复制前一个命令