文章目录
一、编码
在cmd中输入
chcp 65001 utf8编码
chcp 936 gdk编码
在cmd窗口右键→属性→选项→当前代码页可以查看
二、常见命令
1.REM 和 ::
REM 为注释命令,该命令后的内容不被执行,但能回显
**:😗*注释命令,该命令后的字符能回显(命令解释器不认为他是一个有效的命令行)
有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。
无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号
2.echo 和 @
**@**放在命令前将关闭该命令回显
echo
1.显示信息
echo off
关闭回显 echo on
将打开回显
2.建立新文件或增加文件内容
echo 文件内容>文件名
3.答复命令中的提问
echo 答复语|命令文件名
4.向打印机输出打印内容或打印控制码
ECHO 打印内容>;PRN
3.PAUSE
停止系统命令的执行
要显示其他提示语,可以这样用:
echo (提示语) & pause > nul
pause 会提示按任意键继续…
3.errorlevel
程序返回码
每个命令运行结束,可以用这个命令行格式查看返回码
用于判断刚才的命令是否执行成功
默认值为0,一般命令执行出错会设 errorlevel 为1
@echo off
: p
ping (ip)
IF ERRORLEVEL 1 goto aa
IF ERRORLEVEL 0 goto bb
:aa
echo 正在重启软件服务...
net stop MSSQLSERVER
net start MSSQLSERVER
goto p
:bb
echo 继续ping中。。。
goto p
@echo off
xcopy C:\AUTOEXEC.BAT D:\
if errorlevel 1 echo 文件拷贝失败
if errorlevel 0 echo 成功拷贝文件
::文件比较,结果输出到2.txt
fc F:\1.txt E:\1.txt >>2.txt
0 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
backup | 备份成功 | 未找到备份文件 | 文件共享冲突阻止备份完成 | ctrl+c中止 | 致命错误中止 | |
diskcomp | 盘比较成功 | 盘比较不同 | ctrl+c中止 | 致命错误中止 | 预置错误中止 | |
diskcopy | 盘拷贝成功 | 非致命盘读/写错误 | ctrl+c中止 | 致命错误中止 | 预置错误中止 | |
format | 格式化成功 | ctrl+c中止 | 致命错误中止 | |||
xcopy | 拷贝成功 | 未找到拷贝文件 | ctrl+c中止 | 预置错误中止 | 拷贝过程中写盘错误 |
4.title
设置cmd窗口标题
设置hello为标题
title hello
5.:和goto
goto自动跳转到标签名
**😗*标签
6.if
存在判断(如果存在就删除)
if exist C:\Progra~1\Tencent\AD.gif del C:\Progra~1\Tencent\AD.gif
输入判断
if "%1"=="" goto usage
结果判断
if not errorlevel 1 link %1.obj pause & edit %1.asm
括号旁边不能是字符只能空格
@echo off
if exist 1.txt (
echo file is exist
) else (
echo delete file
)
7.比较运算符
“/i” 开启比较过程中字符串大小写忽略功能
在命令扩展下支持的比较运算符有:
“equ(等于)”
“neq(不等于)”
“lss(小于)”
“leq(小于等于)”
“gtr(大于)”
“geq(大于等于)”
其中“lss”、“leq”、“gtr”和“geq”四种比较操作符主要用于数值比较,当参与比较的字符串是字符串时,将被转换为对于的ASCII码进行比较;
而“equ”和“neq”既可以比较数值也可以比较字符串。
@ echo off
set var1=123
set var2=abc
set var3=12
if /i %var2% equ ABC (
if %var1% geq %var3% (
echo %var1%^>=%var3%
) else (
echo %var1%^<%var3%
)
) else (
echo %var2%不等于ABC
)
8.call
用来从一个脚本中调用另一个脚本
call [drive:][path]filename [batch-parameters]
调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名
call :(label)
调用本文件内命令段,相当于子程序。
被调用的命令段以标签:label开头,以命令goto :eof结尾。
@echo off
call :test
echo two
:test
echo one
goto :eof
echo three
输出结果:
one
two
one
9.start
::开启计算机
start calc
::开启名为sea的窗口
start “sea”
::创建名为1的文件夹并进入
md 1
start 1
::打开文件1.txt(必须存在)
start 1.txt
::打开控制面板中卸载程序
start control appwiz.cpl
::打开控制面板
start control
10.find、findstr和type
在文件中搜索字符串
find [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
/V 显示所有未包含指定字符串的行。
/C 仅显示包含字符串的行数。
/N 显示行号。
/I 搜索字符串时忽略大小写。
/OFF[LINE] 不要跳过具有脱机属性集的文件。
"string" 指定要搜索的文字串,
[drive:][path]filename指定要搜索的文件。
type [drive:][path]filename | find "string" [>tmpfile] #挑选包含string的行
type [drive:][path]filename | find /v "string" #剔除文件中包含string的行
type [drive:][path]filename | find /c #显示文件行数
@echo off
echo 111 >test.txt
echo 222 >>test.txt
find "111" test.txt
del test.txt
pause
findstr
findstr默认是区分大小写的(跟find命令一样)
格式:findstr 参数 字符串 路径\文件名
findstr /n "hello" a.txt #显示行数和内容
findstr /m /i "hello" *.txt #查找出在哪个文件中
^匹配行开始的位置(与/b对应)
findstr /i "^hello" a.txt
$匹配行结束的位置(与/e对应)
findstr /e /i "hello$" a.txt
findstr /a:6 .* "批处理之家*"
11.dir
显示目录下的内容
/w 只显示缩略信息。
/p 如果一页占不下的话,分页显示。
/s 显示系统文件
三个可以一起使用
12.set
创建、设置、查看和删除环境变量
批处理在使用变量的时候,需要在变量的前后各加上一个 % ,不然会报错
/a 把string设置成可以求值的数字表达式
@echo off
set xxx="c:\"
echo display all the variables begin with character c
set xxx #显示系统所有以xxx开头的变量
dir /w %xxx%
rem delete the xxx variable
set xxx= #删除环境变量 给变量赋值时候=右边没东西
set #能显示系统所有环境变量
set设置的环境变量会在所有的cmd窗口中生效
@echo off
set a=bbs.verybat.cn
set var=%a:~0,-3% //输出bbs.verybat
set var=%a:~-3% //输出.cn
set var=%a:~3% //输出.verybat.cn
echo %var%
/a 命令行开关指定等号右边的字符串为被评估的数字表达式
@echo off
set /a sum = 0 # /a不能少,否则会报错
echo sum is %sum%
set /p 是命令语法,var是变量名, 等号右边的"请输入变量的值: "是提示语在运行时不需要输入参数
@echo off
set /p var=请输入变量的值:
if %var% == 1 echo 您输入了 1 _
pause
13.choice
此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。
参数列表:
/C choices 指定要创建的选项列表。默认列表是 “YN”。
/N 在提示符中隐藏选项列表。提示前面的消息得到显示,选项依旧处于启用状态。
/CS 允许选择分大小写的选项。默认情况下,不分大小写。
/T timeout做出默认选择之前,暂停的秒数可接受的值是从0到9999。如果指定了0,就不会有暂停,默认选项会得到选择。
/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C选项指定的一组选择中;同时,必须用/T指定 nnnn。
/M text 指定提示之前要显示的消息。如果没有指定,工具只显示提示。
/? 显示帮助消息。
@echo off
choice /C ab /N /M "选项1请选择a,选项2请选择b。"
choice /c YNC /cs /m "确认请按Y, 否请按N, 或者取消请按C。"
choice /c YNC /cs /t 3 /d Y /m "确认请按Y, 否请按N, 或者取消请按C。"
choice /c ync
if errorlevel 1 goto yes
if errorlevel 2 goto no
if errorlevel 3 goto cacel
:yes
@echo You chose yes
goto :eof
:no
@echo You chose no
goto :eof
:cacel
@echo You chose cancel
goto :eof
14.pushd 和 popd
切换当前目录
@echo off
c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹
md d:\mp4 #在 D:\ 建立 mp4 文件夹
cd /d d:\mp4 #更改当前目录为 d:\mp4
pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3
popd #恢复当前目录为刚才保存的 d:\mp4
%~dp0 指的是批处理所在的路径
15.for循环
for循环里边的变量用%%(编译器在编译的时候会自动屏蔽掉一个%)
%写在cmd命令行中
基本格式:
for %%variable in (set) do command [command-parameters]
%%variable 指定一个单一字母表示可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters为特定命令指定参数或命令行开关。
@echo off
set /a sum=0
for %%x in (*) do (
echo %%x the content file :
type %%x
echo .
set /a sum=sum+1
)
echo there are total %sum% files
没有任何参数的for
格式为:
for %%i in (set) do command
%%i 为变量
set为一个文件或者一组文件,其实就是一个集合。可用通配符,比如*.txt。
command 是要执行的命令。
for %%i in (*.mp3,*.wma) do echo %%i #显示所有.mp3、.wma的文件
含有/L的for
格式为:
for /L %%i in (start,step,end) do command
从start到end的一个数字序列,步长是step
for /L %%i in (1,1,3) do notpad.exe #同时打开三个记事本
for /L %%i in (1,2,10) do echo %%i #输出1,3,5,7,9
含有/F的for
/f会默认以每一行来作为一个元素
格式:
FOR /F ["options"] %%i IN (file) DO command
FOR /F ["options"] %%i IN ("string") DO command
FOR /F ["options"] %%i IN ('command') DO command
[“options”] 为可选
for /f %%i in (a.txt) do echo %%i #显示a.txt中的内容
for %%i in (a.txt) do echo %%i #只显示文件名
delims 指定分隔符,默认的分隔符是空格和tab键
for /f "delims= " %%i in (a.txt) do echo %%i
for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j
输出结果:
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列
tokens后面要取每一行的两列,用%%i来替换第二列,用%%j来替换第三列。
并且必须是按照英文字母顺序排列的,%%j不能换成%%k
*把这一行全部或者这一行的剩余部分当作一个元素
for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j
输出结果:
第1行第2列 第1行第3列
第2行第2列 第2行第3列
第3行第2列 第3行第3列
用%%i代替第二列,用%%j代替剩余的所有
for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i #忽略前两行,当一行以*开始时,就忽略它
16.>重定向符
“>”将命令发送到文件或设备,有些命令输出(例如错误消息)不能重定向
“>>”将命令输出添加到文件结尾而不删除文件中已有的信息
“<”从文件而不是键盘上获取命令所需的输入
echo hello > 1.txt
echo world >>1.txt
17.%批处理变量引导符
例:
a.bat
net use \%1\ipc$ %3 /u:"%2"
copy 11.BAT \%1\admin$\system32 /y
copy 13.BAT \%1\admin$\system32 /y
copy ipc2.BAT \%1\admin$\system32 /y
copy NWZI.EXE \%1\admin$\system32 /y
attrib \%1\admin$\system32\10.bat -r -h
%1、%2、%3表示第一、第二、第三个参数
执行时,a IP username password 方可正确执行
%* 从第一个参数开始的所有参数
参数%0可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
例:最简单的复制文件自身的方法
copy %0 d:\wind.bat
18.| 命令管道符
dir c:\|find "txt"
& Cmd.exe 运行第一个命令,然后运行第二个命令。
&& 只有在第一个命令运行成功时才运行第二个命令
|| 代表上一句执行失败,Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行
| 让前一命令的输出当做后一命令的输入
三、功能实现
1.获取年月日
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
echo %year%-%month%-%day%
2.重命名文件
rename 原文件名 新文件名
rename %file% release_%month%_%day%.rar
3.文件解压
(这个要配置环境变量)
WinRAR 压缩包 解压位置
WinRAR e -or "D:\压缩包所在路径\*.rar" "D:\解压到该路径下"
-or表示文件解压后遇到重名文件自动重命名
-df 表示压缩后删除源文件
-dr 删除源文件到回收站
-r 含子文件夹
-ai 忽略文件属性
-cl 文件名小写
-cu 文件名大写
-ed 忽略空文件夹
-ep 忽略路径信息
-ep1 表示忽略被压缩的根文件夹
-ep2 包含最完整路径信息(除驱动器)
m 表示移动(压缩后,删除源文件)
a 表示压缩
s 表示创建自解压文件
4.文件压缩
winrar a -ep1 -o+ -ppassword -inul -r -ibck C:/RarFile E:/BigFile
a 压缩命令
ep1排除基准文件夹,不然压缩包会包含待压缩文件夹所在的完整路径
o+ 覆盖已经存在的文件
p 密码,后面红色的部分就是密码,紧贴这个参数P,看起来有点怪
inul 禁止出错信息
r 连同子文件夹操作
ibck 后台模式运行
C:\RarFile 压缩文件
E:\BigFile 等待压缩的源文件
5.移动文件
move [源] [目的]
6.删除文件夹
rd 文件夹名
7.判断文件夹是否为空
dir %1 /b|find /v "0471391E">nul|| echo %1 is empty
四、总结
多写代码实践
不要点赞,我怕别人比你强