0%

windows命令行记录

一、bat 脚本

1. 一些基本语法

1.1. 变量

1
2
3
4
5
6
:: 声明变量
set test_var=""
:: 变量赋值
set /p test_var="aaa"
:: 文件内容赋值给变量
set /p test_var=<D:\path\to\file.txt

其他

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
REM 这是注释
:: 这是注释

:: 打印环境变量
echo %xxx%

:::::::::: 目录操作 ::::::::::
:: 列举目录内容,类似ls
dir xxx/xxx

:::::::::: 文件操作 ::::::::::
:: 新建文件
type NUL > xxx.txt
:: 删除文件
del xxx.txt
  • /j: 创建目录链接
  • /d: 创建目录符号链接。默认为文件符号链接
  • /h: 创建硬链接而非符号链接
1
mklink /j [link_name] [src_dir]

硬链接、符号链接、目录链接、快捷方式区别

硬链接符号链接目录链接快捷方式
类型链接链接链接xxx.lnk 文件
作用对象仅文件目录/文件目录/文件目录/文件
大小和源文件一致(但不占空间)00几百字节
源文件删除文件内容存在失效失效失效
源文件替换文件内容还是原始文件新文件新文件新文件
局限仅同一个分区---
路径-相对路径自动转化为绝对路径-

3. 拷贝文件 COPY/XCOPY

3.1. COPY

  • 只能复制文件,不能复制文件夹

选项

  • /B: 合并文件
  • /Y: 取消覆盖的确认

(1) 合并文件

  • 合并两个二进制文件
1
COPY /B /Y [bin_file1] [bin_file2]

(2) 复制单个文件

1
2
3
4
:: 拷贝到目录下
COPY /Y C:\aaa.txt D:\
:: 拷贝到目录下换个名字
COPY /Y C:\aaa.txt D:\test.bat

(3) 批量复制文件

1
2
3
4
:: 目录下所有文件复制到另一个目录
COPY /Y C:\test\ D:\aaa\
:: 正则匹配
COPY /Y C:\test\*.txt D:\aaa\

3.2. XCOPY

(1) 选项

  • /S: 复制目录和子目录,不包括空目录,不带此选项不复制子目录,需要和/E一起复制空目录
  • /T: 只复制目录结构,不复制文件,不包括空目录,需要和/E一起复制空目录
  • /E: 复制空目录
  • /Y: 取消覆盖确认提示
  • /I: 路径不存在的情况,原始路径是目录就自动创建目录,文件则还是会提示选择是否为文件
  • /K: 保留只读属性
  • /V: 验证文件完全相同

(2) 示例

  • 拷贝文件到目录不能跟文件名,只需要父级目录就好,跟文件名会弹出确认是文件还是目录
1
xcopy /y /k /v C:\path\to\file.txt D:\path\to\

4. 注册表

4.1. 获取注册表的值

1
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\钉钉" /v "UninstallString"

4.2. 修改注册表的值

  • 路径
  • /v: key
  • /t: type
  • /d: value
  • /f: 不显示确认输入
1
reg add HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\arch-work /v Colour0  /t REG_SZ /d 255,255,255   /f

5. for循环

5.1. 基本形态

  • 在cmd中使用一个%: for %i in (command1) do command2
  • 在batch脚本中使用两个%%: for %%i in (command1) do command2
  • %后只能跟一个字母作为变量,不能跟多个字母

几个示例

(1) 数组遍历

1
2
3
4
5
@echo off
for %%i in (A,B,C) do (
echo s %%i e
)
pause

输出

1
2
3
s A e
s B e
s C e

5.2. for /r 递归遍历目录下所有文件,不包含目录

(1) 原型

1
FOR /R [[drive:]path] %%parameter IN (set) DO command

(2) 示例

输出目录下包含子目录的所有文件

1
2
3
4
5
@echo off
for /r D:\path\to\dir %%i in (*) do (
echo s %%i e
)
pause

输出目录下包含子目录的所有json文件

1
2
3
4
5
@echo off
for /r D:\path\to\dir %%i in (*.json) do (
echo s %%i e
)
pause

6. cd命令

6.1. 基本用法

1
2
3
4
5
6
7
8
:: 返回上一级
cd ..
:: 切换盘
cd D:
:: 切换到当前盘的相对目录
cd a\b\c
:: 切换到不同盘的绝对目录
cd /d C:\path\to\dir

7. 快捷键

7.1. 基本快捷键

  • F7: 当次窗口执行过的历史记录,可以选择之前执行过的命令
  • Esc: 清楚当前行

8. dir 列举当前目录

8.1. 选项

  • /B: 仅显示名字,不显示其他信息,默认显示时间类型
  • /-C: 大小不显示千位数分割符,默认/C显示
  • /Q: 显示所有者,默认不显示
  • /S: 显示子目录
  • /W: 横向排列,目录两旁带[]
  • /D: 纵向排列,目录两旁带[]
  • /A:[属性]:
    • d: 目录
    • r: 只读文件
    • s: 系统文件
    • h: 隐藏文件

8.2. 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
D:\path\to\dir>dir /d
驱动器 D 中的卷是 新加卷
卷的序列号是 641B-9BCA

D:\path\to\dir 的目录

[.] .cpplint-ignore .gitmodules [cmake] [doc] [prebuilt] [script] [tests]
[..] .gitignore [.vscode] CMakeLists.txt Doxyfile README.md [mobile] [third-party]
.clang-format [.gitlab] [build] cppcheck.xml [LICENSE] requirements.txt [pc] [tools]
.cppcheck-ignore .gitlab-ci.yml build.sh CPPLINT.cfg [package] [res] [src] version
14 个文件 341,406 字节
18 个目录 42,100,445,184 可用字节

D:\path\to\dir>dir /w
驱动器 D 中的卷是 新加卷
卷的序列号是 641B-9BCA

D:\path\to\dir 的目录

[.] [..] .clang-format .cppcheck-ignore .cpplint-ignore .gitignore [.gitlab] .gitlab-ci.yml .gitmodules [.vscode]
[build] build.sh [cmake] CMakeLists.txt cppcheck.xml CPPLINT.cfg [doc] Doxyfile [LICENSE] [package]
[prebuilt] README.md requirements.txt [res] [script] [mobile] [pc] [src] [tests] [third-party]
[tools] version
14 个文件 341,406 字节
18 个目录 42,100,436,992 可用字节


9. 字符串操作

9.1. 字符串替换

1
2
3
4
5
set str=aaaa bb cc
:: 所有b替换成t
echo %str:b=t%
:: 替换第一个b和之前的字符串
echo %str:*b=tt%

输出

1
2
aaaa tt cc
ttb cc

9.2. 字符串截取

,后大于0为长度,小于0为索引

1
2
3
4
5
6
7
8
set abc=abcdefghijklmnopqrstuvwxyz

echo 原字符串为:%abc%
echo 截取前5个字符:%abc:~0,5%
echo 截取最后5个字符:%abc:~-5%
echo 截取第一个到倒数第6个字符:%abc:~1,-5%
echo 从第4个字符开始截取5个字符:%abc:~3,5%
echo 从倒数第14个字符开始截取5个字符:%abc:~-14,5%

输出

1
2
3
4
5
6
原字符串为:abcdefghijklmnopqrstuvwxyz
截取前5个字符:abcde
截取最后5个字符:vwxyz
截取第一个到倒数第6个字符:bcdefghijklmnopqrstu
从第4个字符开始截取5个字符:defgh
从倒数第14个字符开始截取5个字符:mnopq

10. 引号的作用

  • 引号作为字符串插入,不作为字符串的标识
1
2
3
4
5
set str=aaa
set str1="aaa"

echo %str% 123
echo %str1% 123

输出

1
2
aaa 123
"aaa" 123

11. if判断

11.1. 基本形态

1
2
3
4
5
6
7
8
9
10
:: 基本状态是一行
if %a% == 123 (echo a==123) else if %a% == 1234 (echo a==123) else (echo %a% not valid)
:: 也可以分行写,但是处理时认为是一行
if %a% == 123 (
echo a==123
) else if %a% == 1234 (
echo a==123
) else (
echo %a% not valid
)

12. move 移动文件

1
move [src] [dst]

13. tracert 跟踪路由节点

  • 类似linux的traceroute
1
2
3
4
5
6
7
8
9
10
C:\Users\User>tracert 199.200.2.170

通过最多 30 个跃点跟踪到 199.200.2.170 的路由

1 <1 毫秒 <1 毫秒 <1 毫秒 172.22.73.254
2 <1 毫秒 <1 毫秒 <1 毫秒 10.10.110.132
3 1 ms <1 毫秒 3 ms 10.10.110.37
4 <1 毫秒 <1 毫秒 <1 毫秒 199.200.2.170

跟踪完成。

14. netsh 网络相关命令工具

14.1. 通用命令

1
2
:: 重置网络配置
netsh winsock reset

14.2. ipv6

  • ipv6使用需要使用netsh interface ipv6命令

1) 路由相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
:::::::::: 查看路由 ::::::::::
C:\Users\User>netsh interface ipv6 show route

发布 类型 跃点数 前缀 索引 网关/接口名称
------- -------- --- ------------------------ --- ------------------------
否 系统 256 ::1/128 1 Loopback Pseudo-Interface 1
否 系统 256 fe80::/64 21 以太网 2
否 系统 256 fe80::/64 27 vEthernet (Default Switch)
否 系统 256 fe80::5dee:8e08:f0bd:1fad/128 21 以太网 2
否 系统 256 fe80::6811:502a:c8dd:b09e/128 27 vEthernet (Default Switch)
否 系统 256 ff00::/8 1 Loopback Pseudo-Interface 1
否 系统 256 ff00::/8 21 以太网 2
否 系统 256 ff00::/8 27 vEthernet (Default Switch)

:::::::::: 添加路由 ::::::::::
C:\Users\User>netsh interface ipv6 add route
一个或多个重要的参数没有输入。
请验证需要的参数,然后再次输入。
此命令提供的语法不正确。请查看帮助以获取正确的语法信息。

用法: add route [prefix=]<IPv6 address>/<integer> [interface=]<string>
[[nexthop=]<IPv6 address>] [[siteprefixlength=]<integer>]
[[metric=]<integer>] [[publish=]no|age|yes]
[[validlifetime=]<integer>|infinite]
[[preferredlifetime=]<integer>|infinite]
[[store=]active|persistent]

参数:

标记 值
prefix - 要为其添加路由的前缀。
interface - 接口名称或索引。
nexthop - 网关地址(如果前缀不在链路上)。
siteprefixlength - 整个站点的前缀长度(如果在链路上)。
metric - 路由跃点数。
publish - 下列其中一个值:
no: 未在路由播发中播发。
此为默认值。
age: 用有限生存时间在路由播发中播发。
yes: 用无限生存时间在路由播发中播发。
validlifetime - 路由有效的生存时间。
默认值是无限。
preferredlifetime - 首选路由生存时间。
默认值为无限生存时间。
store - 下列其中一个值:
active: 更改仅持续到下一次启动。
persistent: 更改持久有效。此为默认值。

说明: 为给定前缀添加路由。

示例:

add route 3ffe::/16 "Internet" fe80::1

:::::::::: 删除路由就是将add给成del ::::::::::
C:\Users\User>netsh interface ipv6 del route 3ffe::/16 "Internet" fe80::1

14.3. ipv4

1) 端口转发

1
2
:: 将1234端口的tcp请求转发到445 ::
netsh interface portproxy add v4tov4 listenport=1234 listenaddress=127.0.0.1 connectport=445 connectaddress=127.0.0.1 protocol=tcp

2) dns配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
:: 显示dns配置
C:\Users\User>netsh interface ip show dnsservers

接口 "以太网 2" 的配置
通过 DHCP 配置的 DNS 服务器: 223.5.5.5
114.114.114.114
用哪个前缀注册: 只是主要

接口 "Loopback Pseudo-Interface 1" 的配置
静态配置的 DNS 服务器: 无
用哪个前缀注册: 只是主要

:: 配置为网卡为静态dns
C:\Users\User>netsh interface ip set dns "以太网 2" static 233.5.5.5

:: 添加新的静态dns
C:\Users\User>netsh interface ip add dns "以太网 2" 114.114.114.114

:: 恢复dnsdhcp获取
C:\Users\User>netsh interface ip set dns "以太网 2" source=dhcp

3) 跃点数(优先级)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
:: 查看跃点数
C:\Users\User>netsh interface ip show Interface

Idx Met MTU 状态 名称
--- ---------- ---------- ------------ ---------------------------
1 75 4294967295 connected Loopback Pseudo-Interface 1
17 1 1400 connected 本地连接
15 25 1500 connected 以太网 5

:: 设置某个网卡跃点数为特定值
C:\Users\User>netsh interface ip set interface "本地连接" metric=100
:: 也可以用idx
C:\Users\User>netsh interface ip set interface 17 metric=100
:: 设置为自动跃点
C:\Users\User>netsh interface ip set interface 17 metric=auto

4) ip地址配置

14.4. 防火墙

1) advfirewall firewall

1
2
:: 开放1234的tcp端口 ::
netsh advfirewall firewall add rule name=shared_folder action=allow protocol=TCP localport=1234

15. taskkill

  • /im [xxx.exe]: 删除某exe的进程
  • /f: 强制删除
1
2
3
4
5
6
7
C:\Users\User>taskkill /f /im appidcertstorecheck.exe
成功: 已终止进程 "appidcertstorecheck.exe",其 PID 为 11804。
成功: 已终止进程 "appidcertstorecheck.exe",其 PID 为 15924。
成功: 已终止进程 "appidcertstorecheck.exe",其 PID 为 17120。
成功: 已终止进程 "appidcertstorecheck.exe",其 PID 为 16996。
成功: 已终止进程 "appidcertstorecheck.exe",其 PID 为 17436。
成功: 已终止进程 "appidcertstorecheck.exe",其 PID 为 9724。

16. cmd 调用其他bat脚本

  • /c: 执行后面的命令后结束
1
cmd /c D:\path\to\test.bat

17. tasklist显示进程列表

  • /fi: 过滤器,具体语法查看/?
  • /v: 显示详细信息
1
2
3
4
5
6
7
C:\Users\sangfor>tasklist /FI "imagename eq abcdefAgent.exe"

映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
abcdefAgent.exe 6172 Services 0 20,600 K
abcdefAgent.exe 7532 RDP-Tcp#1 1 59,368 K
abcdefAgent.exe 1424 RDP-Tcp#1 1 37,668 K

18. net 启动停止服务

18.1. 启动停止服务

1
2
3
4
5
6
7
8
9
10
C:\Windows\system32>net start sshd
OpenSSH SSH Server 服务正在启动 .
OpenSSH SSH Server 服务已经启动成功。


C:\Windows\system32>net stop sshd

OpenSSH SSH Server 服务已成功停止。


19. wmic windows管理工具

19.1. process 查看进程信息

  • commandline: 命令行参数
  • ProcessId: 进程号
  • Name: 名称,一般是xxx.exe
  • caption: 好像和name一样
1
2
3
4
5
6
7
C:\Windows\system32>wmic process where caption="cmd.exe" get caption,commandline /value


Caption=cmd.exe
CommandLine="C:\Windows\system32\cmd.exe"


20. find/findstr

  • /i: 不区分大小写
  • /v: 不包含
1
2
3
C:\Windows\system32>wmic process where processid=4384 get commandline /value | find /i "atrustcore"
CommandLine=aTrustAgent --plugin plugins/aTrustCore --enable-http --enable-event-center

21. %ERRORLEVEL% 上一条命令的返回值

1
2
3
4
5
6
7
8
9
10
11
12
C:\Windows\system32>wmic process where processid=4384 get commandline /value | find /i "atrustcore"
CommandLine=aTrustAgent --plugin plugins/aTrustCore --enable-http --enable-event-center

C:\Windows\system32>echo %ERRORLEVEL%
0

C:\Windows\system32>wmic process where processid=4384 get commandline /value | find /i "atrustcore1
FIND: 参数格式不正确

C:\Windows\system32>echo %ERRORLEVEL%
2

22. route 添加路由

  • -p: 永久生效,默认在重启后会失效
  • -6: ipv6路由,默认ipv4
1
route add 1.1.1.1 mask 255.255.0.0 10.242.255.254 -p

23. shutdown 关机命令

1
2
3
4
5
6
:: 进入休眠状态
shutdown /h
:: 关机
shutdown /s /t 0
:: 重启
shutdown /r

24. powercfg 电源配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
:: 查看系统电源配置
C:\WINDOWS\system32>powercfg -a
此系统上没有以下睡眠状态:
待机 (S1)
虚拟机监控程序不支持此待机状态。

待机 (S2)
系统固件不支持此待机状态。
虚拟机监控程序不支持此待机状态。

待机 (S3)
系统固件不支持此待机状态。
虚拟机监控程序不支持此待机状态。

休眠
系统固件不支持休眠。
该虚拟机监控程序不支持休眠。

待机(S0 低电量待机)
系统固件不支持此待机状态。

混合睡眠
待机(S3)不可用。
休眠不可用。
虚拟机监控程序不支持此待机状态。

快速启动
休眠不可用。

:: 开启/禁止系统休眠,只是配置开启,不是立马进入
C:\Windows\system32>powercfg -h on
C:\Windows\system32>powercfg -h off

25. ipconfig 网络配置

25.1. 刷新本地dns缓存

  • 所有dns请求重新解析
1
2
3
4
5
6
C:\Windows\system32>ipconfig /flushdns

Windows IP 配置

已成功刷新 DNS 解析缓存。

26. 弹框获取管理员权限

1
2
3
4
5
6
7
8
9
10
11
12
13
set current_dir=%~dp0
echo %current_dir%

@echo off&color 17
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin

cd /d %current_dir%

27. windows特殊目录

  • %AllUsersProfile%: 打开所有用户的配置文件 C:\ProgramData
  • %AppData%: 打开AppData文件夹 C:\Users\{username}\AppData\Roaming
  • %CommonProgramFiles%: C:\Program Files\Common Files
  • %CommonProgramFiles(x86)%: C:\Program Files (x86)\Common Files
  • %HomeDrive%: 打开您的主驱动器 C:\
  • %LocalAppData%: 打开本地AppData文件夹 C:\Users\{username}\AppData\Local
  • %ProgramData%: C:\ProgramData
  • %ProgramFiles%: C:\Program FilesC:\Program Files (x86)
  • %ProgramFiles(x86)%: C:\Program Files (x86)
  • %Public%: C:\Users\Public
  • %SystemDrive%: C:
  • %SystemRoot%: 打开Windows文件夹 C:\Windows
  • %Temp%: 打开临时文件文件夹 C:\Users\{Username}\AppData\Local\Temp
  • %UserProfile%: 打开用户的配置文件 C:\Users\{username}
  • %AppData%\ Microsoft \ Windows \ Start菜单\程序\启动: 打开Windows 10启动位置以获取程序快捷方式

28. windows常用工具命令

打开管理软件

  • taskmgr: 任务管理器
  • appwiz.cpl: 卸载或更改程序
  • sysdm.cpl: 系统属性(环境变量、远程等)
  • ncpa.cpl: 网络连接属性(适配器属性)
  • devmgmt.msc: 设备管理器
  • diskmgmt.msc: 磁盘管理
  • services.msc: 服务管理
  • desk.cpl: 显示相关设置
  • CHARMAP: 字符映射表
  • cleanmgr: 磁盘清理器
  • comexp.msc: 组件服务,包含事件查看器和服务管理
  • eventvwr.msc: 事件查看器
  • lusrmgr.msc: 本地用户和组
  • secpol.msc: 本地安全策略
  • Dxdiag: DirectX诊断工具
  • Explorer: 文件资源管理器
  • wf.msc: 防火墙管理器
  • msconfig: 启动相关配置,开机启动服务、启动项、引导等
  • msinfo32: 系统详细信息
  • regedit: 注册表编辑器
  • gpedit: 本地组策略编辑器
  • certmgr.msc: 证书管理器
  • fsmgmt.msc: 文件夹共享管理
  • compmgmt.msc: 计算机管理
  • wmimgmt.msc: wmi管理控件
  • perfmon.msc: 性能监视器
  • powercfg.cpl: 电源选项
  • inetcpl.cpl: internel选项
  • main.cpl: 鼠标属性
  • joy.cpl: 游戏手柄属性
  • timedate.cpl: 日期和时间
  • intl.cpl: 区域设置
  • sndvol: 音量控制
  • mmsys.cpl: 声音和音频设备属性
  • telephon.cpl: 电话和调制解调器选项
  • wscui.cpl: 控制面板的安全和维护
  • firewall.cpl: 控制面板的防火墙设置
  • Odbcad32: ODBC数据源管理

好用的命令

  • systeminfo: 列举出系统所有信息
  • Defrag: 磁盘碎片整理工具
  • Ftp: ftp.exe程序
  • netstat: 网络连接状态
  • nslookup: 域名解析
  • telnet: 连接测试
  • taskkill: 杀进程
  • regsvr32: 注册一个dll
  • tracert: 路由追踪
  • sfc: 文件扫描并修复

Microsoft Office套件

winword -Microsoft Word
excel -Microsoft Excel
powerpnt -Microsoft PowerPoint
msaccess -Microsoft Access
Outlook -Microsoft Outlook
ois -Microsoft Picture Manager

29. timeout 等待

1
2
:: 等待5秒后继续操作
timeout /t 5

30. netstat 网络状态查询

30.1. 选项解释

  • -a: 显示所有连接和监听端口。
  • -b: 显示正在使用端口的可执行程序
  • -e: 显示以太网统计信息,如传输的字节数、错误数等。
  • -n: 以数字形式显示地址和端口号,而不是使用名称。
  • -o: 显示与每个连接关联的进程 ID。
  • -r: 显示路由表。
  • -p <proto>: 协议

30.2. 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
:: 显示路由表
C:\Users\User>netstat -r
===========================================================================
接口列表
18...fe fc fe fa 1d f2 ......Sangfor FastIO Ethernet Adapter
1...........................Software Loopback Interface 1
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 172.22.73.254 172.22.72.56 15
127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331
127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331
172.22.72.0 255.255.254.0 在链路上 172.22.72.56 271
172.22.72.56 255.255.255.255 在链路上 172.22.72.56 271
172.22.73.255 255.255.255.255 在链路上 172.22.72.56 271
===========================================================================
永久路由:


IPv6 路由表
===========================================================================
活动路由:
接口跃点数网络目标 网关
1 331 ::1/128 在链路上
1 331 ff00::/8 在链路上
===========================================================================
永久路由:


:: 显示当前正在使用的tcp连接,显示使用的进程可执行文件和PID,显示连接状态
C:\Users\User> netstat -anbo -p tcp

活动连接

协议 本地地址 外部地址 状态 PID
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 512
RpcSs
[svchost.exe]
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
无法获取所有权信息
TCP 0.0.0.0:4489 0.0.0.0:0 LISTENING 1276
TermService
[svchost.exe]
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 9196
CDPSvc
[svchost.exe]
TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4
无法获取所有权信息
TCP 0.0.0.0:7171 0.0.0.0:0 LISTENING 1276
TermService
[svchost.exe]
TCP 0.0.0.0:7172 0.0.0.0:0 LISTENING 4956
[SRAPSrv.exe]

小技巧和踩坑记

1. 逻辑判断中多行设置变量不符合预期

示例

1
2
3
4
5
6
set a=123
if %a% == 123 (
set a=%a%4
set a=%a%5
)
echo a=%a%
  • 认为输出的是a=12345
  • 实际输出的是a=1235

原因

  • 虽然括号内写成了多行,实际认为是一行
  • batch解析时,**每一行命令会先将变量替换成值,再进行处理**
  • 所以上述翻译过来就是
1
2
3
4
5
6
7
8
set a=123
:: 下面将 %a% 替换成123得到
if 123 == 123 (
set a=1234
set a=1235
)
:: 上面一行 a=1235,所以这里将%a%替换成1235
echo a=1235

解决

  • 使用setlocal enabledelayedexpansion,启用延迟解析
  • 即不提前将值替换进去
  • 然后变量两边的%换成!即可
1
2
3
4
5
6
7
set a=123
setlocal enabledelayedexpansion
if %a% == 123 (
set a=!a!4
set a=!a!5
)
echo a=%a%
  • 输出a=12345

二、powershell

1. 一些基本用法

1
2
3
4
5
6
7
8
9
10
11
12
:: 打印环境变量
PS> $env:xxx
:: 设置环境变量
PS> $env:TestVar1="This is my environment variable"
:: 枚举环境变量,注意后面有个冒号
PS> ls env:
:: 删除环境变量
PS> del env:windir

:::::::::: 文件操作 ::::::::::
:: 新建文件
PS> New-item xxx.txt -type file

2. 网络相关

2.1. 网卡信息

1) 获取网卡信息

1
2
3
4
5
6
7
8
9
10
11
PS> Get-NetIPInterface

ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- -------------- ------------- ------------ --------------- ---- --------------- -----------
27 vEthernet (Default Switch) IPv6 1500 5000 Enabled Connected ActiveStore
21 以太网 2 IPv6 1500 15 Enabled Connected ActiveStore
1 Loopback Pseudo-Interface 1 IPv6 4294967295 75 Disabled Connected ActiveStore
27 vEthernet (Default Switch) IPv4 1500 5000 Disabled Connected ActiveStore
21 以太网 2 IPv4 1500 15 Disabled Connected ActiveStore
1 Loopback Pseudo-Interface 1 IPv4 4294967295 75 Disabled Connected ActiveStore

2) 设置网卡优先级

1
2
3
:: InterfaceIndex是Get-NetIPInterface获取到的ifIndex
:: InterfaceMetric越大优先级越低
PS> Set-NetIPInterface -InterfaceIndex 59 -InterfaceMetric 50

3. 软件安装

3.1. 内置安装器

1) 安装msixbundle

1
PS> Add-AppxPackage xxx.msixbundle

3.2. winget

1) 安装winget

2) install 安装软件

选项
  • --location [dir]: 指定路径,部分软件不支持
  • --scope <user/machine>: 指定安装范围,部分软件不支持,用户安装到用户的AppData下,电脑则安装到C:\Program Files

小技巧

1. powershell 使用 utf-8 编码

  • 启动 powershell 时输入
1
chcp 65001

2. windows 10 启用 sshd 服务

  • 需要在功能中安装OpenSSH Server
  • 在命令行中执行,登陆帐号密码和微软一致
1
2
3
4
:: 开启
net start sshd
:: 关闭
net stop sshd