批处理程序全名为 Batch file programming 是微软操作系统自带的原生开发语言,不需要构建任何环境即可运行,批处理程序是脚本程序,文件后缀名为 .bat
Batch file 批处理文件使用cmd.exe程序执行(简单来说就是dos命令)
在Windows系统下完成自动化操作,辅助完成复杂且机械性的操作提高工作效率,如批量改文件后缀、匹配规则删除指定文件、批量创建计算机病毒或者新建文件日志等应用场景。
批处理程序可以使用文本编辑器即可轻松编写,无需安装其他开发工具。可以使用可以使用Windows系统自带的记事本编写(请保存为.bat后缀文件形式),可以使用第三方的文本编辑器编写,个人建议使用sublime text3软件编写(ST自带命令高亮提示)
从上到下,从左到右一条条依次执行!Windows命令和参数不区分大小写!!!for 与 FOR 、/p 与 /P 结果是一样的 (参数除外:如for命令变量区分大小写)
编写批处理文件通常带有以@echo off 开头的头部和以pause 结尾的尾部
标准首尾格式:
rem 以下的“rem” 后的为注释语句!
rem 从本行开始关闭回显功能,并显示当前行命令↓
@echo off
... ...(代码...)
rem pause语句会暂停批处理程序,并显示以下消息:请按任意键继续. . .↓ 若不使用pause停止,批处理程序会直接运行结束后关闭窗口,会出现类似于窗口闪退的效果。
pause
扩展:如果需要关闭pause回显的"请按任意键继续..."可以使用 pause>nul 将输出重定向到空设备而不是控制台输出即可。(原因:pause命令没有任何参数,不能使用@pause屏蔽回显功能)
批处理命令的基本格式
以下是创建一个新计算机用户的操作:
命令 + 子命令 + 参数 + 相关操作 + 附加选项(可有可无,一般有默认值)
net user test 1234 /add /ACTIVE:{YES}
选项补充知识 描述
--------------------------------------------------------------------
/ACTIVE:{YES | NO} 激活或取消激活帐户。如果该帐户处于非激活状态,
用户将无法访问服务器。默认设置为“YES”。
编写批处理程序中有以下几个常用的便捷命令方便编写:
1、命令帮助信息查看/? 和 命令详细信息查看 /help,或者help + 命令
2、清空屏幕 cls(cmd中编写过多无用命令时使用,清屏)
3、注释 rem 与 :: ,以下介绍单行注释和块注释两种
单行注释 rem 与 ::(两种写法都是单行代码不执行,且结果一样,可以说::是rem的符号表示)
多行注释写法1:使用goto命令自循环,但代码块内不写代码,则goto和代码块zhushi之间可以添加文字注释(此时他们之间是可以执行命令的,所以注释记得不带命令)
@echo off
goto zhushi
我是注释。我是注释。我是注释
:zhushi
echo 你好,我叫小明
pause>nul
多行注释写法2:多个rem或者::编写(重复性较大)
@echo off
rem 我是注释1
rem 我是注释2
rem ... ...
echo 你好,我叫小明
pause>nul
1、 echo命令,显示消息,或者启用或关闭命令回显。
rem 输入不带参数的echo会显示当前回显的状态
echo
rem echo命令常用于在控制台中输出运算结果
echo 你好,我叫小明!
rem echo 开启回显
echo on
rem echo 关闭回显
echo off
2、 type命令,显示文本文件的内容。
rem type命令格式为:TYPE [drive:][path]filename
rem drive代表盘符,path代表相关路径,filename代表文件名
rem 文件详细路径可加可不加,不加则只能识别到当前目录下的文件!
rem 查看aaa.txt文本内容
type aaa.txt
3、sort排序命令,进行字符串排序,以下针对常用的参数进行讲解
rem 不带任何参数的sort命令,比较第一个字符的大小(字母不区分大小写)
rem 默认按“顺序排列”输出(a-z,0-9)
sort workerlist.txt
rem 带倒序参数/r(/R)的为倒叙排列,比较第一个字符的大小(字母不区分大小写)
rem 按“倒序排列”输出(z-a,9-0)
sort /r workerlist.txt
rem 参数/+n,表示从第几个字符开始排序,n为字符位置,可以与/r参数组合使用
rem 从第二次个字符开始倒序排列,并将结果输出到newlist.txt
sort /+2 /r workerlist.txt>newlist.txt
rem /o参数指定排序数据输出到指定文件中,与重定向结果一致,但会比重定向要快!
sort /+2 /r workerlist.txt /o newlist.txt
4、字符匹配命令find与findstr,文件中搜索指定的字符串,如果没有指定路径,FIND 将搜索在提示符处键入的文本或者由另一命令产生的文本(以下是演示文本内容)
rem find命令,不带参数情况
rem 查找测试文本文件中的包含110字符的字符串
find "110" 测试文本.txt
rem find /v 参数是显示所有未包含指定字符串的行,即为find不带参数的差集。
find /v "110" 测试文本.txt
rem find /c 输出匹配到的行数,可用作汇总
find /c "110" 测试文本.txt
rem find /n 输出匹配到的行号及内容
find /n "110" 测试文本.txt
rem find /i 搜索字符串时忽略大小写,即比如搜索r字符会将带r与R字符串一并匹配(这里不做演示)
find /n "r" 测试文本.txt
findstr有更多的参数和操作。更详细匹配时会用到
这里用到的案例1.txt
Hello World
Hello Boy
hello ,good man.
goodbye!
rem findstr /b参数,为begin缩写,匹配的是指定字符开头的字符串
findstr /b "hello" 1.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
hello ,good man.
rem findstr /e参数,为end缩写,匹配的是指定字符结尾的字符串
findstr /e "y" 1.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
Hello Boy
rem 通俗理解 findstr /l为文字匹配模式,/r为正则表达式匹配模式,正常情况下默认是开启/r模式
rem findstr /l参数,为language缩写,使用文字模式搜索字符串,与/r模式相反
rem /l模式下“”内部字符全都识别为字符串,无法使用正则表达式符号匹配!
findstr /l "hello" 1.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
hello ,good man.
rem findstr /r参数,为regular缩写,开启正则表达式模式,可识别正则表达式符号!默认模式可以不写/r
findstr /r "^Hello" 1.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)以Hello开头的字符
Hello World
Hello Boy
rem findstr /s参数,在当前目录和所有子目录中搜索匹配文件及信息
rem 不加/s则只会匹配当前目录中的txt文件!!!
findstr /s "hello" *.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
3.txt:hello ,good man.
ttt\1.txt:hello ,good man.
ttt\2.txt:hello ,good man.
rem 不使用/s只能搜索到当前目录中的txt文件,而不能匹配到当前目录下的ttt子目录下的文件
findstr "hello" *.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
3.txt:hello ,good man.
rem findstr /m参数,如果文件含有匹配项,只打印其文件名
rem 由于/s会名字和内容都匹配出来,所以常与/s组合成/sm使用
findstr /sm "hello" *.txt
—————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
3.txt
ttt\1.txt
ttt\2.txt
rem findstr /i参数,匹配内容不区分大小写
findstr /i "^hello" 3.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
Hello World
Hello Boy
hello ,good man.
rem findstr /x参数,完全匹配字符串,字符位置符号都必修一致。
findstr /x "goodbye!" 3.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
goodbye!
rem findstr /v参数,打印不匹配的行,为匹配字符的差集
findstr /v "^hello" 3.txt
—————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
Hello World
Hello Boy
goodbye!
rem findstr /n参数,在匹配的每行前打印行数
findstr /n "^hello" 3.txt
—————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
3:hello ,good man.
rem findstr /o参数,在匹配的每行前打印到首行第一个字符字符偏移量。
rem 这里需要注意的是每行结尾的换行算2个字符
findstr /o "Hello" 3.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
0:Hello World
13:Hello Boy
rem findstr /x参数,完全匹配字符串,字符位置符号都必须一致。
findstr /x "goodbye!" 3.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
goodbye!
rem findstr /c:参数,使得匹配的字符转变为文字匹配模式,与/l类似
rem 此时Hello后的空格只作为字符,不做分隔符
findstr /c:"Hello " 3.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
Hello World
Hello Boy
rem 此时Hello后的空格只做分隔符,不做字符,所以这时是匹配World和good开头的字符
findstr "World good" 3.txt
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
Hello World
hello ,good man.
goodbye!
rem findstr /f:从指定文件读文件列表中匹配包含的字符的文件,输出其文件名
rem filepath.txt存放的是以下2个文件的路径
rem D:\ttt\1.txt
rem D:\ttt\2.txt
findstr /f:filepath.txt /im "hello"
————————————————————————————————————————————
结果为(←这句不是输出结果!下面才是↓)
D:\ttt\1.txt
D:\ttt\2.txt
一般表达式的快速参考:
. 通配符: 任何字符
* 重复: 以前字符或类出现零或零以上次数
^ 行位置: 行的开始
$ 行位置: 行的终点
[class] 字符类: 任何在字符集中的字符
[^class] 补字符类: 任何不在字符集中的字符
[x-y] 范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的文字用法
\<xyz 字位置: 字的开始
xyz\> 字位置: 字的结束
以下是表达式速讲(记住:特殊字符不会被识别成普通字符,除非用来转义符号)参考文档——CMD 中 findstr 正则表达式
(1) 通配符 . 代表任何一个字符,包含包括字母、数字、半角符号还有空格,通常在打印所有文本信息中使用。
rem 查找2.txt文件中的任意字符,不包括空行
findstr "." 2.txt
或
findstr . 2.txt
(2)重复符 * 代表前面字母的出现次数(出现次数从0到多次,0表示没有)
rem 查找2.txt文件中的任意字符,包括空行。
findstr ".*" 2.txt
或
findstr .* 2.txt
rem 查找2.txt文件中包含a字符,以及a字符后出现0次或者多次c字符的字符行
findstr "ac*" 2.txt
——————————————————以下都会识别——————————————————————
ab
abc
accd
addc
abbbccc
(3)行首符 ^ 和行尾符 $
rem 查询2.txt文件中以dos字符开头的字符行
findstr "^dos" 2.txt
rem 查询2.txt文件中以dos字符结尾的字符行
findstr "dos$" 2.txt
rem 查询2.txt文件中以dos为开头和结尾,即dos单独一行
findstr "^dos$" 2.txt
————————————————————————————————————————————————————————
rem 拓展:如果^dos$不加""会怎样?(自己试试吧)
findstr ^dos$ 2.txt
::结果会输出以dos开头和结尾的所有的字符行,而不是单一dos一行
(4)字符集规则,即[class]
规则说明
1、匹配集合中任意一个字符即满足匹配。
2、集合中允许包含字母和数字和一般的半角字符,如:}{ ,.][等。
3、""引号为特殊字符不可被识别
4、汉字由于不是ASCII码不能被识别
5、如果在字符集内插入通配符和重复符号,即"[.*]"将会把. 和 *都会被视为普通字符
rem 查询2.txt文件中查询包含0-9的字符行
findstr "[0-9]" 2.txt
rem 查询2.txt文件中包含任意英文字符的字符行
findstr "[a-zA-Z]" 2.txt
rem 查询2.txt文件中包含a b c d s字符的字符行
findstr "[abcds]" 2.txt
rem 查询2.txt文件中包含a到c或者o到s字符的字符行
findstr "[a-co-s]" 2.txt
rem 查询2.txt文件中组合匹配项
rem Ma1Y , Mb1Y, Mc1Y; Ma2Y , Mb2Y, Mc2Y; Ma3Y , Mb3Y, Mc3Y以上均可匹配到
findstr "M[abc][123]Y" 2.txt
(5)[^class] 是[class]的差集,查询任何不在字符集中的字符。
在使用差集时需要注意匹配的字符不能过滤带空格的字符行,可能会导致匹配不精准
rem 过滤不包含空格的纯数字字符行,注意此时不能过滤abc123这类组合字符和 218这种包含空格的字符行
findstr "[^0-9]" 2.txt
rem 过滤不包含空格的纯字母字符行(无论大小写),注意此时不能过滤abc123这类组合字符和 abc这种包含空格的字符行
rem 由于dos正则表达式不太规范会出现以下的问题:
rem [^a-z]或者[^A-Z]即可代表非纯字母行,而不是[^a-zA-Z],如需要排除大写字母的行就不行了。
——————————————————————————————————————————————————————————————————————————————————
findstr "[^a-z]" 2.txt
或
findstr "[^A-Z]" 2.txt
rem 过滤大写字母字符行正确写法
findstr "[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]" 2.txt
rem 过滤字母非abc三个字母组成的字符行。注意:带空格的字符行不行
findstr "[^abc]" 2.txt
(6)单词前缀后缀定位规则,即\<xyz和xyz\>,用于单个单词的匹配的
说明:由于补给中使用了前缀符号^,所以这里重新使用新符号代替,\<xyz和xyz\>,此时的\为转义符号,< >符号也不是重定向符号!!!xyz可以是英文单词或数字,但不适用于汉字。
rem 查询以start开头的字符行
findstr "\<start" 3.txt
rem 查询以end结尾的字符行
findstr "end\>" 3.txt
rem 查询包含单个单词end的字符行,此时如果存在空格隔开的单词(如:abc end)也会匹配到
findstr "\<end\>" 3.txt
(7)元字符 x 的文字用法,由于字符匹配中可能需要特殊字符,但通常来说由于系统占用是不可乱用的,我们此时就需要使用转义字符将他变成纯字符。
元字符 | 对应的转义字符 |
---|---|
\ | \\ |
? | \? |
< | \< |
> | \> |
. | \. |
* | \* |
rem 匹配带.字符行
findstr "\." 3.txt
输出Hello Windows
@echo off
echo Hello Windows!
pause>nul
C:表示驱动器C:
C:\表示驱动器C:的根目录
介绍:批处理命令@是回显控制开关,带了则关闭回显,不带@则默认开启回显
"关闭回显"值的是运行批处理程序的时候,不显示程序中的每条命令。win系统默认打开
以下是不带@情况如图1所示
dir
rem 重定向到空设备↓
pause>nul
以下是带@情况如图2所示
@dir
rem 重定向到空设备↓
pause>nul
%用于变量引导,%%在文本编辑模式下用于for命令中充当转义的作用,相当于命令行模式下的%!引用变量用%var%
最常用以下11个 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %* ,%0 和 %* 特殊就单独讲解
引用变量用%var%,调用程序外部参数用%1 至%9
@echo off
echo 我输入的3个变量为:%1、%2、%3
pause>nul
%0 代表批处理文件本身,包括完整的路径和扩展名
@echo off
rem 输出当前批处理文件自身,即该文件的完整路径信息
echo %0
pause>nul
由于%0可以代表自己,所以可以使用%0代表自己的路径,实现自我复制
@echo off
rem 自己a.bat复制成b.bat
copy %0 b.bat
pause>nul
%* 代表外部输入的所有参数
@echo off
rem 打印所有输入的参数
echo %*
pause>nul
重定向符号可以让输入输出流从原本默认位置重定向到指定位置。输入或输出数据流的位置即为句柄。
默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe,然后由Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。
句柄 | 数字代码 | 指代 |
STDIN | 0 | 外部设备数据流输入 |
STDOUT | 1 | 数据流输出到命令提示符窗口。 |
STDERR | 2 | 错误输出到命令提示符窗口,2代码指代错误信息,可以使用>&或者&<重定向错误信息 |
UNDEFINED | 3-9 | 这些句柄由应用程序和各个具体工具单独定义。 |
1、> 重定向输出符号,将数据流输出从默认命令行窗口重定向到指定位置。若多次输出到同一个文本文件中则会不断覆盖原有的内容
rem 将网卡连接详细信息输出到ipmessage.txt
ipconfig /all>ipmessage.txt
2、>> 重定向输出符号,将数据流输出从默认命令行窗口重定向到指定位置。若多次输出到同一个文本文件中则会不断在后面追加而不会覆盖内容
echo 你>>test.txt
echo 好>>test.txt
echo 小>>test.txt
echo 明>>test.txt
3、< 将外部输入作为数据流输入。
sort<test.txt
结果输出
——————————————————————————————————
1
2
3
a
b
4、重定向符号&可以将会一个句柄复制到另一个句柄处,格式为&句柄号,如&1。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
譬如:将dir目录信息重定向到file.txt文件,并将错误信息也重定向到file.txt文件
rem 做法1:
rem 正确信息与错误分开导出(类似左花括号)
rem 正确信息输出到file.txt,错误信息输出到error.txt 但无论是否有输出都会生成这两个文件
dir>d:\file.txt 2>d:\error.txt
rem 做法2:
rem 使用共同输出通道导出到同一个文件中(类似右花括号)
rem 使用2>&1,复制错误句柄到句柄1,即file.txt文件中
dir>d:\file.txt 2>&1
管道符号即将前一个命令的输出作为下一个命令的输入处理,当第一个命令运行的时候后续的其他命令都会停止,知道他前一个命令出结果才继续运行,类似单线程。
rem 目录名按字母顺排
dir | sort
rem 查询当前目录下所有包含file字符的文件名
dir /b|find "file"
组合多个命令,格式: 命令1&命令2&命令3&... 前一个命令报错或者不执行不影响后一个命令的执行
eco 123&echo 456
运行结果
————————————————————————————————————————
'eco' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
456
由于或运算符合1*1=1,1*0=0,0*1=0规律,只执行到第一条错误命令后停止,后续命令无论对错都不执行。(口诀:有错就停)
rem 2条命令都正确的话,结果都执行
echo 123&&echo 456
rem 第1命令错误,第2命令正确,结果直接报第1个命令错误,第2命令不执行
ech 123&&echo 456
rem 第2命令错误,第1命令正确,结果都执行,但第1个输出结果,第2个报错
echo 123&&ech 456
rem 2条命令都错误的话,结果只报第1个错误,与第2点同理!
ech 123&&ech 456
由于或运算符合1+0=1,0+1=1规律,可以记作只运行到第一条正确指令立即停止,后续指令不执行(口诀:碰到对就停)
rem 2条命令都正确的话,结果只运行第一条
echo 123||echo 456
rem 第1命令错误,第2命令正确,结果直接报第1个命令错误,第2命令执行,第3条命令无论对错都不执行
ech 123||echo 456||echo 789
rem 第2命令错误,第1命令正确,结果只执行第1个输出结果,第2个命令不执行
echo 123||ech 456
rem 2条命令都错误的话,结果只报第1、2个报错,直到第三个正确命令运行后停止
ech 123||ech 456||echo 789
分组符号可以将多个命令分为一组,视为一条命令行运行。
rem 同时输出1,2,3
echo 1&echo2&echo 3
—— —— —— —— —— —— —— —— —— —— —— —— —— —— ——
rem 使用括号分行写,结果与上面的一样
(
echo 1
echo 2
echo 3
)
分号分隔符主要在命令相同时,可以将不同目标用,不需要重复写相同的命令。
rem 打印C、D盘文件信息,不需要重复写2次命令,只需用;分隔C、D盘符即可
dir /a /b c:\;d:\
正则表达式下代表的是开头,而非正则表达式模式下代表的是转义符号,详情可以查看findstr命令介绍。
rem 比如需要打印一些特殊字符如< > >>这类的重定向符号,我们就要用到转义字符
rem 直接输出会报错
echo >
——————————————————————————————————————————————
命令语法不正确。
echo ^>
——————————————————————————————————————————————
>
双引号可以解决常见的带空格问题!!!
rem 使用find或者findstr这类字符匹配命令需要指定特定字符,一般用双引号括起来
rem 如果匹配字符中有的空格存在则必须加上双引号,若没有空格则双引号可加可不加!
dir c:\ |findstr /i "A*"
(1)逗号相当于空格,在某些情况下","可以用来当做空格使
rem 查询C盘目录信息
dir,c:\
写法等于
dir c:\
(2)分号,当命令相同时,可以将不同目标用;如执行过程中发生错误,程序会报错停止
rem 打印c盘和d盘所有文件信息
dir /a/b/s c:\;d:\
rem 错误示范:打印c、f、d盘所有文件信息
dir /a/b/s c:\;f:\;d:\
————————————————输出结果如下————————————————————
系统找不到指定的路径。
(3)在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,请看前面的 setlocal 命令介绍
dos命令中变量经常出现,用于各种算术或者逻辑运算。set命令与变量经常使用,这里一起介绍。
rem 设置变量a的值为123,这里变量a不需要添加%%
set a=123
rem 这里引用变量a需要加上%%
echo %a%
set 命令用于显示、设置或删除 cmd.exe 环境变量。
注意事项:
(1)如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL设置成 1。
(2)SET 命令不允许变量名含有等号。
1、set /?查询当前set命令用法
2、不带参数的 set 显示当前环境变量
3、可仅用一个变量激活 SET 命令,等号或值不显示时则前缀匹配变量名
rem 命令则匹配所有前缀带p的环境变量和自定义变量,大小写不区分都匹配出来
rem 会显示所有以字母 P 打头的变量
set p
4、set 变量名=值,变量赋值
set a=1
5、set a= 删除参数
set a=
6、/A 和 /P 命令行开关
rem /A 命令开关支持表达式运算(/A与/a一致,不区分大小写)
set /a 1+1
@echo off
rem /P 命令行开关支持外部设备输入值作为参数,即外部传参!(/P与/p不区分大小写)
echo 请输入你的名字:
set /p a=
echo 你好,我叫%a%
pause>nul
(1)常见的加减乘除取余计算 + - * / %
set /a 1+1
set /a 2-1
set /a 10*10
set /a 10/2
(2)运算符运算优先级
运算符号 | 说明 |
---|---|
() | 分组符号 |
! ~ - | 一元运算符 |
* / % | 算数运算符 |
+ - | 算数运算符 |
<< >> | 逻辑移位 |
& | 按位“与” |
^ | 按位“异” |
| | 按位“或” |
= *= /= %= += -= | 复合赋值运算符 |
&= ^= |= <<= >>= | 复合赋值运算符 |
, | 表达式分隔符,如a=1,b=2中分隔表达式 |
(1)启动命令 start,这里列举常用几个参数
//格式如下:
START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
[command/program] [parameters]
start 命令可以打开盘符、文件、文件夹、程序、网站
rem 打开盘符
start c:
rem 打开指定目录
start d:\aaa
rem 打开指定文件
start d:\aaa\file.txt
rem 打开批处理程序
start d:\aaa\myprogram.bat
rem 打开网站,这里系统会使用默认的浏览器打开
start www.baidu.com
"title"窗户标题定义参数,定义窗口标题栏中显示的标题
start "这是我的第一个程序" aaa.bat
max和min参数,定义启动模式,以最大/小化方式启动窗口
start 1.txt min
/b 参数,在当前窗口启动程序,不打开新窗口。要注意的是该模式下ctrl+c中止跳出程序会报错,正确做法是使用^break中止并跳出程序
start /b aaa.bat
常见错误:
1、路径出现空格的情况会报错
2、打开带空格目录名正确写法start "" "aa bb"
rem 正确写法的在出现空格的地方加上""
start d:\"aa bb".txt
或者把整个路径用括号括起来,多次出现空格时比较方便,中间需要加个空""才能正确识别路径
start "" "d:\aa bb.txt"
(2)程序调用命令 call,从批处理程序调用另一个批处理程序
call [drive:][path]filename [batch-parameters]
中文翻译:
call [盘符:][路径]文件名[批处理参数,传递调用的批处理程序]
案例说明:
call d:\abc\test.bat 123
其中:d:为盘符,\abc\test.bat为路径,test.bat 为文件名,123为批处理参数(如同目录下调用无需写详细盘符和路径,直接写文件名即可)
用法1:调用另一个批处理程序。
1、同目录下调用无需详细路径,直接写文件名即可
rem 相同目录下
call test.bat
2、不同路径下则必须标注好详细路径
rem 不同目录下
call d:\abc\test.bat
案例演示:
主程序代码
@echo off
echo 我是主程序!!!
echo 现在开始调用副程序
echo ************副程序输出***************
call d:\bb.bat 小明
echo ************************************
echo 副程序调用完成。
pause>nul
副程序代码,副程序放D盘根目录下,传递参数小明给副程序输出
@echo off
echo 你好,%1
用法2:调用当前批处理程序中的某个代码块(内部调用),类似goto的代码块调用,但写法有区别。
这里代码块 :label 叫做标签,是指定调用位置的标签,标签后的代码块可以看作一个内嵌的批处理程序
@echo off
echo 我是主程序!!!
echo 现在开始调用副程序
echo ************副程序输出***************
call :aa 小明
echo ************************************
echo 副程序调用完成。
pause
:aa
echo 你好 %1
:bb
echo 你好 小红
重点:call 的代码块调用会回调的,即执行完调用的代码后返回继续执行后续的代码,则goto调用不会
问1:什么会调用aa标签的代码还会输出bb标签中的代码结果?
答:因为call调用标签会转到aa标签所在的地方继续执行后面的代码直至程序结尾,无论是否是标签内部代码,运行结束后才会跳回调用处继续执行后续代码。(这里的call调用标签相当于流程的转变)
————————————————————————————————————————————————————————————————————————
问2:以上案例的执行顺序是怎样的?
答:1-5~10~11~12~13~14~6~7~8
————————————————————————————————————————————————————————————————————————
问3:call内部标签的调用时pause应该放在哪里?
答:因该放在主程序结尾,且必须在所有标签前,不然由于call流程转变会执行到结尾的机制,若pause在标签后,程序执行就可能中止,需要人为继续下去。
3、批参数(%n)的替代已被增强。您可以使用以下语法:
%~1 - 删除引号("),扩充 %1
%~f1 - 将 %1 扩充到一个完全合格的路径名
%~d1 - 仅将 %1 扩充到一个驱动器号
%~p1 - 仅将 %1 扩充到一个路径
%~n1 - 仅将 %1 扩充到一个文件名
%~x1 - 仅将 %1 扩充到一个文件扩展名
%~s1 - 扩充的路径指含有短名
%~a1 - 将 %1 扩充到文件属性
%~t1 - 将 %1 扩充到文件的日期/时间
%~z1 - 将 %1 扩充到文件的大小
%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1
扩充到找到的第一个完全合格的名称。如果环境
变量名未被定义,或者没有找到文件,此组合键会
扩充到空字符串
可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,
并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
可以参照 call/? 或 for/? 看出每个参数的含意
echo load "%%1" "%%2">c:test.txt
生成的文件内容为 load "%1" "%2"
批处理文件里,用这个格式把命令行参数输出到文件
(3)流程转向控制命令 goto 用法与call类似,但本质区别在于程序是否回调,且只能是内部块的调用,无法待用另一个批处理程序。
@echo off
echo 我是主程序!!!
echo 现在开始调用副程序
echo ************副程序输出***************
goto aa
echo ************************************
echo 副程序调用完成。
:aa
echo 你好 小明
pause
:bb
echo 你好 小红
区别1:调用子程序执行完成后不回调
区别2:不会像call调用后从标签执行到结尾,只会执行到调用块的结束
区别3:如果需要暂停程序查看结果,pause必须在子程序中结束,否则由于不回调机制,程序会完成子程序后自动关闭
区别4:goto命令不能传参
注意事项:[:标识符]中标识符正常来说不得含有逗号、冒号等特殊符号,但可以使用空格。
(4)程序关闭命令 exit,退出 CMD.EXE 程序(命令解释器)或当前批处理脚本
EXIT [/B] [exitCode]
/B 指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个 批处理脚本外执行,则会退出 CMD.EXE(使用cmd.exe调用批处理时只想结束批处理而不关闭cmd窗口则需要加/b)
exitCode 指定一个数字号码。如果指定了 /B,将 ERRORLEVEL设成那个数字。如果退出 CMD.EXE,则用那个数字设置 过程退出代码。(0代表正确返回,9009代表错误返回)
程序代码:
@echo off
echo exit命令讲解
pause
rem 这里设置errorlevel参数后会结束该程序,但负责调用他的cmd窗口不会关闭,exit后语句不会执行。
exit /b 123
echo abc
pause>nul
使用cmd窗口调用该程序
常用的三个用法
1、错误数字代码判断
IF [NOT] ERRORLEVEL number command <==> IF [NOT] %ERRORLEVEL% equ number command
2、字符匹配
IF [NOT] "string1"=="string2" command3、文件存在判断
IF [NOT] EXIST filename command4、判断变量是否已经定义
IF [NOT] defined variable command
5、数字匹配
IF [NOT] number1 equ number2 command
ELSE 子句必须出现在同一行上的 IF 之后。例如:
IF EXIST filename. (
del filename.
) ELSE (
echo filename. missing.
)
补充:由于> < >>等符号被占用,在数字匹配中的我们就需要用到英文缩写来代表特定符号,常见的符号及其缩写如下表
中文名称 | 符号 | 缩写 | 英文全称 |
---|---|---|---|
等于 | = | equ | equal |
大于 | > | gtr |
greater than |
大于或等于 | >= | geq | greater than or equal |
小于 | < | lss | less than |
小于或等于 | <= | leq | less than or equal |
不等于 | != | neq | no equal |
注意点:使用if...else...语句必须严格注意空格位置,否则程序可能会报错,譬如分组写法中else(XXX)必须写成else (XXX)必须有空格隔开if XXX(command)中必须写成if XXX (command)
rem 1、错误数字代码判断
rem 输入错误命令die
die
rem 判断错误数字代码,检查命令运行是否有错
if %errorlevel% equ 9009 (
echo 命令执行正确
)
@echo off
rem 2、字符匹配
echo 请输入第一个字符
set /p a1=
echo 请输入第二个字符
set /p a2=
echo 以下输出字符匹配结果(不区分大小写),这里变量需要放在引号内,/i参数不区分大小写
if /i "%a1%"=="%a2%" (
echo 字符匹配
) else (
echo 字符不匹配
)
pause
@echo off
rem 3、判断ccc.bat文件是否存在
if exist ccc.bat (
echo 文件存在
) else (
echo 文件不存在
)
pause
@echo off
rem 4、判断变量是否定义
rem 打印a变量的信息
set a
if defined a (
echo 变量已定义
)else (
echo 变量未定义
)
pause
@echo off
rem 数字匹配
echo 请输入第一个数字:
set /p a1=
echo 请输入第二个数字:
set /p a2=
if %a1% equ %a2% (
echo 数字匹配
)else (
echo 数字不匹配
)
pause
对一组文件中的每一个文件执行某个特定命令
·1、无参数形式
FOR %变量名 IN (set) DO 命令 命令参数
set 指定一个或一组文件。可以使用通配符,在正常必须,%变量 在批处理程序中必须写成 %%变量 的形式,且变量区分大小写(%i与%I为两个变量)
rem 列出当前文件夹中所有文件名
for %a in (*.*) do @echo %a
rem 列出当前文件夹中所有jpg格式文件名
for %a in (*.jpg) do @echo %a
2、/d 参数只能显示当前目录下的目录名字
FOR /D %变量 IN (set) DO 命令 命令参数
rem 输出当前路径下所有目录名
for /d %a in (*) do @echo %a
rem 输出当前目录下所有第二个字符为n的目录名(不分大小写)
for /d %a in (?n*.*) do @echo %a
3、/r 搜索指定路径及所有子目录中与set相符合的所有文件
FOR /R [[盘符:]路径] %变量 IN (set) DO 命令 命令参数
rem 罗列D盘所有目录及其子目录下所有文件信息
for /r D:\ %a in (*) do @echo %a
4、/l(该集表示以增量形式从开始到结束的一个数字序列,可以使用负的步长)
FOR /L %变量 IN (开始位置,步长,结束位置) DO 命令 命令参数
rem 使用for循环输出1-10的数字
for /l %a in (1,1,10) do @echo %a
rem 使用for语句循环创建10个文件夹,并以"我的第n个文件夹"的形式命名
for /l %a in (1,1,10) do md 我的第%a个文件夹
rem 输出100,80,60,40,20
for /l %a in (100,-20,1) do @echo %a
5 /f 可以遍历文件内字符,即文件文本解析
FOR /F %变量 IN (文件完整路径或文件名) DO 命令 命令参数
rem 遍历输出test.txt文件中的字符
for /f %a in (test.txt) do @echo %a
/f 参数还有许多附加的参数,比较难,这里不做介绍,详情请查看以下文章。。。dos for循环讲解
代码块需要集合call 或者 goto 命令才能使用
区别:goto调用不能带参数(且只能内部调用),call调用允许带参数(允许内部和外部批处理程序调用)
@echo off
echo 现在开始调用代码块abc
goto abc
:abc
echo 我是abc代码块!
pause
命令介绍:显示目录中的文件和子目录列表
命令格式:
DIR [盘符:][路径][文件名] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
参数 | 说明 | 用法讲解/补充 |
/A | 显示具有指定属性的文件 | 已定义的属性有: D 目录 R 只读文件 H 隐藏文件 A 准备存档的文件
dir /A:H-O 查询当前目录和子目录下的隐藏文件和非脱机文件 |
/B | 使用空格式(没有标题信息或摘要),即单纯列出目录名或者文件名 | dir /B |
/C |
在文件大小中显示千位数分隔符。这是默认值。用 /-C 来禁用分隔符显示。 | dir /C 文件大小使用千位数分隔符分隔 如 1,836 dir /-C 文件大小不使用千位数分隔符分隔 如1836 |
/D | 跟宽式相同,但文件是按栏分类列出的(类似表的形式列出) | 如下形式列出文件信息 |
/W | 用宽列表格式 | 与/D相同 |
/L | 用小写(所有英文字母小写) | dir /L |
/N | 新的长列表格式,其中文件名在最右边 | 默认情况下就是长列表格式 |
/O | 用分类顺序列出文件 | 附加属性有以下几个,可以根据自定义的规则列出文件 N 按名称(字母顺序,系统默认排序) S 按大小(从小到大)
按文件大小从大到小排序 dir /o:-s 按文件创建时间从先到后排序 dir /o:d |
/P |
在每个信息屏幕后暂停 | 针对文件信息较多情况下使用,就是文件信息当前的窗口无法全部显示,需要一页一页暂停查看的时候使用。(类似于翻页) |
/Q | 显示文件所有者 | 文件权限归属者,一般为创建用户 |
/S | 显示指定目录和所有子目录中的文件。 | 显示C盘下所有目录及其子目录文件信息,并以翻页下形式展示 dir c:\ /a/s/p |
/R | 显示文件的备用数据流 | |
/T |
控制显示或用来分类的时间字符域 |
由于系统默认显示时间只显示最后一次修改时间,如果需要查看文件创建时间或者上次写入时间就需要使用/T参数进行设置(可设置属性如下↓) C 创建时间 A 上次访问时间 W 上次写入的时间 dir /T:C 显示当前目录下的文件创建时间 |
/X | 显示为非 8dot3 文件名产生的短名称。格式是 /N 的格式,短名称插在长名称前面。如果没有短名称,在其位置则显示空白 | |
/4 | 以四位数字显示年份 | windows系统中默认使用4位数年份的格式,/4参数默认情况下可不写 |
全称 chdir (切换目录),缩写cd,写全称或者缩写都行,标准下发有以下几种
CHDIR [/D] [盘符:][路径]
CHDIR [..] ——返回上级目录(当前目录的父目录)
CD [/D] [盘符:][路径]
CD [..] ——返回上级目录(当前目录的父目录)
想要更深入的了解cd命令需要了解以下几个问题:
1、首先要理解C:与C:\区别(\是路径的符号,盘符加了就是代表路径)
这两者看起来相似但实际上表达的意思却截然不同,C:代表盘符C,即C盘,而C:\代表C盘根路径
2、区分什么是指定驱动器目录和当前驱动器目录!
譬如下面就是我的电脑打开cmd命令行窗口默认的驱动器目录,一般系统默认驱动器目录会是当前系统的用户目录,如:C:\Users\当前用户名
如cd d:\abc 这一类指定的目录就是指定的驱动器目录(下面以D盘为例)
当前驱动器目录是需要使用 /D 参数改变的,单纯指定驱动器目录只会打印出指定驱动器目录,不会改变当前驱动器目录,同时会将D盘默认目录D:\设置为D:\ABC,这种设置生命周期只在该命令窗口打开期间,关闭后会重置为默认的D:\ ,以下用一个例子说明下
3、\D 参数除了可以改变驱动器的默认目录之外,还可改变当前驱动器
4、由于windows文件名、目录名不区分大小写,但显示的时候保留大小写形式,假设指定驱动器目录为D:\AbC(磁盘名上的大小写<显示情况下>),我们设置的时候输出命令cd D:\abc,系统会自动识别并将默认驱动器命令设置为正确的D:\AbC。
原介绍描述如下:当前的目录字符串会被转换成使用磁盘名上的大小写。所以,如果磁盘上的大小写如此,CD C:\TEMP 会将当前目录设为C:\Temp
5、cd 命令不把空格当作分隔符
即路径出现空格的情况可以不像其他命令一样带""处理!!!cd \winnt\profiles\username\programs\start menu 与 cd "\winnt\profiles\username\programs\start menu" 结果一致
6、返回当前目录的上一级目录(父级目录) cd ..
md 全称 mkdir 是 make directory(创建目录)的缩写
命令格式
MKDIR [盘符:]路径
MD [盘符:]路径
rem 在当前驱动盘的根目录创建\a\b\c的多层目录
rem 如当前驱动器目录为C:\Users\你好打工人\Desktop,则在C盘根目录下创建文件夹
md \a\b\c
——————————————————————————————————————————————————————————————————————————
rem 在当前目录下创建\a\b\c的多层目录
md .\a\b\c
——————————————————————————————————————————————————————————————————————————
rem 在当前目录的上一级目录创建\a\b\c的多层目录
md ..\a\b\c
——————————————————————————————————————————————————————————————————————————
rem 同时创建多个目录(空格分隔)
md 目录1 目录2 ... 目录n
rd 全称 rmdir 是 remove directory(删除目录)的缩写
命令格式
RMDIR [/S] [/Q] [盘符:]路径
RD [/S] [/Q] [盘符:]路径有以下2个参数
/S 除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
/Q 安静模式,带 /S 删除目录树时不要求确认
注意:
有时候如果目录为空删除的时候会报目录为空,此时可以使用强制删除操作 /s/q 可完成。
rem 同时删除多个目录(空格隔开)
rd /s /q 目录1 目录2 ... 目录n
path命令是可执行文件显示或设置一个搜索路径
PATH [[drive:]path[;...][;%PATH%]
path的几个写法讲解:
1、单纯一个path命令且不带参数,输出当前系统的环境变量,或者设置的新路径
2、path变量清空,记住是英文分号
rem 这个写法是清除所有搜索路径设置并指示 cmd.exe 只在当前目录中搜索。变量清空
PATH ;
3、设置单个或者多个搜索路径,使用分号分隔
格式如:path 路径;路径2;路径3;... (多个路径使用分号分隔)
path C:\WINDOWS\system32;D:\abc
4、需要保留旧路径设置,使用增量添加变量值,这里使用%path%指代旧路径
rem 这里注意分号分隔时不需要加空格分开,直接紧贴前一个写就好
rem 写法1:添加在旧路径后
path %path%;D:\abc
rem 写法2:添加到旧路径前
path D:\abc;%path%
注意事项:
1、设置了搜索路径后计算机就可以识别或者打开那个路径下的命令、运行程序或者批处理文件
下面拿打开计算器程序讲解
知识补充:计算器程序名calc.exe ,默认保存在系统的C:\WINDOWS\system32下(这个目录保存了包括cmd.exe和众多系统内部命令、系统程序)
2、变量生命周期:设置的路径不会改变当前系统的环境变量,其生命周期仅限在当前命令窗口打开时间内,重启cmd即可还原,我们设置的变量相当于临时变量
以图形显示驱动器或路径的文件夹结构(不是文件!如果要文件则需要加 /F 参数)
TREE [drive:][path] [/F] [/A]
/F 显示每个文件夹中文件的名称。
/A 使用 ASCII 字符,而不使用扩展字符。
1、单纯命令 tree :列出当前目录的文件夹结构
2、无参数 列出指定路径的文件夹结构
3、/F 参数 显示每个文件夹中文件的名称
4、/A 参数 拓展符号|— 换成 ASCII 字符表示
7.1 文件复制操作 copy
将一份或多份文件复制到另一个位置。
COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B] [+ source [/A | /B] [+ ...]] [destination [/A | /B]]
source 指定要复制的文件。
destination 为新文件指定目录和/或文件名。
/A 表示一个 ASCII 文本文件。
/B 表示一个二进位文件。
/D 允许解密要创建的目标文件
/V 验证新文件写入是否正确。(文件复制错误会返回错误信息)
/N 复制带有非 8dot3 名称的文件时,尽可能使用短文件名。
/Y 不使用确认是否要覆盖现有目标文件的提示。
/-Y 使用确认是否要覆盖现有目标文件的提示。
/Z 用可重新启动模式复制已联网的文件。(断网重连后会继续复制)
/L 如果源是符号链接,请将链接复制到目标而不是源链接指向的实际文件。(复制链接而不改变链接指向)
关于/A 和 /B 参数说明
对于一个/ASCII文本文件,当/A开关位于命令行上的文件名列表之前,它将应用于所有名称跟在/A开关后面的文件,一直到COPY命令遇到一个/B开关,此时,/B开关将应用于名称位于它之前的文件。当/A开关跟在一个文件名后面时,它将应用于名称位于/A开关之前的文件以及名称位于/A开关后面的所有文件,直到COPY命令遇到一个/B开关,此时,/B开关将应用于名称位于它之前的文件。ASCII文本文件可以用一个文末符(CTRL+Z)来表示文件结束。在默认情况下,当合并文件时,COPY命令文件把所有处理视为ASCII文本文件。
对于一个二进制文件,当/B开关位于命令行上的文件名列表之前,它将应用于所有名称跟在/B开关后面的文件,一直到COPY文件命令遇到一个/A开关,此时,/A开关将应用于名称位于它之前的文件。当/B开关跟在一个文件名后面时,它将应用于名称位于/B开关之前的文件以及名称位于/B开关后面的所有文件,直到COPY命令遇到一个/A开关,此时,/A开关将应用于名称位于它之前的文件。/B开关指定命令编译器读取由目录中的文件大小指定字节数。/B开关是COPY命令的默认值,除非COPY命令用来合并文件。
1、复制单个文件
rem 复制当前文件夹内a.txt文件到当前目录并更名为b.txt
rem 1、可以只写文件名
copy a.txt b.txt
rem 2、也可以加上路径
copy .\a.txt .\b.txt
2、复制一个目录的文件到当前文件夹
rem 将当前目录下所有文件复制到D盘abc目录下
copy . D:\abc
3、批量复制文件
注意:这种复制不能复制abc目录中子目录中文件!!!
rem 不使用通配符批量复制文件(将D盘abc中文件复制到E盘bbb目录中)
copy D:\abc E:\bbb
通配符:多文件复制
rem 使用通配符批量复制文件(将D盘中所有.txt后缀文件复制到E盘bbb目录中)
copy D:\abc\*.txt E:\bbb
4、文件合并 将多个同类型文件合并成一个新文件
格式 : copy /b 文件1+文件2+...+文件n 目标文件名
注意:这里需要添加/b参数指示为二进制文件,不然会就复制会以ASCII模式运行,出现如2个mp3文件合并成一个时文件无法运行的问题
copy /b 数字.txt + 字母.txt 数字字母.txt
注意:合并目标文件未指定的情况下,合并的文件名取第一个文件名,同时会导致第一个文件被合并内容覆盖的情况
copy /b 数字.txt + 字母.txt
6、关闭文件覆盖确认提示 (系统默认自动开启 /-Y 模式)
copy命令注意事项
1、copy 命令必须指定源文件
2、同名拷贝允许忽略目标文件名,异名拷贝不允许忽略目标文件名
3、COPY是文件对文件的方式复制数据,复制前目标盘必须已经格式化。复制过程中,目标盘上相同文件名称的旧文件会被源文件取代。复制文件时,必须先确定目标般有足够的空间,否则会出现;insufficient的错误信息,提示磁盘空间不够。
4、源文件与目标文件之间必须用空格分隔。如:copy 源文件 目标文件
5、可以使用 copy con 目标文件 命令从键盘输入数据并保存到目标文件中(输入完毕按ctrl + z结果会自动保存到目标文件中)
将目标文件内容复制到控制台界面上 copy 目标文件 con
6、copy命令如果复制包含子目录的目录文件,会出现不复制子目录文件的情况!!!这里就需要用到xcopy命令
con 的详细解释:
con 是dos 设备文件的简称。 在dos中把很多外部设备作为文件,称为设备文件。dos中这样规定的:con 控制台(键盘/显示器) aux (或com1)第一个串口 lpt1 第一个并行打印机接口,nul 不存在的设备。
xcopy 是copy命令的拓展,解决了copy 无法复制目录和子目录文件无法复制的问题
命令格式:
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] [/J]
[/EXCLUDE:file1[+file2][+file3]...]source 指定要复制的文件。
destination 指定新文件的位置和/或名称。
/A 仅复制有存档属性集的文件,但不更改属性。
/M 仅复制有存档属性集的文件, 并关闭存档属性。
/D:m-d-y 复制在指定日期或指定日期以后更改的文件(>=指定日期)。如果没有提供日期,只复制那些源时间比目标时间新的文件。
/EXCLUDE:file1[+file2][+file3]... 指定含有字符串的文件列表。每个字符串在文件中应位于单独的一行。如果任何字符串与复制文件的绝对路径的任何部分相符,则排除复制该文件。例如,指定如 \obj\ 或 .obj 的字符串会分别排除目录 obj 下面的所有文件或带有.obj 扩展名的所有文件。
/P 创建每个目标文件之前提示你。
/S 复制目录和子目录,不包括空目录。
/E 复制目录和子目录,包括空目录。与 /S /E 相同。可以用来修改 /T。
/V 验证每个新文件的大小。
/W 提示你在复制前按键。
/C 即使有错误,也继续复制。
/I 如果目标不存在,且要复制多个文件,则假定目标必须是目录。
/Q 复制时不显示文件名。
/F 复制时显示完整的源文件名和目标文件名。
/L 显示要复制的文件。
/G 允许将加密文件复制到不支持加密的目标。
/H 也复制隐藏文件和系统文件。
/R 覆盖只读文件。
/T 创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括空目录和子目录。
/U 只复制已经存在于目标中的文件。
/K 复制属性。一般的 Xcopy 会重置只读属性。
/N 用生成的短名称复制。
/O 复制文件所有权和 ACL 信息。
/X 复制文件审核设置(隐含 /O)。
/Y 取消提示以确认要覆盖现有目标文件。
/-Y 要提示以确认要覆盖现有目标文件。
/Z 在可重新启动模式下复制网络文件。
/B 复制符号链接本身与链接目标。
/J 复制时不使用缓冲的 I/O。推荐复制大文件时使用。
1、复制D盘所有文件和子目录(包含空目录)到E盘下 /s /e (单纯盘符的复制会让目标文件系统属性改变。变成隐藏)
xcopy D:\ E:\ /s /e
或
xcopy D: E: /s /e
rem 隐藏文件重新显示
attrib 目标文件 -s -h
2、复制D盘所有文件和子目录(包含空目录、系统文件和隐藏文件)到E盘下 /s /e /h
xcopy D:\ E:\ /s /e /h
或
xcopt D: E: /s /e /h
3、复制D盘下所有修改日期在2021-01-15之后(包含1月15号)的所有文件到E盘abc目录中
xcopy /d:01-15-2021 E:\abc .\a /s /e /y
4、只更新存在于目标中的文件,就是更新目标中存在的文件(内容,修改时间等文件信息)
rem 使用E盘中的文件对a目录下的相同文件进行数据更新(a目录中没有但abc目录中有的文件不复制不更新)
xcopy E:\abc .\a /s /e /y /u
5、单纯显示当前目录需要复制的文件列表,并不执行复制操作! /L参数
xcopy E:\abc .\a /L
6、/I 参数 如果目标目录不存在则会直接自动创建,无需操作者选择目录选项再创建目录!!!
ren 全名 rename(重命名)
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.说明:
REN [盘符:][路径]待重命名文件的文件名 新文件名
请注意,你不能为目标文件指定新的驱动器或路径。
1、批量修改文件名
rem 将D盘abc目录下所有.txt后缀文件改成.abc后缀
ren D:\abc\*.txt *.abc
2、通配符通配方式精讲:
这里ren使用的通配符记住一个规律:
*后面跟的第一个字符就是需要匹配的字符,如果字符在原名中存在则匹配到最后一次出现的位置,如果字符不在原名中,则保留原名后加上*后面的内容组成新名!
以下用原名以 abcdcakafs.txt 进行讲解
1、如 *a.txt 代表从原文件名开头匹配到最后一个字符a为止(重复只取最后一个的位置),即匹配部分为:abcdcaka,新名字就是 abcdcaka.txt
2、如新名 *zmm.txt 中出现了z字符但原名没出现,则保留原名且和 * 后的字符组成新名字为 abcdcakafs.txt + zmm.txt 即 abcdcakafs.txtzmm.txt
文件删除命令有两个,一个是del(删除)一个是 erase(擦除),两个关键词运行结果都一样的,作用是删除一个或多个文件。
DEL [/P] [/F] [/S] [/Q] [/A[[:]文件属性]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] namesnames 指定一个或多个文件或者目录列表。通配符可用来删除多个文件。如果指定了一个目录,该目录中的所有文件都会被删除。
/P 删除每一个文件之前提示确认。
/F 强制删除只读文件。
/S 删除所有子目录中的指定的文件。
/Q 安静模式。删除全局通配符时,不要求确认
/A 根据属性选择要删除的文件
属性 R 只读文件 S 系统文件
H 隐藏文件 A 准备存档的文件
I 无内容索引文件 L 重新分析点
O 脱机文件 - 表示“否”的前缀注意事项:del删除文件后会直接删除掉,不会进入回收站
参数 | 说明 | 用法讲解/补充 |
/P |
删除每一个文件之前提示确认 | |
/F | 强制删除只读文件,其他文件类型无法删除,如隐藏文件不能删除 | |
/A | 删除指定属性文件,有以下属性 R 只读文件 S 系统文件 |
1、删除只读文件(默认存放在abc目录) del /a:r abc/*.* 2、删除包含只读和隐藏属性的文件 del /a:rh abc/*.* |
/Q | 安静模式直接删除,不再提示删除确认 | |
/S | 删除所有子目录中的指定的文件 |
可移动文件的同时允许重命名文件和目录,这里的操作对象为文件和目录
命令格式:
要移动至少一个文件:
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination要重命名一个目录:
MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2[drive:][path]filename1 指定你想移动的文件位置和名称。
destination 指定文件的新位置。目标可包含一个驱动器号和冒号、一个目录名或组合。如果只移动一个文件并在移动时将其重命名,你还可以包括文件名。
[drive:][path]dirname1 指定要重命名的目录。
dirname2 指定目录的新名称。/Y 取消确认覆盖一个现有目标文件的提示。
/-Y 对确认覆盖一个现有目标文件发出提示。(系统默认设置)
案例简述 | 案例说明 | 案例演示 |
移动并重命名目录 |
移动目录到特定位置并重命名目录 move aaa bbb\我的文档 |
|
移动并重命名文件 | 移动文件到特定位置并重命名文件 move aaa\a.txt bbb\b.txt |
|
移动并重命名目录名以及文件名(组合) | 移动目录到特定位置同时修改目录名和文件名。 口诀:111、222、121、212 因为move 命令操作主体对象始终是跟第一个对象保持一致,否则会出现以下情况,即 1、move 目录 新目录(操作主体:目录)详情看案例1 2、move 文件 新文件(操作主体:文件)详情看案例2 3、move 文件 新目录 (操作主体:文件) move aaa\a.txt bbb\abc 这里由于移动的是文件,操作主体是文件,系统会将新目录名当成新的文件名,就会出现下面的结果: 移动了源文件到这个位置后重命名为abc 4、move 目录 新文件 (操作主体:目录) move aaa bbb\b.txt 这里移动的是目录,操作主体是目录,系统会将新的文件名当成新目录名,就会出现下面的结果: 创建了一个a.txt的目录,其中包含a.txt文件 |
exist 是用于判断判断文件或者目录是否存在的关键字,常见于if...else...语句中
rem 判断文件是否存在
if exist C:\Users\你好打工人\Desktop\a\a.txt (
echo 文件存在!
)else (
echo 文件不存在!
)
rem 判断目录是否存在
if exist C:\Users\你好打工人\Desktop\a (
echo 目录存在!
)else (
echo 目录不存在!
)
1、显示或更改文件属性命令 attrib
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [+O | -O] [+I | -I] [+X | -X] [+P | -P] [+U | -U] [盘符:][路径][文件名] [/S [/D]] [/L]
+ 设置属性。 - 清除属性。
R 只读文件属性。 A 存档文件属性。
S 系统文件属性。 H 隐藏文件属性。
O 脱机属性。 I 无内容索引文件属性。
X 无清理文件属性。 V 完整性属性。
P 固定属性。 U 非固定属性。[drive:][path][filename]指定属性要处理的文件。参数:
/S 处理当前文件夹及其所有子文件夹中的匹配文件。
/D 也处理文件夹。
/L 处理符号链接和符号链接目标的属性
(1)查看文件属性
attrib [盘符:][路径][文件名]
rem 检查指定目录及子目录下所有文件属性
attrib a\*.* /s
(2)设置和消除属性
rem 设置c:\Page.sysc:的隐藏和系统属性。(+不可忽略,省略新版会报参数格式错误)
attrib +s +h c:\Page.sys
rem 清除c:\Page.sysc:的隐藏和系统属性。
attrib -s -h c:\Page.sys
(3)批量设置文件属性(a\*.* 这里操作主体是文件)/s
rem 给a目录及其子目录下所有文件添加隐藏和系统属性
attrib +h +s a\*.* /s
(4)批量设置目录属性(d:\abc 这里操作主体是目录) /d
rem 将目录和子目录设置为隐藏属性
rem 将d:\abc目录属性设置为隐藏
attrib +h d:\abc /d
(5) /d /s 通配符 *组合 指定目录及其子目录属性设置(d:\abc\b* 这里操作主体是目录)
rem 匹配D:\abc目录下所有以b开头的目录及其内部以b开头的子目录,设置目录属性为隐藏
attrib +h d:\abc\b* /s /d
2、显示或修改文件扩展名关联 assoc
这个命令不太常用,但可以自定义扩展名和修改扩展名关联。在某些自定义的后缀文件的场景下使用并定义(如WPS软件后缀是自定义的.wps)
ASSOC [.ext[=[fileType]]]
ASSOC [.扩展名[=[文件类型]]]
.ext 指定跟文件类型关联的文件扩展名
fileType 指定跟文件扩展名关联的文件类型
(1)查询系统内部所有定义好的扩展名信息
assoc
(2)查询某个扩展名的关联关系
assoc .ext
(3)设置自定义扩展名和关联关系(必须在管理员模式下才能设置)
rem .ext表示扩展名,filetype表示扩展名定义的关联关系
assoc .ext=filetype
(4)删除某个特定的扩展名及其关联关系(注意不要随便使用这个,不然容易导致系统报错)
assoc .ext=
关机命令shutdown常用于计算机维护中,除了可以对本机进行注销、关机、重启等设置外,也可以连接到外部计算机,对外部计算机进行关机等一系列操作。
用法: shutdown [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f]
[/m \\computer][/t xxx][/d [p|u:]xx:yy [/c "comment"]]没有参数 显示帮助。这与键入 /? 是一样的。
/? 显示帮助。这与不键入任何选项是一样的。
/i 显示图形用户界面(GUI)。这必须是第一个选项。
/l 注销。这不能与 /m 或 /d 选项一起使用。
/s 关闭计算机。
/sg 关闭计算机。在下一次启动时,如果启用了自动重启登录,则将自动登录并锁定上次交互用户。登录后,重启任何已注册的应用程序。
/r 完全关闭并重启计算机。
/g 完全关闭并重启计算机。重新启动系统后,如果启用了自动重启登录,则将自动登录并锁定上次交互用户。登录后,重启任何已注册的应用程序。
/a 中止系统关闭。这只能在超时期间使用。与 /fw 结合使用,以清除任何未完成的至固件的引导。
/p 关闭本地计算机,没有超时或警告。可以与 /d 和 /f 选项一起使用。
/h 休眠本地计算机。可以与 /f 选项一起使用。
/hybrid 执行计算机关闭并进行准备以快速启动。必须与 /s 选项一起使用。
/fw 与关闭选项结合使用,使下次启动转到固件用户界面。
/e 记录计算机意外关闭的原因。
/o 转到高级启动选项菜单并重新启动计算机。必须与 /r 选项一起使用。
/m \\computer 指定目标计算机。(一般是ip连接)
/t xxx 将关闭前的超时时间设置为 xxx 秒。有效范围是 0-315360000 (10 年),默认值为 30。如果超时时间大于 0,则默示为 /f 参数。
/c "comment" 有关重新启动或关闭的原因的注释。最多允许 512 个字符。
/f 强制关闭正在运行的应用程序而不事先警告用户。如果为 /t 参数指定大于 0 的值,则默示为 /f 参数。
/d [p|u:]xx:yy 提供重新启动或关闭的原因。
p 指示重启或关闭是计划内的。
u 指示原因是用户定义的。
如果未指定 p 也未指定 u,则重新启动或关闭
是计划外的。
xx 是主要原因编号(小于 256 的正整数)。
yy 是次要原因编号(小于 65536 的正整数)
由于参数众多以下就只讲解几个常用的(/s /r /a /f /m /l /i /h)
命令讲解 | 命令 |
---|---|
关机 | shutdown /s |
取消关机(这只能在超时期间使用) | shutdown /a |
重启 | shutdown /r |
注销 | shutdown /l |
休眠 | shutdown /h |
打开关机图形界面GUI | shutdown /i |
强行关闭应用程序 | shutdown /f |
远程控制计算机 | shutdown /m \远程计算机ip地址 |
设置关机时间,表示在1min之后强制关机 | shutdown /s /t 60 |
取消关闭计算机 | shutdown /m \计算机名 /a |
设定关闭远程计算机的时间(n秒后关闭) | shutdown /s /m \计算机ip地址 /t 时间 |
用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
[-4] [-6] target_name选项:
-t Ping 指定的主机,直到停止。若要查看统计信息并继续操作,请键入 Ctrl+Break;若要停止,请键入 Ctrl+C。
-a 将地址解析为主机名。
-n count 要发送的回显请求数。
-l size 发送缓冲区大小。
-f 在数据包中设置“不分段”标记(仅适用于 IPv4)。
-i TTL 生存时间。
-v TOS 服务类型(仅适用于 IPv4。该设置已被弃用,对 IP 标头中的服务类型字段没有任何影响)。
-r count 记录计数跃点的路由(仅适用于 IPv4)。
-s count 计数跃点的时间戳(仅适用于 IPv4)。
-j host-list 与主机列表一起使用的松散源路由(仅适用于 IPv4)。
-k host-list 与主机列表一起使用的严格源路由(仅适用于 IPv4)。
-w timeout 等待每次回复的超时时间(毫秒)。
-R 同样使用路由标头测试反向路由(仅适用于 IPv6)。根据 RFC 5095,已弃用此路由标头。如果使用此标头,某些系统可能丢弃回显请求。
-S srcaddr 要使用的源地址。
-c compartment 路由隔离舱标识符。
-p Ping Hyper-V 网络虚拟化提供程序地址。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
案例简述 | 命令 | 案例演示 |
ping 网址(测试该网站是否网络畅通) | 命令 ping 网址/ip ping www.baidu.com |
|
不断ping指定的ip知道Ctrl + C 人为停止 |
命令 ping -t ip ping -t 127.0.0.1 |
|
将地址解析成主机名(顺便查看主机名) | 命令 ping -a ip ping -a 127.0.0.1 |
|
设置ping请求次数 | 命令 ping -n count(请求次数) ip ping -n 6 127.0.0.1 |
|
设置发送缓冲区的大小
注意:持续发送过大的缓冲器可能会让服务器缓冲区溢出导致ping超时的情况出现,缓冲区溢出对服务器很危险! |
命令 ping -l size(大小要求0<=size<=65500) ip ping -l 100 127.0.0.1 |
|
设置该请求的DNS记录在DNS服务器上缓存时间(这时TTL一般会变成服务器上设置的TTL,所以该设置受限于服务器或系统设置的!)
TTL时间:表示DNS记录在DNS服务器上缓存时间,单位s,可以根据DNS服务器缓冲区大小进行合理设置
TTL还有个用提就是判断操作系统(一般用系统默认TTL) 1、WINDOWS NT/2000 TTL:128 2、WINDOWS 95/98 TTL:32 3、UNIX TTL:255 4、LINUX TTL:64 5、WIN7 TTL:64 |
命令 ping -i TTL (单位s) ip ping -i 128 127.0.0.1 |
|
记录ip请求跳转的路由(不常用)
(此功能需要路由器支持源路由功能,现在服务器为了防止如 源地址欺骗 等网络攻击都会停用,现在请使用tracert命令进行路由跟踪) |
命令 ping -r count(记录路由数,有效范围从 1 到 9) ip
|
|
设置ping请求等待超时时间 <等待每次回复的超时时间(毫秒)> |
命令 ping -w timeout(超时时间,单位ms) ip ping -w 30 www.baidu.com 等待响应时间超过30ms视为超时
这里要注意一点 |
补充: 解析出处
什么是TTL?
TTL(Time To Live,生存时间)是IP协议包中的一个值,当我们使用Ping命令进行网络连通测试或者是测试网速的时候,本地计算机会向目的主机发送数据包,但是有的数据包会因为一些特殊的原因不能正常传送到目的主机,如果没有设置TTL值的话,数据包会一直在网络上面传送,浪费网络资源。数据包在传送的时候至少会经过一个以上的路由器,当数据包经过一个路由器的时候,TTL就会自动减1,如果减到0了还是没有传送到目的主机,那么这个数据包就会自动丢失,这时路由器会发送一个ICMP报文给最初的发送者。举个例子,如果一个主机的TTL是64,那么当它经过64个路由器后还没有将数据包发送到目的主机的话,那么这个数据包就会自动丢弃。
tracert被称为Windows路由跟踪命令
用于确定 IP 数据包访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由
用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
选项:
-d 不将地址解析成主机名。
-h maximum_hops 搜索目标的最大跃点数。
-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。
-w timeout 等待每个回复的超时时间(以毫秒为单位)。
-R 跟踪往返行程路径(仅适用于 IPv6)。
-S srcaddr 要使用的源地址(仅适用于 IPv6)。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
案例简述 | 命令 | 案例演示 |
路由跟踪(默认查路由的主机名和ip) | 命令: tracert 网址/ip tracert www.baidu.com (*代表请求超时) |
|
路由跟踪(-d 不差主机名,单纯查路由ip) | 命令: tracert -d 网址/ip tracert -d www.baidu.com |
|
设置最大跟踪的路由数(-h) |
命令: tracert -h count 网址/ip 设置最多跟踪30个路由 tracert -h 30 www.baidu.com |
|
设置每个请求的超时时间(-w) | 命令: tracert -w timeout(单位ms) 网址/ip 设置路由跟踪超时时间为100ms tracert -w 100 www.baidu.com |
用法:
ipconfig [/allcompartments] [/? | /all |
/renew [adapter] | /release [adapter] |
/renew6 [adapter] | /release6 [adapter] |
/flushdns | /displaydns | /registerdns |
/showclassid adapter |
/setclassid adapter [classid] |
/showclassid6 adapter |
/setclassid6 adapter [classid] ]其中
adapter 连接名称
(允许使用通配符 * 和 ?,参见示例)选项:
/? 显示此帮助消息
/all 显示完整配置信息。
/release 释放指定适配器的 IPv4 地址。
/release6 释放指定适配器的 IPv6 地址。
/renew 更新指定适配器的 IPv4 地址。
/renew6 更新指定适配器的 IPv6 地址。
/flushdns 清除 DNS 解析程序缓存。
/registerdns 刷新所有 DHCP 租用并重新注册 DNS 名称
/displaydns 显示 DNS 解析程序缓存的内容。
/showclassid 显示适配器允许的所有 DHCP 类 ID。
/setclassid 修改 DHCP 类 ID。
/showclassid6 显示适配器允许的所有 IPv6 DHCP 类 ID。
/setclassid6 修改 IPv6 DHCP 类 ID。对于 Release 和 Renew,如果未指定适配器名称,则会释放或更新所有绑定
到 TCP/IP 的适配器的 IP 地址租用。对于 Setclassid 和 Setclassid6,如果未指定 ClassId,则会删除 ClassId
rem 显示基本配置信息
ipconfig
rem 显示详细配置信息
ipconfig /all
rem 释放本机中名为WLAN的网络适配器的ip地址
ipconfig /release WLAN
rem 释放本机所有ip地址(会断网)可以使用通配符 * ?
ipconfig /release *
rem 更新本机中名为WLAN的网络适配器的ip地址
ipconfig /renew WLAN
rem 更新本机所有ip地址(重新获取ip地址)可以使用通配符 * ?
ipconfig /renew *
rem 清除 DNS 解析程序缓存
ipconfig /flushdns
rem 显示 DNS 解析程序缓存的内容
ipconfig /displaydns
该命令可以允许计算机开启远程网络连接,允许其他计算机对本机进行访问,通过该命令也可以检查端口开放情况,但出于计算机安全考虑(端口容易被黑客利用)是不会默认开启,开启后使用完毕记得及时关闭。
需要开启telnet功能才能使用该命令! 控制面板>程序>启动或关闭windows功能>telnet打勾确定
telnet [-a][-e escape char][-f log file][-l user][-t term][host [port]]
-a 企图自动登录。除了用当前已登陆的用户名以外,与 -l 选项相同。
-e 跳过字符来进入 telnet 客户端提示。
-f 客户端登录的文件名
-l 指定远程系统上登录用的用户名。
要求远程系统支持 TELNET ENVIRON 选项。
-t 指定终端类型。
支持的终端类型仅是: vt100, vt52, ansi 和 vtnt。
host 指定要连接的远程计算机的主机名或 IP 地址。
port 指定端口号或服务名。
rem 测试百度服务器是否开启80HTTP端口
telnet www.baidu.com 80
rem 测试百度服务器是否开启223HTTP端口
telnet www.baidu.com 223
百度80端口开放,自动跳转到新窗口了
百度223端口不开放,直接报连接失败
显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]-a 通过询问当前协议数据,显示当前 ARP 项。如果指定 inet_addr,则只显示指定计算机的 IP 地址和物理地址。如果不止一个网络接口使用 ARP,则显示每个 ARP 表的项。
-g 与 -a 相同。
-v 在详细模式下显示当前 ARP 项。所有无效项和环回接口上的项都将显示。
inet_addr 指定 Internet 地址。
-N if_addr 显示 if_addr 指定的网络接口的 ARP 项。
-d 删除 inet_addr 指定的主机。inet_addr 可以是通配符 *,以删除所有主机。
-s 添加主机并且将 Internet 地址 inet_addr与物理地址 eth_addr 相关联。物理地址是用连字符分隔的 6 个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口的 Internet 地址。如果不存在,则使用第一个适用的接口。
示例:
> arp -s 157.55.85.212 00-aa-00-62-c6-09.... 添加静态项。
> arp -a .... 显示 ARP 表。
查询系统所有地址解析信息
arp -a
显示协议统计信息和当前 TCP/IP 网络连接。
NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]
-a 显示所有连接和侦听端口。
-b 显示在创建每个连接或侦听端口时涉及的
可执行程序。在某些情况下,已知可执行程序承载
多个独立的组件,这些情况下,
显示创建连接或侦听端口时
涉及的组件序列。在此情况下,可执行程序的
名称位于底部 [] 中,它调用的组件位于顶部,
直至达到 TCP/IP。注意,此选项
可能很耗时,并且在你没有足够
权限时可能失败。
-e 显示以太网统计信息。此选项可以与 -s 选项
结合使用。
-f 显示外部地址的完全限定
域名(FQDN)。
-n 以数字形式显示地址和端口号。
-o 显示拥有的与每个连接关联的进程 ID。
-p proto 显示 proto 指定的协议的连接;proto(全名protocol 协议)
可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s
选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-q 显示所有连接、侦听端口和绑定的
非侦听 TCP 端口。绑定的非侦听端口
不一定与活动连接相关联。
-r 显示路由表。
-s 显示每个协议的统计信息。默认情况下,
显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;
-p 选项可用于指定默认的子网。
-t 显示当前连接卸载状态。
-x 显示 NetworkDirect 连接、侦听器和共享
终结点。
-y 显示所有连接的 TCP 连接模板。
无法与其他选项结合使用。
interval 重新显示选定的统计信息,各个显示间暂停的
间隔秒数。按 CTRL+C 停止重新显示
统计信息。如果省略,则 netstat 将打印当前的
配置信息一次。
案例简述 | 命令 | 案例演示 |
显示所有连接和侦听端口(文字模式)-a | netstat -a | |
显示所有连接和侦听端口(数字模式)-an | netstat -a -n 或 netstat -an |
|
显示所有连接和侦听端口以及相关的进程号 -ano/-ao 该选项在-a或-an模式下添加进程号的列 |
netstat -a -n -o 或 netstat -ano |
|
显示在创建每个连接或侦听端口时涉及的可执行程序 (必须在管理员模式下运行,否则会提示权限不够!) |
netstat -b | 以下在任务管理器中查看是否存在该TCP连接 |
显示以太网统计信息,例如发送和接收的字节数和数据包数 | netstat -e | |
显示外部地址的完全限定域名(FQDN)
完全限定域名,是指主机名 加上 全路径,全路径中列出了序列中所有的域成员。FQDN包含两部分:主机名和域名 |
netstat -f | |
显示 proto 指定的协议的连接(-p proto,也可与-s组合使用) | netstat -p proto(可选TCP、UDP、TCPv6 或 UDPv6) 与-s 可以组合同时显示某个协议的统计信息
netstat -s -p proto(此时可选IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6) |
显示UDP协议连接情况 显示TDP连接情况同时查看TCP统计信息 |
显示所有连接、侦听端口和绑定的非侦听 TCP 端口(-q 主要是为了查看绑定的非侦听TCP端口) | netstat -q 或 netstat -anoq |
|
显示路由表 -r |
netstat -r | |
显示当前连接卸载状态 -t | netstat -t
|
|
显示所有连接的 TCP 连接模板。无法与其他选项结合使用 -y | netstat -y | |
同时显示以太网统计信息和所有协议的统计信息 | netstat -e -s | |
要每 5 秒显示一次活动 TCP 连接和进程 ID | netstat -o 5 |
补充:TCP连接的几种状态
LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求(客户端)
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(服务器)
ESTABLISHED:代表一个打开的连接 (表示连接已建立)
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态
BOUND:绑定的连接状态
TASKLIST [/S system [/U username [/P [password]]]]
[/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]描述:
该工具显示在本地或远程机器上当前运行的进程列表。
参数列表:
/S system 指定连接到的远程系统。/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果省略,则提示输入。
/M [模块名] 列出当前使用所给 exe/dll 名称的所有任务。如果没有指定模块名称,显示所有加载的模块。(如user32.dll就是模块名)
/SVC 显示每个进程中主持的服务。
/APPS 显示 Microsoft Store 应用及其关联的进程。
/V 显示详细任务信息。
/FI filter 显示一系列符合筛选器指定条件的任务。
/FO format 指定输出格式。有效值: "TABLE"、"LIST"、"CSV"。
/NH 指定列标题不应该在输出中显示。只对 "TABLE" 和 "CSV" 格式有效。
/? 显示此帮助消息。
筛选器:
筛选器名称 有效运算符 有效值 STATUS eq, ne RUNNING | SUSPENDED | NOT RESPONDING | UNKNOWN IMAGENAME eq, ne 映像名称 PID
eq, ne, gt, lt, ge, le PID 值 SESSION eq, ne, gt, lt, ge, le 会话编号 SESSIONNAME eq, ne 会话名称 CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为 hh:mm:ss
hh - 小时,mm - 分钟,ss - 秒MEMUSAGE eq, ne, gt, lt, ge, le 内存使用(以 KB 为单位) USERNAME eq, ne 用户名,格式为 [域\]用户 SERVICES eq, ne 服务名称 WINDOWTITLE eq, ne 窗口标题 MODULES eq, ne DLL 名称(模块名) 注意: 当查询远程计算机时,不支持 "WINDOWTITLE" 和 "STATUS"筛选器。
例如:
TASKLIST
TASKLIST /M
TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /APPS /FI "STATUS eq RUNNING"
TASKLIST /M wbem*
TASKLIST /S system /FO LIST
TASKLIST /S system /U 域\用户名 /FO CSV /NH
TASKLIST /S system /U username /P password /FO TABLE /NH 查看远程计算机进程列表,结果以表格形式输出
TASKLIST /FI "USERNAME ne NT AUTHORITY\SYSTEM" /FI "STATUS eq running"
案例简述 | 命令 | 案例演示 |
显示本地进程列表 | 命令 tasklist 包含进程名、PID、会话名、会话、内存使用 |
|
显示详细进程列表 -V(注意是大写) | 命令 tasklist -V 包含进程名、PID、会话名、会话、内存使用、CPU时间、窗口标题、状态、用户名(加粗为新增状态信息) |
|
显示调用指定模块的所有任务 | 命令 tasklist /m model(模块名,如user32.dll) 显示所有任务调用的所有模块信息(分组列出): tasklist /m 显示所有调用user32.dll模块的任务: tasklist /m user32.dll |
|
显示每个进程中主持的服务 | 命令 tasklist /SVC | |
显示 Microsoft Store 应用及其关联的进程 | 命令 tasklist /APPS | |
选择输出格式 /FO | 命令 tasklist /FO format(格式可选: TABLE、LIST、CSV;系统默认TABLE格式输出) |
TABLE表单格式 LIST列表格式 CSV逗号分隔值格式 |
输出不显示列标题 /NH 只对 "TABLE" 和 "CSV" 格式有效 |
命令 tasklist /NH (常与/FO组合使用) task /FO table /NH |
带标题 去除标题 |
显示指定筛选器结果 /FI 筛选器 | 命令 tasklist /FI filter(筛选器) |
显示占用占用内存大于300Mb的进程 |
补充1:DDL是什么?
DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。但是当安装的程序越来越多, DLL文件也就会越来越多, 如果当你删除程序的时候, 没有用的DLL文件没有被删除的话, 久而久之就造成系统的负担了。DLL文件和EXE文件同样可以由编译语言生成,但是DLL没有程序启动入口,所以DLL文件不可执行
补充2:CSV格式是什么?
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
TASKKILL [/S system [/U username [/P [password]]]]
{ [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]描述:
使用该工具按照进程 ID (PID) 或映像名称终止任务。参数列表:
/S system 指定要连接的远程系统。/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示输入。
/FI filter 应用筛选器以选择一组任务。允许使用 "*"。例如,映像名称 eq acme*(tasklist命令的不能用反)
/PID processid 指定要终止的进程的 PID。使用 TaskList 取得 PID。
/IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来指定所有任务或映像名称。
/T 终止指定的进程和由它启用的子进程。
/F 指定强制终止进程。
/? 显示帮助消息。
筛选器:
筛选器名称 有效运算符 有效值 STATUS eq, ne RUNNING | SUSPENDED | NOT RESPONDING | UNKNOWN IMAGENAME eq, ne 映像名称 PID
eq, ne, gt, lt, ge, le PID 值 SESSION eq, ne, gt, lt, ge, le 会话编号 CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为 hh:mm:ss
hh - 小时,mm - 分钟,ss - 秒MEMUSAGE eq, ne, gt, lt, ge, le 内存使用(以 KB 为单位) USERNAME eq, ne 用户名,格式为 [域\]用户 SERVICES eq, ne 服务名称 WINDOWTITLE eq, ne 窗口标题 MODULES eq, ne DLL 名称(模块名) 说明
----
1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
2) 远程进程总是要强行 (/F) 终止。
3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。例如:
TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S system /U 域\用户名 /FI "用户名 ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
案例简述 | 命令 | 案例演示 |
直接通过PID中止进程(/PID)单个中止 | 命令 taskkill /PID processid(进程id) |
|
直接通过PID中止进程(/PID)多个中止 | 命令 taskkill /PID processid1 /PID processid2 /PID ... | TASKKILL /PID 1230 /PID 1241 /PID 1253 |
中止远程计算机上的进程 | 命令 taskkill /S system /U username /P password /FI filter /F(强制关闭远程计算机中的特定进程) |
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*" 中止远程计算机上的映像名称以note开头的所有进程 |
通过映像名中止进程(/IM) | 命令 taskkill /IM imagename(映像名) 中止 taskkill /IM notepad.exe |
|
中止进程及其子进程(/T) | taskkill /T | 中止cmd程序及其子进程 TASKKILL /F /IM cmd.exe /T
|
强制中止进程(/F) | taskkill /F |
SCHTASKS /parameter [arguments]
描述:
允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务。参数列表:
/Create 创建新计划任务。/Delete 删除计划任务。
/Query 显示所有计划任务。
/Change 更改计划任务属性。
/Run 按需运行计划任务。
/End 中止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标识符。
/? 显示此帮助消息。
例子:
SCHTASKS 查询系统当前所有计划任务
SCHTASKS /?
SCHTASKS /Run /?
SCHTASKS /End /?
SCHTASKS /Create /?
SCHTASKS /Delete /?
SCHTASKS /Query /?
SCHTASKS /Change /?
SCHTASKS /ShowSid /?
SCHTASKS /Create [/S system [/U username [/P [password]]]]
[/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
[/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
[/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F] [/HRESULT] [/?]描述:
允许管理员在本地或远程系统上创建计划任务。参数列表:
/S system 指定要连接到的远程系统。如果省略这个系统参数,默认是本地系统。/U username 指定应在其中执行 SchTasks.exe 的用户上下文。
/P [password] 指定给定用户上下文的密码。如果省略则提示输入。
/RU username 指定任务在其下运行的“运行方式”用户
帐户(用户上下文)。对于系统帐户,有效
值是 ""、"NT AUTHORITY\SYSTEM" 或
"SYSTEM"。
对于 v2 任务,"NT AUTHORITY\LOCALSERVICE"和
"NT AUTHORITY\NETWORKSERVICE"以及常见的 SID
对这三个也都可用。/RP [password] 指定“运行方式”用户的密码。要提示输入密码,值必须是 "*" 或无。系统帐户会忽略该密码。必须和 /RU 或 /XML 开关一起使用。
/RU/XML /SC schedule 指定计划频率。
有效计划任务: MINUTE、 HOURLY、DAILY、WEEKLY、
MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT./MO modifier 改进计划类型以允许更好地控制计划重复
周期。有效值列于下面“修改者”部分中。/D days 指定该周内运行任务的日期。有效值:
MON、TUE、WED、THU、FRI、SAT、SUN
和对 MONTHLY 计划的 1 - 31
(某月中的日期)。通配符“*”指定所有日期。/M months 指定一年内的某月。默认是该月的第一天。
有效值: JAN、FEB、MAR、APR、MAY、JUN、
JUL、 AUG、SEP、OCT、NOV 和 DEC。通配符
“*” 指定所有的月。/I idletime 指定运行一个已计划的 ONIDLE 任务之前
要等待的空闲时间。
有效值范围: 1 到 999 分钟。/TN taskname 以路径\名称形式指定
对此计划任务进行唯一标识的字符串。/TR taskrun 指定在这个计划时间运行的程序的路径
和文件名。
例如: C:\windows\system32\calc.exe/ST starttime 指定运行任务的开始时间。
时间格式为 HH:mm (24 小时时间),例如 14:30 表示
2:30 PM。如果未指定 /ST,则默认值为
当前时间。/SC ONCE 必需有此选项。/RI interval 用分钟指定重复间隔。这不适用于
计划类型: MINUTE、HOURLY、
ONSTART, ONLOGON, ONIDLE, ONEVENT.
有效范围: 1 - 599940 分钟。
如果已指定 /ET 或 /DU,则其默认值为
10 分钟。/ET endtime 指定运行任务的结束时间。
时间格式为 HH:mm (24 小时时间),例如,14:50 表示 2:50 PM。
这不适用于计划类型: ONSTART、
ONLOGON, ONIDLE, ONEVENT./DU duration 指定运行任务的持续时间。
时间格式为 HH:mm。这不适用于 /ET 和
计划类型: ONSTART, ONLOGON, ONIDLE, ONEVENT.
对于 /V1 任务,如果已指定 /RI,则持续时间默认值为
1 小时。/K 在结束时间或持续时间终止任务。
这不适用于计划类型: ONSTART、
ONLOGON, ONIDLE, ONEVENT.
必须指定 /ET 或 /DU。/SD startdate 指定运行任务的第一个日期。
格式为 yyyy/mm/dd。默认值为
当前日期。这不适用于计划类型: ONCE、
ONSTART, ONLOGON, ONIDLE, ONEVENT./ED enddate 指定此任务运行的最后一天的日期。
格式是 yyyy/mm/dd。这不适用于计划类型:
ONCE、ONSTART、ONLOGON、ONIDLE。/EC ChannelName 为 OnEvent 触发器指定事件通道。
/IT 仅有在 /RU 用户当前已登录且
作业正在运行时才可以交互式运行任务。
此任务只有在用户已登录的情况下才运行。/NP 不储存任何密码。任务以给定用户的身份
非交互的方式运行。只有本地资源可用。/Z 标记在最终运行完任务后删除任务。
/XML xmlfile 从文件的指定任务 XML 中创建任务。
可以组合使用 /RU 和 /RP 开关,或者在任务 XML 已包含
主体时单独使用 /RP。/V1 创建 Vista 以前的平台可以看见的任务。
不兼容 /XML。/F 如果指定的任务已经存在,则强制创建
任务并抑制警告。/RL level 为作业设置运行级别。有效值为
LIMITED 和 HIGHEST。默认值为 LIMITED。/DELAY delaytime 指定触发触发器后延迟任务运行的
等待时间。时间格式为
mmmm:ss。此选项仅对计划类型
ONSTART, ONLOGON, ONEVENT./HRESULT 为获得更出色的故障诊断能力,处理退出代码
将采用 HRESULT 格式。/? 显示此帮助消息。
修改者: 按计划类型的 /MO 开关的有效值:
MINUTE: 1 到 1439 分钟。
HOURLY: 1 - 23 小时。
DAILY: 1 到 365 天。
WEEKLY: 1 到 52 周。
ONCE: 无修改者。
ONSTART: 无修改者。
ONLOGON: 无修改者。
ONIDLE: 无修改者。
MONTHLY: 1 到 12,或
FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。ONEVENT: XPath 事件查询字符串。
示例:
==> 在远程机器 "ABC" 上创建计划任务 "doc",
该机器每小时在 "runasuser" 用户下运行 notepad.exe。SCHTASKS /Create /S ABC /U user /P password /RU runasuser
/RP runaspassword /SC HOURLY /TN doc /TR notepad==> 在远程机器 "ABC" 上创建计划任务 "accountant",
在指定的开始日期和结束日期之间的开始时间和结束时间内,
每隔五分钟运行 calc.exe。SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
/MO 5 /TN accountant /TR calc.exe /ST 12:00 /ET 14:00
/SD 06/06/2006 /ED 06/06/2006 /RU runasuser /RP userpassword==> 创建计划任务 "gametime",在每月的第一个星期天
运行“空当接龙”。SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime
/TR c:\windows\system32\freecell==> 在远程机器 "ABC" 创建计划任务 "report",
每个星期运行 notepad.exe。SCHTASKS /Create /S ABC /U user /P password /RU runasuser
/RP runaspassword /SC WEEKLY /TN report /TR notepad.exe==> 在远程机器 "ABC" 创建计划任务 "logtracker",
每隔五分钟从指定的开始时间到无结束时间,
运行 notepad.exe。将提示输入 /RP
密码。SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
/MO 5 /TN logtracker
/TR c:\windows\system32\notepad.exe /ST 18:30
/RU runasuser /RP==> 创建计划任务 "gaming",每天从 12:00 点开始到
14:00 点自动结束,运行 freecell.exe。SCHTASKS /Create /SC DAILY /TN gaming /TR c:\freecell /ST 12:00
/ET 14:00 /K
==> 创建计划任务“EventLog”以开始运行 wevtvwr.msc
只要在“系统”通道中发布事件 101SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT
/EC System /MO *[System/EventID=101]
==> 文件路径中可以加入空格,但需要加上两组引号,
一组引号用于 CMD.EXE,另一组用于 SchTasks.exe。用于 CMD
的外部引号必须是一对双引号;内部引号可以是一对单引号或
一对转义双引号:
SCHTASKS /Create
/tr "'c:\program files\internet explorer\iexplorer.exe'
\"c:\log data\today.xml\"" ...
SCHTASKS /Run [/S system [/U username [/P [password]]]] [/I]
/TN taskname [/HRESULT] [/?]描述:
按需运行计划任务。参数列表:
/S system 指定要连接到的远程系统。/U username 指定应在其中执行 schtasks.exe 的用户上下文。
/P [password] 为给定的用户上下文指定密码,如果省略则提示输入。
/I 忽略任何限制立即运行任务。
/TN taskname 指定要立即运行的任务的路径\名称。
/HRESULT 为获得更出色的故障诊断能力,处理退出代码将采用 HRESULT 格式。
/? 显示此帮助消息。
示例:
SCHTASKS /Run /?
SCHTASKS /Run /TN "\备份\启动备份"
SCHTASKS /Run /S system /U user /P password /I /TN "\备份\备份和还原"
SCHTASKS /End [/S system [/U username [/P [password]]]]
/TN taskname [/HRESULT] [/?]描述:
停止正在运行的计划任务。参数列表:
/S system 指定要连接到的远程系统。/U username 指定应在其中执行schtasks.exe 的用户上下文。
/P [password] 为给定的用户上下文指定密码。如果已忽略,将提示输入密码。
/TN taskname 指定要终止的任务的路径\名称。
/HRESULT 为获得更出色的故障诊断能力,处理退出代码将采用 HRESULT 格式。
/? 显示此帮助消息。
示例:
SCHTASKS /End /?
SCHTASKS /End /TN "\备份\启动备份"
SCHTASKS /End /S system /U user /P password /TN "\备份\备份和还原"
SCHTASKS /Delete [/S system [/U username [/P [password]]]]
/TN taskname [/F] [/HRESULT] [/?]描述:
删除一个或多个计划任务。参数列表:
/S system 指定要连接到的远程系统。/U username 指定 schtasks.exe 要执行的用户上下文。
/P [password] 指定给定用户上下文密码。如果省略则提示输入。
/TN taskname 指定要删除的任务的路径\名称。可以使用通配符 "*" 来删除所有任务。
/F 强制删除该任务,而且如果指定的任务当前正在运行,则抑制警告。
/HRESULT 为获得更好的故障诊断能力,处理退出代码将采用 HRESULT 格式。
/? 显示此帮助消息。
示例:
SCHTASKS /Delete /TN * /F
SCHTASKS /Delete /TN "\备份\备份和还原"
SCHTASKS /Delete /S system /U user /P password /TN "\备份\启动还原"
SCHTASKS /Delete /S system /U user /P password /TN "\备份\启动备份" /F
SCHTASKS /Query [/S system [/U username [/P [password]]]]
[/FO format | /XML [xml_type]] [/NH] [/V]
[/TN taskname] [/HRESULT] [/?]描述:
允许管理员显示本地或远程系统上的计划任务。参数列表:
/S system 指定要连接到的远程系统。/U username 指定 schtasks.exe 要执行的用户上下文。
/P [password] 指定给定的用户上下文密码。如果省略则提示输入。
/FO format 为输出指定格式。有效值: TABLE、LIST、CSV。
/NH 指定在输出中不显示列标题。只对 TABLE 格式有效。仅适用于 TABLE 和 CSV 格式。
/V 显示详细任务输出。
/TN taskname 指定要检索其信息的任务路径\名称,否则会检索所有任务的信息。
/XML [xml_type] 以 XML 格式显示任务定义。
如果 xml_type 为 ONE,则输出为一个有效 XML 文件。
如果 xml_type 不存在,则输出将为
所有 XML 任务定义的串联。
/HRESULT 为获得更出色的故障诊断能力,处理退出代码将采用 HRESULT 格式。
/? 显示此帮助消息。
示例:
SCHTASKS /Query
SCHTASKS /Query /?
SCHTASKS /Query /S system /U user /P password
SCHTASKS /Query /FO LIST /V /S system /U user /P password
SCHTASKS /Query /FO TABLE /NH /V
SCHTASKS /Change [/S system [/U username [/P [password]]]] /TN taskname
{ [/RU runasuser] [/RP runaspassword] [/TR taskrun] [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] ]
[/SD startdate] [/ED enddate] [/ENABLE | /DISABLE] [/IT] [/Z] }
[/HRESULT] [/?]描述:
更改要运行的程序,或计划任务使用的用户帐户和密码。
参数列表:
/S system 指定要连接的远程系统。/U username 指定应在其中执行 schtasks.exe的用户上下文。
/P [password] 指定给定用户上下文的密码。如果省略则提示输入。
/TN taskname 指定要更改的任务的路径\名称。
/RU username 更改必须在其中执行计划任务的
用户名(用户上下文)。对于系统帐户,
有效值为 ""、"NT AUTHORITY\SYSTEM" 或 "SYSTEM"。
对于 v2 任务,"NT AUTHORITY\LOCALSERVICE"和
"NT AUTHORITY\NETWORKSERVICE"以及常见的 SID
对这三个也都可用。
/RP password 为现有用户上下文指定新密码或为新用户帐户指定密码。对系统帐户忽略此密码。/TR taskrun 指定计划任务将运行的新程序。
/ST starttime 指定运行任务的开始时间。时间格式为 HH:mm (24 小时时间),例如 14:30表示 2:30 PM。
/RI interval 用分钟指定重复间隔。有效范围: 1 - 599940 分钟。
/ET endtime 指定运行任务的结束时间。时间格式为 HH:mm (24 小时时间),例如 14:50表示 2:50 PM。
/DU duration 指定运行任务的持续时间。 时间格式为 HH:mm。这不适用于 /ET。
/K 在结束时间或持续时间终止任务。
/SD startdate 指定运行任务的第一个日期。格式为 yyyy/mm/dd。
/ED enddate 指定任务应该运行的最后一个日期。格式为 yyyy/mm/dd。
/IT 仅有在 /RU 用户当前已登录且
作业正在运行时才可以交互式运行任务。
此任务只有在用户已登录的情况下才运行。/RL level 设置作业的运行级别。有效值为
LIMITED 和 HIGHEST。默认情况下是不对其进行更改。/ENABLE 启用计划任务。
/DISABLE 禁用计划任务。
/Z 标记在最终运行完任务后删除任务。
/DELAY delaytime 指定触发触发器后延迟任务运行的
等待时间。时间格式为
mmmm:ss。此选项仅对计划类型
ONSTART、ONLOGON 和 ONEVENT 有效。/HRESULT 为获得更出色的故障诊断能力,处理退出代码将采用 HRESULT 格式。
/? 显示此帮助消息。
示例:
SCHTASKS /Change /RP password /TN "\备份\备份和还原"
SCHTASKS /Change /TR restore.exe /TN "\备份\启动还原"
SCHTASKS /Change /S system /U user /P password /RU newuser
/TN "\备份\启动备份" /IT
SCHTASKS /ShowSid /TN taskname [/HRESULT] [/?]
描述:
向任务的专用用户显示 SID。参数列表:
/TN taskname 指定计划任务的路径\名称。/HRESULT 为获得更出色的故障诊断能力,处理退出代码将采用 HRESULT 格式。
/? 显示此帮助消息。
示例:
SCHTASKS /ShowSid /?
SCHTASKS /ShowSid /TN "\备份\启动备份"
SFC [/SCANNOW] [/VERIFYONLY] [/SCANFILE=<file>] [/VERIFYFILE=<file>]
[/OFFWINDIR=<offline windows directory> /OFFBOOTDIR=<offline boot directory> [/OFFLOGFILE=<log file path>]]/SCANNOW 扫描所有保护的系统文件的完整性,并尽可能修复有问题的文件。
/VERIFYONLY 扫描所有保护的系统文件的完整性。不会执行修复操作。
/SCANFILE 扫描引用的文件的完整性,如果找到问题,则修复文件。指定完整路径 <file>
/VERIFYFILE 验证带有完整路径 <file> 的文件的完整性。不会执行修复操作。
/OFFBOOTDIR 对于脱机修复,指定脱机启动目录的位置
/OFFWINDIR 对于脱机修复,指定脱机 Windows 目录的位置
/OFFLOGFILE 对于脱机修复,通过指定日志文件路径选择性地启用记录示例:
sfc /SCANNOW
sfc /VERIFYFILE=c:\windows\system32\kernel32.dll
sfc /SCANFILE=d:\windows\system32\kernel32.dll /OFFBOOTDIR=d:\ /OFFWINDIR=d:\windows
sfc /SCANFILE=d:\windows\system32\kernel32.dll /OFFBOOTDIR=d:\ /OFFWINDIR=d:\windows /OFFLOGFILE=c:\log.txt
sfc /VERIFYONLY
将 FAT 卷转换为 NTFS。
CONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]
volume 指定驱动器号(后面跟一个冒号)、装入点或卷名。
/FS:NTFS 指定要将此卷转换为 NTFS。
/V 指定将在详细模式下运行 Convert。
/CvtArea:filename 指定根目录中的一个连续文件,该文件将是 NTFS 系统文件的占位符。
/NoSecurity 指定所有用户均可以访问转换文件和目录的安全设置。
/X 如果必要,请先强制卸除卷。该卷的所有打开句柄将会无效。
创建、更改或删除磁盘的卷标。
LABEL [drive:][label]
LABEL [/MP] [volume] [label]drive: 指定驱动器号。
label 指定卷标。
/MP 指定卷应被视为装入点或卷名。
volume 指定驱动器号(后面跟一个冒号)、装入点或卷名。
如果指定了卷名,/MP 标志则不必要。
案例简述 | 命令 | 案例演示 |
更改、设置、创建磁盘的卷标(说白了就是磁盘名) | 命令 label 驱动器 卷标名 |
设置d盘卷标为我的分区 |
删除磁盘卷标 | 命令 label 驱动器 |
ver 命令在cmd 窗口显示
winver 命令通过弹窗显示windows版本
NET 命令的选项有,详情文章可以参考以下两篇配合阅读
NET
[ ACCOUNTS | COMPUTER | CONFIG | CONTINUE | FILE | GROUP | HELP |
HELPMSG | LOCALGROUP | PAUSE | SESSION | SHARE | START |
STATISTICS | STOP | TIME | USE | USER | VIEW ]
net view
显示域列表、计算机列表或指定计算机的共享资源列表
语法:NET VIEW
[\\computername [/CACHE] | [/ALL] | /DOMAIN[:domainname]]参数说明:
/CACHE 缓存
/ALL 显示所有共享资源列表
\\computername 计算机名
/DOMAIN 域参数
domainname 域名,区别于网站的域名
1、查看当前域内计算机信息
net view
2、查看指定的共享资源计算机
net view \\computername(\\+计算机名)
3、查看指定域内的共享资源计算机
net view /domain:domainname(/domain:+域名)
如
net view /domain:LOVE查看LOVE域中的机器列表
net user
或
net users
添加或更改用户帐号或显示用户帐号信息
NET USER
[username [password | *] [options]] [/DOMAIN]
username {password | *} /ADD [options] [/DOMAIN]
username [/DELETE] [/DOMAIN]
username [/TIMES:{times | ALL}]
username [/ACTIVE: {YES | NO}]参数说明:
username 用户名
password 密码
/DOMAIN 域
/ADD 添加用户
/DELETE 删除用户
/TIMES 限制用户登陆电脑的时间
若电脑使用12小时制输入 net user A B /times:monday-friday,8AM-10PM;saturday-sunday,7PM-9PM 若电脑使用24小时制输入 net user A B /times:M-F,8:00-22:00;Sa-Su,19:00-21:00 命令注解:
1,Time的增加值限制为1小时。
2,对于Day值,可以用全称或缩写(即 M、T、W、Th、F、Sa、Su)。
3,可以使用12小时或24小时时间表示法。对于12小时表示法,请使用AM、PM或A.M.、P.M.。All值表示用户始终可以登录;空值(空白)意味着用户永远不能登录。
4,用逗号分隔日期和时间,用分号分隔日期和时间单元(例如,M,4AM-5PM;T,1PM-3PM)。指定时间时不要使用空格。/ACTIVE: {YES | NO} 用户状态 /ACTIVE:YES 用户启用 /ACTIVE:NO 用户禁用
1、显示当前计算机的用户账号列表
net user
2、设置新用户(用户名test密码123)
net user test 123 /add
3、删除特定用户(删除test用户)
net user test /delete
4、设置用户状态(启用YES,禁止NO)
net user test /active:yes
5、设置用户限制登陆时间24小时制
(设置test用户登陆时间为周一到周五8:00-22:00,周末19:00-21:00)
net user test /times:M-F,8:00-22:00;Sa-Su,19:00-21:00
net start [service]
1、显示已启动的服务
net start
2、启动特定服务(有空格记得使用"")
net start "Windows 安全中心服务"
net pause [service]
1、暂停、挂起服务
net pause workstation
net continue [service]
1、继续已暂停或挂起的计算机服务、
net continue workstation
net stop [service]
服务 | 说明 |
---|---|
alerter | 警报 |
client service for netware | Netware 客户端服务 |
clipbook server | 剪贴簿服务器 |
computer browser | 计算机浏览器 |
directory replicator | 目录复制器 |
ftp publishing service (ftp) | ftp 发行服务 |
lpdsvc | |
messenger |
信使 |
net logon | 网络登录 |
network dde | 网络 dde |
network dde dsdm |
网络 dde dsdm |
network monitor agent | 网络监控代理 |
nt lm security support provider |
NT LM 安全性支持提供 |
ole | 对象链接与嵌入 |
remote access connection manager |
远程访问连接管理器 |
remote access isnsap service | 远程访问 isnsap 服务 |
remote access server |
远程访问服务器 |
remote procedure call (rpc) locator | 远程过程调用定位器 |
remote procedure call (rpc) service |
远程过程调用服务 |
schedule | 调度 |
server | 服务器 |
simple tcp/ip services |
简单 TCP/IP 服务 |
snmp | |
spooler | 后台打印程序 |
tcp/ip netbios helper |
TCP/IP NETBIOS 辅助工具 |
ups | |
workstation | 工作站 |
DATE [/t] [<year-month-day>]
/t 不再提示输入新日期,直接显示当前日期
<year-month-day> 设置指定的日期,其中 month 是月份 (一位或两位数字,其中包括值1到 12) , day 是 (一位或两位数字的日期,包括值1到 31) , 年份 是 (两个或四个数字的年份,其中包括值00到99或1980到 2099) 。
必须将年、月和日的值分别用句点 (. ) 、连字符 (-) 或斜线标记 (/) 分隔开。以下三种格式都可以
2021.02.01
2021-02-01
2021/02/01注意: 请注意,如果使用2位数表示年份,则值80-99 对应于1980到1999。
补充:我的win10系统日期格式是年月日这种形式。并不是官方文档的那个月日年,不太清楚是否是新版本支持年月日格式,请自行查看自己系统的是使用哪个格式
1、显示当前日期(会出现输入新日期的提示)
date
2、不提示输入新日期直接输出当前日期
date /t
3、设置新日期
date 2021-02-01
或
date 2021.02.01
或
date 2021/02/01
或者date后回车输入
TIME [/t] [<HH>[:<MM>[:<SS>]] [am|pm]]]
/t 不再提示输入新时间,直接显示当前时间
将系统时间设置为指定的新时间,其中, HH 以小时为单位 (必需) , MM 为分钟, SS 以秒为单位。 NN 可用于指定百分之几秒。 必须用冒号分隔 HH、 MM和 SS 的值 (: ) 。 SS 和 NN (毫秒)必须用句点 ( 分隔。 ) 。
如果未指定 am 或 pm ,则默认情况下, time 使用24小时格式。
1、显示当前时间(提示输入新时间)
time
2、显示当前时间(不提示输入新时间)
time /t
3、修改时间
time 21:10:03
补充:时间修改后如何重新同步时间服务器的北京时间
C:\Users\Administrator>net start w32time
Windows Time 服务正在启动 .
Windows Time 服务已经启动成功。
C:\Users\Administrator>w32tm /resync
#同步时间,resync(重新同步)
将 resync 命令发送到本地计算机
此计算机没有重新同步,因为没有可用的时间数据。
C:\Users\Administrator>net stop w32time
#关停服务
1、mode 改变窗口大小(model)
配置系统设备。
串行端口: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
[to=on|off] [xon=on|off] [odsr=on|off]
[octs=on|off] [dtr=on|off|hs]
[rts=on|off|hs|tg] [idsr=on|off]设备状态: MODE [device] [/STATUS]
打印重定向: MODE LPTn[:]=COMm[:]
选择代码页: MODE CON[:] CP SELECT=yyy
代码页状态: MODE CON[:] CP [/STATUS]
显示模式: MODE CON[:] [COLS=c] [LINES=n]
击键率: MODE CON[:] [RATE=r DELAY=d]
1、mode con,这样就能看出来当前CMD窗口的行和列的一些设置
2、设置cmd窗口大小
右键cmd窗口查看属性,发现CON状态的行列与屏幕缓冲区大小一致
mode con cols=100 lines=30 设置列数100,行数30
2、 color 改变窗口中字体颜色
COLOR [attr]
attr 指定控制台输出的颜色属性。
颜色属性由两个十六进制数字指定 -- 第一个对应于背景,第二个对应于前景。每个数字可以为以下任何值:
0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色注意:十六进制数字不区分大小写,且设置仅限于当前窗口生效,重启cmd会重置
设置背景色为黑色,前景色(字体颜色)为浅绿色
color OA
3、title 改变窗口标题内容
TITLE [string]
string 指定命令提示窗口的标题。
title 我的程序
MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename
command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]
[drive:][path]filename 指定要逐屏显示的文件。
command-name 指定要显示其输出的命令。
常用命令用红色标注!
/E 启用扩展功能
/C 显示页面前先清除屏幕(先清屏再显示)
/P 扩展 FormFeed 字符
/S 将多个空白行缩成一行
/Tn 将制表符扩展为 n 个空格(默认值为 8)开关可以出现在 MORE 环境变量中。
+n 从第 n 行开始显示第一个文件files 要显示的文件列表。使用空格分隔列表中的文件。
如果已启用扩展功能,则在 -- More -- 提示处 接受下列命令(键盘输入的扩展功能):
P n 显示下 n 行(先按P键再根据提示输入行数n)
S n 跳过下 n 行(先按S键再根据提示输入行数n)
F 显示下个文件 (按F键显示下一个文件)
Q 退出 (按Q键退出)
= 显示行号 (按=键显示行号)
? 显示帮助行
<space> 显示下一页(逐页显示)
<enter> 显示下一行(逐行显示)
案例简述 | 命令 | 案例演示 |
逐屏显示文件内容(单个文件) | more 文件名 |
|
逐屏显示文件内容(多个文件) | more 文件1 文件2 ... 文件n 多个文件时可以按相应的键位进行进一步操作 按F键 显示下一个文件 按Q键 退出 |
|
压缩多行空行变为为一行空行 | more 文件 /S | |
从第几行开始显示文件内容 | more +n 文件(n代表行数) | |
显示后面n行的内容 | P n(n代表后面需要再显示行数) | 按P键,出现行数输入提示,输入显示行数后回车 |
跳过后面n行的内容 | S n(n代表后面需要跳过的行数) | 按P键,出现行数输入提示,输入显示行数后回车(跳过5行) |
显示行号 | = |
如错误数字代码的变量(errorlevel)可以用来判断命令运行情况
问题描述 | 演示(重现问题) | 解决 |
---|---|---|
使用set命令设置变量的时候可能由于习惯的原因会在变量名和=间加上空格分隔 (a=XXX 变成a =XXX) 此时变量a就会变成变量a 这个名字 |
注意写变量的时候空格问题 |
问题描述 | 演示(重现问题) | 解决 |
---|---|---|
使用for语句的时候在命令行模式下使用%%书写变量会提示不应该使用%%。 | 命令行模式:%%书写变量 批处理程序:%书写变量 |
问题描述 | 演示(重现问题) | 解决 |
---|---|---|
在书写路径的时候有时候会出现带空格的路径,由于系统默认使用空格当作分隔符,所以会将路径分隔开,导致路径不完整而的报错 | 1、""括起带空格的部分 2、""括起整个路径 |
问题描述 | 演示(重现问题) | 解决 |
---|---|---|
我们使用cmd控制台输出中文的时候可能会出现乱码的情况,原因是文件自身编码格式与cmd不符 |
|
1、文件另存为选ANSI编码即可 2、修改cmd的代码页面(无需改文件编码) |
1、本机tcp/ip协议检查
ping 127.0.0.1 或 ping loaclhost
2、检查网关连接是否畅通(ping路由器ip,假设为192.168.3.1)
ping 192.168.3.1
3、检查电脑与外网连接是否畅通(ping 外网网址)
ping www.baidu.com
1、查看系统激活信息
slmgr /dli 或者 slmgr /xpr
2、卸载产品密钥
slmgr /upk
3、安装产品密钥
slmgr /ipk + 密 钥
4、设置管理服务计算机名
slmgr /skms 计算机名
5、激活产品
slmgr /ato
@echo off
title *员工通讯录查询*
mode con cols=40 lines=20
:start
set /p a=请输入需要查询的信息:
type 通讯录.txt | findstr %a%
echo -----------------------------------
if %a%==Q (goto ends) else (goto start)
:ends
exit
pause>nul
虚拟通讯录名单:
1 张三 130-0000-1111
2 李四 154-0000-2222
3 王五 189-0000-3333
4 赵六 129-0000-4444
5 刘七 158-0000-5555
6 小明 186-0000-6666
7 小红 187-0000-7777
8 小亮 136-0000-8888
9 小军 135-0000-9999
10 小飞 189-0000-0000
这里我们使用的start启动百度搜索网站搜素输入的关键词
百度默认搜索的url如下,我们只需要动态修改关键字即可
@echo off
set /p a=请输入你要搜索的关键字:
start https://www.baidu.com/s?wd=%a%
netsh wlan show profiles name="WiFi的ssid" key=clear
1、查询程序端口连接情况的
tasklist /FI "IMAGENAME eq cloudmusic.exe"
或者查询任务管理器查看PID
2、通过程序PID强制中断进程及其子进程
taskkill /PID 12088 /F /T
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf