看完这篇!就不用再去看别的bat教程了!


一、编码

在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   
012345
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 

四、总结

多写代码实践
不要点赞,我怕别人比你强

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值