[TOC]

目录文件

chdir命令 = cd命令

描述:显示当前目录名或改变当前目录,相当于Linux中的pwd命令.

基础语法:

1
2
3
4
5
CHDIR [/D] [drive:][path]
CHDIR [..]

CD [/D] [drive:][path]
CD [..]

基础示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#1.显示当前路径指定要改成父目录
chdir
c:\>chdir /d d: #可以直接进行跨分区进入其他盘符驱动器,使用 /D 开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。、
d:\>


#1.主要用于进入指定目录
cd \ # 回根
cd ..

D:\>c: //的路径
C:\Windows\System32>

f: #切换F盘符
cd /d f:

#2.键入 CD drive: 显示指定驱动器中的当前目录,不带参数只键入 CD,则显示当前驱动器和目录。
cd d:
d:\

#3.CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个带有空格但不带有引号的子目录名。
cd \winnt\profiles\username\programs\start menu
cd "\winnt\profiles\username\programs\start menu" #在扩展停用的情况下,您必须键入以上命令

WeiyiGeek.

WeiyiGeek.

注意事项:

  • 如果命令扩展被启用,CHDIR 会如下改变:当前的目录字符串会被转换成使用磁盘名上的大小写。
  • 所以如果磁盘上的大小写如此,CD C:\TEMP 会将当前目录设为C:\Temp。
  • CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个带有空格但不带有引号的子目录名。


dir命令

描述:显示指定属性的目录与文件。
基础语法:

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
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N] 
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/W] [/X] [/4]
[/T[[:]timefield]]
#参数:
/p 分屏显示,一次显示23行文件信息,按任意键继续
/Q 显示文件及目录属系统哪个用户 如:2017/04/15 12:14 2,036 BUILTIN\Administrators 360安全浏览器.lnk
/B 使用空格式(没有标题信息或摘要)。
/W 用宽列表格式[*file*],显示文件与目录的不同.
/X 显示为非 8.3 文件名产生的短名称。格式是 /N 的格式,短名称插在长名称前面。如果没有短名称,在其位置则显示空白。
/4 用四位数字显示年
/C 在文件大小中显示千位数分隔符。这是默认值,用 /-C 来禁用分隔符显示
/D 跟宽式相同,但文件是按栏分类列出的
/L 用小写
/N 新的长列表格式,其中文件名在最右边
/R 显示文件的备用数据流。
/S 显示指定目录和所有子目录中的文件
/T 控制显示或用来分类的时间字符域
/T:C 显示文件创建时间
/T:A 显示文件上次被访问时间
/T:W 上次被修改时间
/A: 显示具有指定属性的文件
D 目录 R 只读文件
H 隐藏文件 A 准备存档的文件
S 系统文件 I 无内容索引文件
L 解析点 - 表示“否”的前缀
/O: 排列顺序
N 按名称(字母顺序) S 按大小(从小到大)
E 按扩展名(字母顺序) D 按日期/时间(从先到后)
G 组目录优先 - 反转顺序的前缀

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1.查看文件属性为目录得列表
dir /A:D

#2.查看文件得所属用户
dir /P /Q
# 2019/07/11 16:30 <DIR> WEIYIGEEK\WeiyiGeek Users
# 2019/10/11 09:12 <DIR> BUILTIN\Administrators Note

#3.将目录查看进行优先,文件在其后面
dir /O:G *

#4.可以在 DIRCMD 环境变量中预先设定开关。通过添加前缀 - (破折号)来替代预先设定的开关。
#例如,/-W,/b:只有文件与目录名
dir /-w *
dir /b

WeiyiGeek.

WeiyiGeek.

1
2
3
4
5
#5.采用递归和通配符进行查询指定目录和所有子目录中得文件
dir *.exe /S

#6.批处理中可以使用批量后缀名查找指定目录中的文件
@dir > 1.txt /s /a /b d:\*.mp4
WeiyiGeek.

WeiyiGeek.


tree 命令

描述:显示目录文件结构(list contents of directories in a tree-like format.);
如果是没有安装tree的根据您的发行版本命令进行下载即可;

基础实例:

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
#实例1.windows
tree /f #以树形结构显示出目录,用参数/f 将列出第个文件夹中文件名称
tree /A #使用ASCLL码字符而不使用扩展文档

#Linux
tree -d #只显示目录。
tree -l #遵循目录之类的符号链接。

#示例2.目录文件以及层级
tree -L 1 #只显示第一层目录。

#示例3.排序
tree -L 1 -U #不进行排序
------- Sorting options -------
-v Sort files alphanumerically by version.
-r Sort files in reverse alphanumeric order.
-t Sort files by last modification time.
-c Sort files by last status change time.
-U Leave files unsorted.
--dirsfirst List directories before files (-U disables).

#示例4.输出格式指定
tree -L 1 -U -X
# <?xml version="1.0" encoding="UTF-8"?>
# <tree>
# <directory name=".">
# <file name="target.txt"></file>
# <file name="text.json"></file>
# <file name="WebMonitor.sh"></file>
# <file name="data.json"></file>
# <directory name="systemd-private-090d235c696a4104ae71cf3bdf48cf5f-chronyd.service-CZGiWV">
# </directory>
# <directory name="systemd-private-3aa3da91e60b476091ab058b2ced3118-chronyd.service-z24ATF">
# </directory>
# <directory name="tmp.Zozd9iUfKw">
# </directory>
# <file name="gosu.asc"></file>
# <directory name="web">
# </directory>
# </directory>
# <report>
# <directories>4</directories>
# <files>5</files>
# </report>
# </tree>

------- XML/HTML options -------
-X Prints out an XML representation of the tree.
-H baseHREF Prints out HTML format with baseHREF as top directory.
-T string Replace the default HTML title and H1 header with string.

WeiyiGeek.

WeiyiGeek.


文件目录操作

md命令 = mkdir命令

描述:创建目录,等于mkdir命令
语法:

1
2
MKDIR [drive:]path
MD [drive:]path

案例:

1
2
3
4
5
6
7
8
#1.常规使用多级目录建立
mkdir 目录名
mkdir www\1\2\3
cd www\1\2\3 && chdir

#2.如果需要MKDIR 会在路径中创建中级目录。例如: 假设 \a 不存在,那么:
md 目录1\目录2\目录\ //创建目录也可以创建目录中的目录 = 类似与LInux中mkdir -p 目录1/目录2/目录3
mkdir \a\b\c\d

WeiyiGeek.

WeiyiGeek.


rd命令 = rmdir命令

描述:删除空目录,但不能删除空目录,如需删除目录中的目录可以用/S
rd与rmdir是一样的,(二个命令作用相同)’

1
2
3
4
5
rmdir /S /Q 目录 
rd /S /Q 目录
#参数
/S删除目录及目录下的所有子目录和文件
/Q可取消删除操作时的系统确认就直接删除

基础示例:

1
rd www  //www为目录


del命令 = erase命令

描述:删除一个或数个文件

1
2
3
4
5
6
7
8
9
10
11
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

#参数说明
names :指定一个或多个文件或者目录列表,通配符可用来删除多个文件,如果指定了一个目录,该目录中的所有文件都会被删除
/S:递归查询
/Q:安静模式
/P:表示用户在删除多个文件时,询问是不是删除。=
/F:强制删除只读文件。
/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,
/A-R、/A-H、/A-S、/A-A表示删除 除只读、隐藏、系统、存档“以外的”文件

基础示例:

1
2
3
4
5
6
7
8
9
10
11
#1.表示删除当前目录下所有只读文件,
DEL /AR *.*

#2.表示删除当前目录下除系统文件以外的所有文件
DEL /A-S *.*

#3.加/F参数后就可删除只读文件
del /F 文件名

#4.del目录中的有文件,静默模式
del /S /Q 目录

WeiyiGeek.

WeiyiGeek.


explorer命令

描述:打开资源管理器不加任何参数默认打开库:

1
2
3
4
5
6
7
#1.打开我的文档
explorer /
explorer ?
explorer *

#2.打开指定的目录:
explorer d:\www


ren命令

描述:重命名文件

基础语法:

1
2
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

案例:

1
2
3
#1.重命名文件名, 请注意您不能为目标文件指定新的驱动器或路径
ren 原文件名 新文件名
ren test TestRen


copy 命令

描述:将一份或多份文件复制到另一个位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ ...]] [destination [/A | /B]]

#参数
source 指定要复制的文件。
/A 表示一个 ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
destination 为新文件指定目录和/或文件名。
/V 验证新文件写入是否正确。
/N 复制带有非 8dot3 名称的文件时尽可能使用短文件名

/Y 不使用确认是否要覆盖现有目标文件的提示
/-Y 使用确认是否要覆盖现有目标文件的提示

/Z 用可重新启动模式复制已联网的文件
L 如果源是符号链接,请将链接复制到目标而不是源链接指向的实际文件

命令行开关 /Y 可以在 COPYCMD 环境变量中预先设定。这可能会被命令行上的 /-Y 替代。除非 COPY命令是在一个批处理脚本中执行的,默认值应为在覆盖时进行提示
要附加文件,请为目标指定一个文件,为源指定数个文件(用通配符或 file1+file2+file3 格式)

基础案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#1.复制文件1到指定的目录为文件2,用参数/y就同时表达了你确认覆盖或者改写文件.
copy 路径文件名1 路径文件名2 /y

#2.复制本地C:\Windows\System32\srv.exe到对方的admin下,IPC$入侵会用到
copy c:srv.exe \\ip\admin$ #c:默认值的cmd下,在C:\windows\System32\下
copy \\ip\admin$\*.* d:\ #复制对方admini$共享下的srv.exe文件(所有文件)至本地C:C:\Windows\System32>


#3.图片马-将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件
copy 1st.jpg /b + 2st.txt/a 3st.jpg #注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件

#文件隐藏技术 - 文档存于图片
copy /b:文件1 + 文件2 + 文件N 合并后的文件名
copy /b file.jpg + teat.rar nice.jpg

WeiyiGeek.

WeiyiGeek.


xcopy 命令

描述:要复制的文件或目录树 目标地址目录名 (多个文件夹) ///复制文件和目录树,用参数/Y将不提示覆盖相同文件

基础语法:

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
XCOPY source(源文件) [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
[/EXCLUDE:file1[+file2][+file3]...]
source 指定要复制的源文件
destination 指定新文件的位置和/或名称

#参数说明
/A 仅复制有存档属性集的文件,但不更改属性
/B 复制符号链接本身与链接目标相对
/M 仅复制有存档属性集的文件,并关闭存档属性
/H 也复制隐藏文件和系统文件
/U 只复制已经存在于目标中的文件

/D:m-d-y 复制在指定日期或指定日期以后更改的文件, 如果没有提供日期,只复制那些源时间比目标时间新的文件
/P 创建每个目标文件之前提示您
/S 复制目录和子目录,不包括空目录
/E 复制目录和子目录,包括空目录 "与 /S /E 相同" 可以用来修改 /T
/T 创建目录结构,但不复制文件不包括空目录或子目录 "/T /E 包括空目录和子目录"

/V 验证每个新文件的大小
/W 提示您在复制前按键
/C 即使有错误,也继续复制
/I 如果目标不存在,且要复制多个文件,则假定目标必须是目录
/Q 复制时不显示文件名
/F 复制时显示完整的源文件名和目标文件名
/L 显示要复制的文件
/G 允许将加密文件复制到不支持加密的目标
/R 覆盖只读文件
/K 复制属性一般的 Xcopy 会重设只读属性
/N 用生成的短名称复制
/O 复制文件所有权和 ACL 信息
/X 复制文件审核设置(隐含 /O)

/Y 取消提示以确认要覆盖现有目标文件
/-Y 要提示以确认要覆盖现有目标文件

/Z 在可重新启动模式下复制网络文件
/J 复制时不使用缓冲的 I/O推荐复制大文件时使用
/EXCLUDE:file1[+file2][+file3]... 指定含有字符串的文件列表每个字符串在文件中应位于单独的一行,如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制该文件
(例如,指定如 \obj\ 或 .obj 的字符串会分别排除目录)

基础案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#1.开关 /Y 可以预先在 COPYCMD 环境变量中设置
xcopy "new 1.txt" f:\ /S

#2.本地硬盘操作把192.168.1.2计算机中的xue51_file文件夹下面的所有文件夹全部复制到bak_xue51这个文件夹下去,其中包含空的文件夹,在复制过程中不作覆盖方式提示
XCOPY D:\XUE51_FILE E:\BAK_XUE51 /S /E /Y /Q
XCOPY \\192.168.1.2\XUE51_FILE E:\BAK_XUE51 /S /E /Y

#3.如果目标不存在,且要复制多个文件,则假定目标必须是目录
xcopy "new 1.txt" f:\test\test.txt /I #需要输入
echo f | xcopy "new 1.txt" f:\test\test.txt /I #不需要输入
echo F | xcopy F:\gzkz2020\photo\10652\1201xxx28.jpg F:\gz2020\new\0115\205xxxxx01.jpg /I #不需要输入

#4.如果文件存在将自动覆盖
echo F | xcopy .\photos\14367\xxxxx.jpg .\zs\4367\21xxxxx95.jpg /Y

#5.目录复制对对拷
echo d|xcopy C:\Users\WeiyiGeek\Desktop\gs %gs%:\Temp\gs /E /Y & echo "拷贝完成"

WeiyiGeek.

WeiyiGeek.


move 命令

描述:移动文件并重命名文件和目录

1
2
3
4
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination #要移动至少一个文件:
MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2 #要重命名一个目录:
#参数
/y 将取消确认移动目录存在相同文件的提示就直接覆盖

基础示例:

1
2
move 盘符路径要移动的文件名 存放移动文件的路径移动后文件名   
move Testren.txt WWW.txt #同目录操作直接改名


replace 命令

描述:替换文件
基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
replace 源文件 要替换文件的目录  #替换文件
REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W]
REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W] [/U]
#参数:
[drive1:][path1]filename 指定源文件
[drive2:][path2] 指定要替换文件的目录
/A 把新文件加入目标目录不能和/S 或 /U 命令行开关搭配使用
/P 替换文件或加入源文件之前会先提示您进行确认
/R 替换只读文件以及未受保护的文件
/S 替换目标目录中所有子目录的文件不能与 /A 命令开关搭配使用
/W 等您插入磁盘以后再运行
/U 只会替换或更新比源文件日期早的文件不能与 /A 命令行开关搭配使用

基础示例:

1
2
3
4
5
6
7
8
#1.替换文件
replace c:\Testren.txt d:\test /R

#2.添加新的文件
replace c:\Testren.txt d:\test /A

C:\>replace c:\Testren.txt d:\test /A /P
是否添加 D:\test\Testren.txt? (Y/N) Y

WeiyiGeek.

WeiyiGeek.


assoc命令

描述:显示或修改文件扩展名关联。
如果在没有参数的情况下使用,则 assoc 将显示所有当前文件扩展名关联的列表。

语法:

1
2
3
4
5
assoc [.ext[=[FileType]]]

#参数:
.ext 指定跟文件类型关联的文件扩展名
fileType 指定跟文件扩展名关联的文件类型

注意事项:

  • 键入 ASSOC 而不带参数,显示当前文件关联。
  • 如果只用文件扩展名调用 ASSOC,则显示那个文件扩展名的当前文件关联。
  • 如果不为文件类型指定任何参数,命令会删除文件扩展名的关联。

案例:

1
2
3
#示例1.显示指定的文件类型,并且设置文件扩展名.
D:\www>assoc | more
assoc .asf=Test.asf

WeiyiGeek.

WeiyiGeek.


ftype 命令

描述:Windows中的一个命令,用于显示或修改用在文件扩展名中的关联,不带参数的命令则显示当前扩展名的关联情况(常常与ASSOC连用)

1
2
3
4
5
#语法:
Ftype [FileType[=[OpenCommandString]]]
#参数:
FileType: 指定要检查或改变的文件类型。
OpenCommandString : 指定调用这类文件时要使用的开放式命令。

基础案例:

1
2
3
4
5
6
7
8
9
10
#1.显示特定的文件类型 
ftype
ftype zapfile
 
#2.1可以抵挡一些病毒的方法
C:\Users\Administrator>ftype exefile ##原装
exefile="%1" %* #对于%1来表示exe本身,而%*表示传入的参数及多个参数.
 
#3.将EXE文件用NOTEPAD打开.
ftype exefile=%SystemRoot%\system32\notepad.exe %1

WeiyiGeek.

WeiyiGeek.

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#1.扩展配置
ASSOC .pl=PerlScript
FTYPE PerlScript=perl.exe %1 %* #允许您启用以下 Perl 脚本: script.pl 1 2 3

#2.如果不想键入扩展名,则键入以下字符串:
set PATHEXT=.pl;%PATHEXT%
#被启动的脚本如下:
script 1 2 3

#3.建立扩展名及指定文档类型的执行方式.
assoc .test=testscript
ftype testscript=%systemroot%\system32\notepad.exe %1
echo "sss" >> AF.test
> AF.test

WeiyiGeek.

WeiyiGeek.


文件内容

type 命令

描述:type 文件显示文本文件的内容,在内容多的时候常与more连用

1
type 文件名称|more


more 命令 - 一页一页向后显示文件的内容

描述:more 文件逐屏显示输出文件

快捷按键:

1
2
3
4
5
6
空格   : 向下翻一页
回车 : 向下一行
/字符串: 在显示的内容中查找字符串
:f : 显示当前行数与文件名称
b, CTRL+b : 回翻一页只对打开的文件有用对管道无用;
q : 退出离开

简单示例

1
type WIFI.txt | more

WeiyiGeek.

WeiyiGeek.


less 命令 - 一页一页可向前/后显示文件的内容

描述:该命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。

参数选项:

1
2
3
4
5
6
7
8
9
10
11
12
-b<缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o<文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x<数字> 将“tab”键显示为规定的数字空格

命令内部操作按键功能如下:

  • 用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页,要退出less程序,应按Q键
    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
    #基础操作
    b 向后翻一页
    d 向后翻半页
    h 显示帮助界面
    Q 退出less 命令
    u 向前滚动半页
    y 向前滚动一行
    空格键 滚动一页
    回车键 滚动一行
    :n - 浏览下一个文件
    :p - 浏览前一个文件


    #文件搜索
    / : 使用一个模式进行搜索,并定位到下一个匹配的文本
    ? : 使用模式进行搜索,并定位到前一个匹配的文本
    n : 向前查找下一个匹配的文本
    N : 向后查找前一个匹配的文本

    #全屏导航
    ctrl + F :向前移动一屏
    ctrl + B :向后移动一屏
    ctrl + D :向前移动半屏
    ctrl + U :向后移动半屏
    j : 向前移动一行
    k : 向后移动一行
    G : 移动到最后一行
    g : 移动到第一行
    q / ZZ : 退出 less 命令
    #标记导航 当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置。
    ma : 使用 a 标记文本的当前位置
    'a : 导航到标记 a 处'


    #编辑文件
    v : 进入编辑模式,使用配置的编辑器编辑当前文件 (Vim)

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#示例1.浏览多个文件
less file1 file2
#当打开多个文件时,使用如下命令在多个文件之间切换
:n - 浏览下一个文件
:p - 浏览前一个文件


#方式二,正在浏览一个文件时,使用 :e 打开另一个文件。
less file1
:e file2


#示例3.显示行号并且在文件末尾自己关闭文件
less -N -e 1.txt

WeiyiGeek.less示例

WeiyiGeek.less示例


sort 命令

描述:将输入的文件或者标准输入的数据进行排序,

基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]
[[drive1:][path1]filename1] [/T [drive2:][path2]]
[/O [drive3:][path3]filename3]

#参数
/+n 指定开始每个比较的字符号码 n。/+3 说明每个比较应从每行的第三个字符开始。少于 n 个字符的行排在其他行之前。按默认值,从每行的第一个字符开始比较。
/L[OCALE] locale 用指定的区域设置替代系统默认区域设置,""C"" 区域设置产生最快的排序顺序并且是当前的唯一其他选择。排序总是不分大小写的。
/M[EMORY] kilobytes 指定用于排序的主内存量,单位为 KB。最小内存量总是 160 KB。如果指定内存大小,无论主内存的可用量是多少,指定的内存量会全部用于排序。
要取得最佳性能,通常不指定内存大小。按默认值,如果达到默认最大内存值,排序会一次完成(非临时文件);否则,排序会分两次完成(没有完全排序的数据存储在临时文件中);用于排序和合并的内存量相等。如果输入和输出都是文件,默认最大内存量为可用主内存的 90%;否则,为主内存的 45%。

/REC[ORD_MAXIMUM] characters 指定记录中的最大字符数量(默认值为 4096,最大值为 65535)。
/R[EVERSE] 颠倒排序顺序,即,从 Z 到 A,再从 9 到 0

[drive1:][path1]filename1 指定要排序的文件。如果没有指定,则排序标准输入。指定输入文件比将同一个文件重定向为标准输入快

/T[EMPORARY]
[drive2:][path2] 指定保留排序工作存储的目录路径,以防主内存无法容纳数据。默认值是使用系统临时目录

/O[UTPUT]
[drive3:][path3]filename3 指定在哪个文件中储存经过排序的输入,如果没有指定,数据会被写入标准输出。指定输出文件比将标准输出重定向到同一个文件快

说明:

1
2
3
4
5
6
7
8
#sort,意为“以……排序”。
/r,全英文reverse,意为“颠倒”。
/+n,还是number,意为“数字”。
/m,全英文memory,意为“内存”。
/l,全英文locale,意为“场所”,引申为“区域设置”。
/rec,全英文record,意为“记录”。
/t,全英文temporary,意为“临时的”。
/o,全英文output,意为“输出”。

基础案例:

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
#1.不带任何参数的sort命令,比较第一个字符的大小(字母不区分大小写),按“顺序排列”输出(0-9,A-Z,a-z)
sort ip.txt


#2.利用sort,按单词的第二个字符顺序排列
sort /+2 ip.txt #这一次的排序是按照第二个字符的“顺序排列”(a-z)进行排列的,结合1、2节不难看出,其实sort ip.txt 的效果等同于 sort /+1 ip.txt。


#3.标准输入sort正序以及反序排列
D:\>dir /b | sort
Builder
Googledriver
MyDrivers
Program Files
Program Files (x86)
迅雷下载

D:\>dir /b | sort /R
迅雷下载
Program Files (x86)
Program Files
MyDrivers
Googledriver
Builder
#倒序排列
sort /r ip.txt #既然可以123,自然可以321,sort命令也可以倒序排列并输出。

WeiyiGeek.

WeiyiGeek.

1
2
3
4
5
6
7
8
#4.特殊的倒序方法(按文本倒序,没按字母排序)
#只要超过Len(str)长度+1+n,按文本倒序是将最后一行文本作为第一行,第一行作为最后一行(简而言之就是文本行颠倒)

#5.将排序结果输出到文件利用重定向符,将排序结果输出到文件
sort /r ip.txt>hello1.txt

#6.利用sort的/o参数,将排序结果输出到文件
sort ip.txt /o hello2.txt
WeiyiGeek.

WeiyiGeek.

1
2
3
4
5
#7./rec参数(指定sort能处理的最大行)
#sort命令默认的文本最大行含有4096个字符(2的12次幂),最多可以含有65535个字符,这里设置了一个特殊的文本a.txt来加以说明
#a.txt中一共含有2行文本,每行文本含有4097个字符
sort a.txt
sort /rec 4097 a.txt


对/m和/t参数的一些说明

  • /m参数是用来指定参与排序的内存,换句话说就是“你分多少内存(单位kb)给sort命令排序”
  • /t参数是用来指定缓存文件的目录,举个例子来说,我要处理8m的大文本,指定内存为500kb,500kb怎么装得下8m的文件?这时怎么办呢?
    • (按1m=1000kb算)先将500kb装入内存,再将剩下的7500kb分15次装入内存,缓存文件放在/t指定的目录中。

例如:16.txt是一个8m的文本

1
2
sort 16.txt /m 500 /t C:\dcache
#说明:16.txt是一本小说,用sort排序之后自然是“惨不忍睹”的,对于结果没有什么好说的,主要说说这行代码运行后产生的一些问题。

WeiyiGeek.

WeiyiGeek.

  • 问题1.运行代码后,提出警告信息“警告: 做大量排序时使用重定向输出通常比直接指定输出文件名称来排序慢。”——这个前面说过了“/o参数比重定向符(>)快”
  • 问题2.运行代码后,在目录C:\dcache中产生了一个以“srt”+16进制随机数命名的.tmp文件,出现过几秒,后被系统删除(没用/t参数指定的目录时,默认缓存文件目录是%temp%)
  • 问题3.当我将/m指定的内存数500kb变为160kb(160kb是sort命令默认的最小内存)时,竟然提示“没有足够的内存,无法完成排序”


问题:重定向与/o两者的差别:
描述:根据微软的机器翻译“指定输出文件比将同一文件作为标准输出重定向速度快”,也就是说/o参数比重定向符(>)快,这个不好实际测试;


问题引出的简单思考:
既然是简单思考,自然不会分析的太过深入:

  • 问题1.如果说/o比重定向符(>)快,而且有时用重定向符(>)还会出现“警告”,那么完全可以舍弃重定向符(>),只要想输出排序结果就用/o参数。
  • 问题2.缓存文件产生的原因是指定了内存的大小,不指定就不会出现,也就是说“不用/m参数就不会出现缓存文件,而不用/m参数,/t参数也没用”。
  • 问题3.不指定用于排序的内存大小,就不会提示“内存不足”,那么不用/m参数不就好了。


fc命令

描述:感觉不是很好用,类似于Linux中:Diff命令;比较两个文件或两个文件集并显示它们之间的不同。
基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/U] [/W] [/nnnn] [drive1:][path1]filename1 [drive2:][path2]filename2
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2

#参数:
/A 只显示每个不同处的第一行和最后一行
/B 执行二进制比较
/C 不分大小写
/L 将文件作为 ASCII 文字比较
/LBn 将连续不匹配的最大值设置为指定的行数
/N 在 ASCII 比较上显示行数
/OFF[LINE] 不要跳过带有脱机属性集的文件
/T 不要将制表符扩充到空格
/U 将文件作为 UNICODE 文本文件比较
/W 为了比较而压缩空白(制表符和空格)
/nnnn 指定不匹配处后必须连续匹配的行数
[drive1:][path1]filename1 指定要比较的第一个文件或第一个文件集
[drive2:][path2]filename2 指定要比较的第二个文件或第二个文件集。

基础案例:

1
2
3
4
5
6
#1.文件比较
D:\>fc 1.txt 2.txt > 3.txt #对比二个文件并把不同之处输出到3.txt文件中,"> "和"> >" 是重定向命令
D:\>fc /A 1.txt 3.txt #相邻的一行会受到影响

#2./LBn,n为显示差异的行数
D:\www>fc /LB2 1.txt 2.txt

WeiyiGeek.

WeiyiGeek.

1
2
#3.显示行数
D:\www>fc /N 1.txt 2.txt
WeiyiGeek.

WeiyiGeek.


comp命令

描述:比较两个文件或两个文件集的内容,貌似10 个不匹配之处.

语法:

1
2
3
4
5
6
7
8
9
10
COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C] [/OFF[LINE]]
#参数:
data1 指定要比较的第一个文件的位置和名称
data2 指定要比较的第二个文件的位置和名称
/D 以十进制格式显示差异。
/A 以 ASCII 字符显示差异。
/L 显示不同的行数。
/N=number 只比较每个文件中第一个指定的行数。
/C 比较文件时 ASCII 字母不区分大小写。
/OFF[LINE] 不要跳过带有脱机属性集的文件。要比较文件集,请在 data1 和 data2 参数中使用通配符

基础案例:

1
2
#示例1.每一行的差异对比
comp 1.txt 2.txt /A

WeiyiGeek.

WeiyiGeek.

1
2
3
#示例2.偏移量和行数
comp 1.txt 2.txt /D #十进制
comp 1.txt 2.txt /L #显示行数
WeiyiGeek.

WeiyiGeek.


where命令

描述:显示符合搜索模式的文件位置在默认情况下,搜索是在当前目录和 PATH
环境变量指定的路径中执行的

基础语法:

1
2
3
4
5
6
7
WHERE [/R dir] [/Q] [/F] [/T] pattern#模式
#参数列表:
/R 从指定目录开始,递归性搜索并显示符合指定模式的文件
/Q 只返回退出代码,不显示匹配文件列表(安静模式)匹配文件(安静模式)
/F 显示所有相配文件并用双引号括上
/T 显示所有相配文件的文件的文件,有字节大小和建立时间等.
pattern 指定要匹配的文件的搜索模式,通配符 * 和 ? 可以用在模式中也可以指定 "$env:pattern""path:pattern" 格式; 其中"env" 是环境变量,搜索是在 "env" 变量的指定的路径中执行的

补充:

  • 这些格式不应该跟 /R 一起使用此搜索也可以用将 PATHEXT 变量扩展名附加于此模式的方式完成
  • 注意: 如果搜索成功,此工具返回错误级别 0; 如果不成功,返回 1; 如果失败或发生错误,返回 2

基础案例:

1
2
3
4
5
6
7
8
9
10
11
12
#1.递归目录进行搜寻可以财团
where /R C:\Users\Administrator\Desktop *.txt | more
where /r c:\windows *.exe *.dll *.bat #可以搜索多个后缀的文件

#2.采用环境变量进行搜寻 pattern,
WHERE $windir:*.*
C:\Users\Administrator>echo %windir%
C:\windows

#3./F 与 /T的不同之处对比
WHERE /F $windir:*.dll
WHERE /T /F $windir:*.dll

WeiyiGeek.

WeiyiGeek.

1
2
#4.搜索多个路径的指定后缀的文件绝对路径:
WHERE "c:\window;c:\temp;*.dll" | more
WeiyiGeek.

WeiyiGeek.


search命令

描述:强大文件搜索器,相当于Linux的find,search -help

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
usage: search.bat [options] [-e] [PerlRegex ....]
## 选项:在哪里搜索
-dir DIRPATH start search at the named directory (default is current dir).
-xdev stay on starting file system.(启动文件系统)
-sort sort the files in each directory before processing.在处理前对每个目录中的文件进行排序
-nolinks don't follow symbolic links.(快捷方式连接.lnk)'

## 选项:告诉你要考虑哪些文件:
-mtime 天数数字 consider files modified > # days ago (-# for < # days old) # 考虑到几天前修改过的文件(-为小于天)
-newer FILE consider files modified more recently than FILE (also -older) # 考虑最近修改的文件比文件(也更老)
-name GLOB consider files whose name matches pattern (also -regex). # 考虑那些名称与模式(regex)相匹配的文件
-skip GLOB opposite of -name: identifies files to not consider. # 与-name:标识不考虑的文件
-path GLOB like -name, but for files whose whole path is described. # 类似-name,但对于描述完整路径的文件
-dpath/-dregex/-dskip versions for selecting or pruning directories. # 用于选择或删除目录的版本
-all don't skip any files marked to be skipped by the startup file. #不要跳过任何标记为被启动文件跳过的文件
-x<SPECIAL> (see manual, and/or try -showrc). 参见手册和/或尝试search -showrc
-why report why a file isn't checked (also implied by -vvvv). # 报告为什么不检查一个文件(也隐含在vvvv中)

## 选项:告诉我们如何处理将被考虑的文件
-f | -find just list files (PerlRegex ignored). Default is to grep them.
-ff | -ffind Does a faster -find (implies -find -all -dorep) # 更快地找到(暗示-找到-全部-多普)


## 选项:控制如何完成搜索(以及打印的内容):
-l | -list only list files with matches, not the lines themselves. # 只列出带有匹配的文件,而不是那些行本身
-nice | -nnice print more "human readable" output. #打印更多的“人类可读”输出
-n prefix each output line with its line number in the file. #在每个输出行前面加上它的行号
-h don't prefix output lines with file name. #不要在输出行前加上文件名
-u also look "inside" manpage-style underlined text #还可以查看“内部”的manpage样式的下划线文本
-i do case-insensitive searching. #Ignore 大小写
-w match words only (as defined by perl's \b). # \b以字符开头的hostname


## OTHER OPTIONS:
-v, -vv, -vvv various levels of message verbosity. # 各种各样的信息冗言
-e end of options (in case a regex looks like an option). # 选项的结束(如果一个regex看起来像一个选项)
-showrc show what the rc file sets, then exit. # 跳过指定的prefix后缀名
-norc don't load the rc file.
-dorep check files with multiple hard links multiple times. # 多次检查多个硬链接的文件

基础示例:

1
2
3
4
5
6
7
8
#1.搜索修改时间小于4天的文件与关键字
search -mtime -4 hostname[关键字]

#2.列出文件(默认-f递归)
SEARCH -f

#3.正则匹配
search -w \bhostname

WeiyiGeek.

WeiyiGeek.


find 命令

描述:在磁盘中搜索文件(按要求), 查找文件内容的命令
基础语法:

1
2
3
4
5
6
7
8
9
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
#参数:
/V 显示所有未包含指定字符串的行
/C 仅显示包含字符串的行数
/N 显示行号
/I 搜索字符串时忽略ignore大小写
/OFF[LINE] 不要跳过具有脱机属性集的文件
"string" 指定+要搜索的文本字符串
[drive:][path]filename] 指定要搜索的文件

如果没有指定路径,FIND 将搜索在提示符处键入,的文本或者由另一命令产生的文本
注意:有中文乱码,chcp 进行更改活动代码页

基础示例:

1
2
3
#1.字符串包含
find "string" d:\ #查找包含关键字的某文件
find /N "##" C:\Users\Administrator\Desktop\shellstudy\Shell入门\*.sh | More

WeiyiGeek.

WeiyiGeek.

1
2
3
4
5
#2.统计包含":80"字符串的行(有bug)
netstat -na | find /C ":80"

#3.不显示带有指定字符的行:
netstat -na | find /V ":*"
WeiyiGeek.

WeiyiGeek.


findstr 命令

描述:在命令执行结果中搜索指定字符串一般常与 | 联用,也可以查询文件中的字符串;

基础语法:

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
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ ...]]
#基础示例
/B 在一行的开始配对模式 ^
/E 在一行的结尾配对模式 $
/L 按字使用搜索字符串 #使用该选项,正则表达式将会失效#
/R 将搜索字符串作为一般表达式使用
/S 在当前目录和所有子目录中搜索匹配文件
/I 指定搜索不分大小写
/X 打印完全匹配的行
/V 只打印不包含匹配的行
/N 在匹配的每行前打印行数
/M 如果文件含有匹配项,只打印其文件名

/O 在每个匹配行前打印字符偏移量
/P 忽略有不可打印字符的文件
/OFF[LINE] 不跳过带有脱机属性集的文件

/A:attr 指定有十六进位数字的颜色属性请见 "color /?" /A:0A
/F:file 从指定文件读文件列表 (/ 代表控制台)
/D:dir 查找以;分号为分隔符的目录列表

/G:file 从指定的文件获得搜索字符串 (/ 代表控制台)
/C:string 使用指定字符串作为文字搜索字符串

strings 要查找的文字
[drive:][path]filename 指定要查找的文件

表达式的快速参考:

1
2
3
4
5
6
7
8
9
10
.        通配符: 任何字符
* 重复: 以前字符或类出现零或零以上次数
^ 行位置: 行的开始
$ 行位置: 行的终点
[class] 字符类: 任何在字符集中的字符
[^class] 补字符类: 任何不在字符集中的字符
[x-y] 范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的文字用法
\<xyz 字位置: 字的开始
xyz\> 字位置: 字的结束

基础示例:

1
2
3
4
5
6
7
8
9
10
11
#1.搜索多个字符串,除非参数有 /C 前缀,请使用空格隔开搜索字符串:
'FINDSTR "hello there" TEXT.txt' #在文件 x.y 中寻找 "hello" 或"there" (注意不同)
'FINDSTR /C:"hello there" TEXT.txt' #在文件 x.y 寻找"hello there"

netstat -an | findstr /n "443 FIN" #满足443 与 FIN 字符串

#2.在aa.txt文件中寻找字符串hello
findstr "Hello" aa.txt

#3.也可以通过和管道符(|)其他命令来获取过滤信息.
netstat -an | findstr "ESTABLELISHE"

WeiyiGeek.

WeiyiGeek.

1
2
3
#4.采用正则匹配,进行只显示OS开头得项,/B 类似于正则 
systeminfo | findstr /B /C:"OS"
systeminfo | findstr /C:"\<OS\>"
WeiyiGeek.

WeiyiGeek.

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
#5.#查找包含了指定字符的文本文件
findstr /m /i "hello" *.txt #/m只显示包含该字符串的文件名称

#6.#查找以hello(忽略大小写)开始的行
findstr /b /i "hello" a.txt
findstr /i "^hello" a.txt #这里的^可不是转义符,而是正则表达式中的“匹配行开始的位置”。

#7.#查找与指定字符完全匹配的行
findstr /n /i "^hello$" a.txt
findstr /n /i /x "hello" a.txt #提供了/x参数用来查找完全匹配的行

#8.#查找不包含指定字符的行 /v参数
findstr /vni "hello" a.txt

#9.#查找当前目录及子目录下文件内容中包含某字符串的文件名
findstr /ms "hello" *

#10.#用文本制定要查找的文件 And 用文本制定要在该文件的目录中查找的字符串并显示
findstr /f:file.txt /im "hello"
#file.txt,内容如下(这个文本中指定findstr要查找的文本的路径)
C:\Users\helloworld\Desktop\1.txt
C:\Users\helloworld\Desktop\a.txt
C:\Users\helloworld\Desktop\clip.txt
C:\Users\helloworld\Desktop\CrLf 批处理笔记.txt
C:\Users\helloworld\Desktop\file.txt
C:\Users\helloworld\Desktop\MyRarHelp.txt
C:\Users\helloworld\Desktop\test.txt

#11.#用文本制定要查找的字符串
findstr /ig:string.txt a.txt
# string.txt,内容如下(这个文本中指定findstr要查找的字符串):
# ^hello
# world
WeiyiGeek.

WeiyiGeek.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#12.指定要查找的目录多个目录以 ; 进行分割;
findstr /imd:520;编程; ".*" "*.txt"
FINDSTR /IMD:A;B;C "include" "*"

#13.统计字符数
findstr /o .* test.txt #/o:在每行前打印字符偏移量
#上一行中的.*为正则表达式的内容,表示任意行,包含空行

#14.以指定颜色显示文件名
/a:当被搜索文件名中含有通配符*或?时对搜索结果的文件名部分指定颜色属性,具体颜色值参见color帮助:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色

findstr /in /a:18 "wmi" *.txt
WeiyiGeek.

WeiyiGeek.


文件属性

attrib 命令

描述:文件与目录的设置所有属性-权限,显示或更改文件属性。
基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]
[drive:][path][filename] [/S [/D] [/L]]
#参数
+ 设置属性
- 清除属性
R 只读文件属性
A 存档文件属性
S 系统文件属性
H 隐藏文件属性
I 无内容索引文件属性
[drive:][path][filename] 指定 attrib 要处理的文件

/S 处理当前文件夹及其所有子文件夹中的匹配文件 (递归)
/D 也处理文件夹 (Directory)
/L 处理符号链接和符号链接目标的属性 (link)

基础案例:

1
2
3
4
5
6
7
#1.查看某文件(目录)的属性
attrib 文件名(目录名)
A C:\WiFi_Log.txt

#2.存档,只读,系统,隐藏 属性;用+则是添加为某属性
attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的
attrib +R 1.txt #给1.txt文件添加只读属性

WeiyiGeek.

WeiyiGeek.


cacls命令

注意: 不推荐使用 Cacls,请使用 Icacls,显示或者修改文件的访问控制列表(ACL)
基础语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CACLS filename [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C] [/G user:perm]
[/R user [...]] [/P user:perm [...]] [/D user [...]]
#参数
/T 更改当前目录和所有子目录指定文件的ACL
/L 对照目标处理符号链接本身
/M 更改装载到目录的卷的 ACL
/S:SDDL 使用在 SDDL 字符串中指定的 ACL 替换 AC, (/E、/G、/R、/P 或 /D 无效)。
/E 编辑ACL,而不是替换他
/C 在出现拒绝访问错误时继续

/G 用户名:perm 赋予指定用户访问权限;
/R 用户名:取消指定用户的访问权限(通常来恢复被拒绝用户的访问)-仅在与 /E 一起使用时合法
/P 用户名:perm 替换指定用户的访问权限
/D 用户名:设定拒绝某用户访问;/D pub 设定d:\est.txt拒绝pub用户访问

Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;

缩写解释:

  • CI - 容器(Container)继承(此文件夹和子文件夹)- ACE 会由目录继承
  • OI - 对象(Object)继承(此文件夹和文件) - ACE 会由文件继承
  • IO - 只继承:ACE 不适用于当前文件/目录
  • ID - 已继承:ACE 从父目录的 ACL 继承(Directory)

基础示例:

1
2
icacls 文件名      #查看文件的访问用户权限列表
cacls 文件名 参数 #显示或修改文件访问控制列表(ACL)——针对NTFS格式时

WeiyiGeek.

WeiyiGeek.

1
2
3
#1.拒绝administrator用户访问特定的文件 (注意管理人员不能给自己设定,否则下面获取权限的命令没用)
cacls test.txt /D administrator
cacls 1.txt /e /d administrator #/e进行编辑ACL,在后面就可以恢复administrator的权限
WeiyiGeek.

WeiyiGeek.

1
2
3
4
5
6
7
8
9
10
#2.恢复pub访问特定的权限(必须要与/E连用,编辑ACL表,对于普通用户有效)
cacls est.txt /R pub /E
cacls c:cmd.exe /e /d guest #Guest禁用Cmd
cacls c:cmd.exe /e /r guest #解禁

#3.设置everyone访问d:\GAME权限为无null
cacls d:\game /p everyone:n

#4.设置administrators对于c:|windows\*.*进行对文件目录递归编辑ACL列表,修改为管理员完全控制.
calcs c:\windows\*.* /T /E /G Administrator:F
WeiyiGeek.

WeiyiGeek.


icacls命令

描述:cacls类似,但可以更加细分的划去权限.
基础语法:

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
ICACLS name [/grant[:r] Sid:perm[...]]
[/deny Sid:perm [...]]
[/remove[:g|:d]] Sid[...]] [/T] [/C] [/L]
[/setintegritylevel Level:policy[...]]
#参数
/grant[:r] Sid:perm 授予指定的用户访问权限。如果使用 :r,这些权限将替换以前授予的所有显式权限,如果不使用 :r,这些权限将添加到以前授予的所有显式权限。

/deny Sid:perm 显式拒绝指定的用户访问权限,将为列出的权限添加显式拒绝 ACE,并删除所有显式授予的权限中的相同权限。

/remove[:[g|d]] Sid 删除 ACL 中所有出现的 SID
:g,将删除授予该 SID 的所有权限
:d,将删除拒绝该 SID 的所有权限

/setintegritylevel [(CI)(OI)] 级别将完整性 ACE 显式添加到所有匹配文件。
要指定的级别为以下级别之一: L[ow] M[edium] H[igh],完整性 ACE 的继承选项可以优先于级别,但只应用于目录。

/inheritance:e|d|r
e - 启用继承
d - 禁用继承并复制 ACE
r - 删除所有继承的 ACE

#注意: Sid 可以采用数字格式或友好的名称格式。如果给定数字格式,那么请在 SID 的开头添加一个 *。
/T 指示在以该名称指定的目录下的所有匹配文件/目录上执行此操作。
/C 指示此操作将在所有文件错误上继续进行,仍将显示错误消息。
/L 指示此操作在符号链接本身而不是其目标上执行。
/Q 指示 icacls 应该禁止显示成功消息(静默模式)

基础使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#将匹配名称的文件和文件夹的 DACL 存储到 aclfile 中以便将来与/restore 一起使用。
#请注意,未保存 SACL、所有者或完整性标签
ICACLS name /save aclfile [/T] [/C] [/L] [/Q]

#将存储的 DACL 应用于目录中的文件
ICACLS directory [/substitute SidOld SidNew [...]] /restore aclfile [/C] [/L] [/Q]
    
#更改所有匹配名称的所有者。该选项不会强制更改所有身份;使用 takeown.exe 实用程序可实现该目的
ICACLS name /setowner user [/T] [/C] [/L] [/Q]

#查找包含显式提及 SID 的 ACL 的所有匹配名称
ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]

#查找其 ACL 不规范或长度与 ACE 计数不一致的所有文件
ICACLS name /verify [/T] [/C] [/L] [/Q]
    
#为所有匹配文件使用默认继承的 ACL 替换 ACL
ICACLS name /reset [/T] [/C] [/L] [/Q]

补充说明:

  • 1.ICACLS 保留 ACE 项的规范顺序:
    • 显式拒绝—显式授予
    • 继承的拒绝—继承的授予
  • 2.perm 是权限掩码,可以两种格式之一指定:
    简单权限序列:
    • N - 无访问权限
    • F - 完全访问权限
    • M - 修改权限
    • RX - 读取和执行权限
    • R - 只读权限
    • W - 只写权限
    • D - 删除权限
  • 3.在括号中以逗号分隔的特定权限列表:

    • DE - 删除
    • DC - 删除子项

    • S - 同步sync

    • X - 执行/遍历
    • MA - 允许的最大值max

    • AS - 访问系统安全性

    • AD - 附加数据/添加子目录

    • GR - 一般性读取

    • GW - 一般性写入
    • GE - 一般性执行
    • GA - 全为一般性

    • RA - 读取属性

    • RC - 读取控制
    • RD - 读取数据/列出目录
    • REA - 读取扩展属性

    • WA - 写入属性

    • WD - 写入数据/添加文件
    • WDAC - 写入 DAC
    • WO - 写入所有者
    • WEA - 写入扩展属性
  • 4.继承权限可以优先于每种格式,但只应用于目录:
    • (OI) - 对象继承
    • (CI) - 容器继承
    • (IO) - 仅继承
    • (NP) - 不传播继承
    • (I) - 从父容器继承的权限 = (ID)

基础示例:

1
2
3
4
5
6
7
8
9
10
11
#1.- 将 c:\windows 及其子目录下所有文件的 ACL 保存到 AclFile。
icacls c:\windows\* /save AclFile /T

#2.- 将还原 c:\windows 及其子目录下存在的 AclFile 内所有文件的 ACL。
icacls c:\windows\ /restore AclFile

#3.- 将授予用户对文件删除和写入 DAC 的管理员权限。
icacls file /grant Administrator:(D,WDAC) ##(02括号中以逗号分隔的特定权限列表:)

#4.- 将授予由 sid S-1-1-0 定义的用户对文件删除和写入 DAC 的权限。
icacls file /grant *S-1-1-0:(D,WDAC)

WeiyiGeek.

WeiyiGeek.


takeown 命令

描述:该工具以重新分配文件所有权的方式允许管理员重新获取先前被拒绝访问的文件访问权,
成为文件或者文件夹的所有者,File or Dircrotry文件所有权和访问权;

1
2
3
4
5
6
7
8
9
10
11
12
TAKEOWN [/S system [/U username [/P [password]]]]  /F filename [/A] [/R [/D prompt]]

#参数列表:
/S system 指定要连接到的远程系统
/U [domain\]user 指定用户上下文,命令在此上下文中执行
/P [password] 指定给定用户上下文的密码如果省略,提示输入
/F filename 指定文件名或目录名模式可以用通配符 "*"指定模式允许共享名\文件名
/A 将所有权给于管理员组,而不是当前用户
/R 递归(recursion): 指示工具运行于指定的目录和子目录里的文件上
/D prompt 当前用户在一个目录里没有“列出文件夹”权限时,使用默认答案当在子目录里进行递归 (/R) 操作时会发生这种情况
可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制
用有效值 "Y" 获取所有权或用 "N" 跳过

注意:
1) 如果指定了 /A,文件所有权会给与当前登录的用户
2) 不支持用 “?” 和 “*” 混合的模式
3) /D 用于抑制确认提示

基础示例:

1
2
3
4
5
6
7
8
9
#1.使用帮助
takeown /?

#2.指定文件名将其所有权赋给当前用户
takeown /f test.log

#3.当我把Acfile设置成系统文件,并拒绝administrator修改读取删除,在利用takeown设置/A管理员组进行控制,下面要解除限制删除Acfile文件的步骤.
D:\www>icacls AclFile /grant administrator:F #由administrator完全控制
D:\www>attrib -s AclFile #去掉系统文件属性

WeiyiGeek.

WeiyiGeek.


文件验证

verify 命令

描述:指示 cmd.exe 是否要验证文件是否已正确地写入磁盘。
适用系统:Windows 7, Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Vista, Windows XP

基础语法:

1
2
3
#要显示当前 VERIFY 设置,键入不带参数的 VERIFY。
verify /? #指示 cmd.exe 是否要验证文件是否已正确地写入磁盘。
VERIFY [ON | OFF] # Switches the verify setting on or off


进程文件

openfiles 命令

描述:显示通过本地程序(进程)打开的一些关联文件,允许管理员列出或中断系统上已打开的文件和文件夹。需要启动系统全局标志“维护对象列表”才能查看本地打开的文件,类似于在linux下的工具lsof

基础示例:

1
2
3
4
5
6
7
8
9
10
11
openfiles /parameter [arguments]
openfiles /Local [ ON | OFF ]
描述:允许系统管理员启用或禁用系统全局标志“维护对象列表”。该列表记录本地文件处理。这个命令行开关所作的改动只有在系统重新启动后才生效。

openfiles /local on #开启会占用系统资源,"需要重启";
openfiles /local off #关闭系统全局标志“维护变量列表”;

#参数列表
/Disconnect #中断至少一个打开的文件的连接
/Query #显示所有从本地或从共享文件夹进程打开的文件
/Local #启用 / 禁用本地打开文件的显示

参数帮助:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
OPENFILES /Disconnect /?
OPENFILES /Query /?

#二级参数
/S system 指定要连接到的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行命令。
/P [password] 指定所给用户上下文的密码。
/FO format 指定显示结果的格式。有效值: "TABLE""LIST""CSV"
/NH 指定“列标题”不应该显示。只对 "TABLE""CSV" 格式有效。
/V 指定显示详细输出。
/ID id 指定根据文件 ID 中断打开文件的连接。打开文件的连接。可以使用通配符 "*"
/A accessedby 指定根据 "accessedby" 值中断打开文件的连接。可以使用通配符 "*"
/O openmode 指定根据 "openmode" 值中断打开文件的连接。有效值是读取、写入或读取/写入。可以使用通配符 "*"
/OP openfile 指定与所有打开的文件断开连接文件的连接。可以使用通配符 "*"

基础示例:

1
2
3
#1.打开显示所有进程打开得文件
openfiles
openfiles |findstr svchost # 当然也能只看打开svchost.exe的程序

WeiyiGeek.

WeiyiGeek.


1
2
3
4
5
6
7
8
#2.进行查询并且按照CSV格式进行输出
openfiles /query /FO CSV /NH

#3.中断一个打开得链接
OPENFILES /Disconnect /ID 1
OPENFILES /Disconnect /A username
OPENFILES /Disconnect /O Read/Write
OPENFILES /Disconnect /OP "c:\My Documents\somedoc.doc" /ID 234