47批处理学习笔记.docx
《47批处理学习笔记.docx》由会员分享,可在线阅读,更多相关《47批处理学习笔记.docx(21页珍藏版)》请在冰点文库上搜索。
![47批处理学习笔记.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/ccd1f63e-06d1-4972-99ae-33e55e0478ca/ccd1f63e-06d1-4972-99ae-33e55e0478ca1.gif)
47批处理学习笔记
批处理学习笔记
1、基本DOS操作命令
1.1目录类命令
mdcdrddir
Tree显示磁盘目录结构
Deltree删除整个目录,不管有没有子目录。
1.2磁盘操作类命令
Format格式化/q快速格式化/u全面格式化
Chkdisk检查磁盘当前状态
Label
Vol显示磁盘卷标
Sys系统复制命令现在用的不多
Ver显示系统版本
1.3文件操作类
Copy复制文件,注意目录的灵活应用。
Xcopy目录复制,会将此目录下的文件全部复制
Type显示文本文件
Ren重命名
Attrib显示文件属性
图中的加入系统属性,隐藏属性和只读属性。
Del删除文件
1.4其他命令
Cls清屏命令
Ver显示系统版本号
Time设置系统时间
Mem显示当前内存状态命令
通配符*和?
dir/s*.bat查找后缀名为bat的所有文件,不管文件名的长度。
?
代表一个字符
注意:
?
不能放在文件名的第一个字符位上。
2、一个简单的批处理程序
@echooff
setvar=qizhf
echo%var%
pause
2.1echo显示命令
Echooff关闭回显,有echooff话的话,在CMD中不显示执行结果
@echooff不显示@后面的命令,不然会把@后的命令显示出来
2.3set命令
Set给变量名赋值
%var%取变量值
setvar=qizhf给变量var赋值为qizhf
setvar=清空变量var
set/pvar=请输入var为从CMD输入的值
2.4pause暂停命令
2.5系统变量大全
%ALLUSERSPROFILE%本地返回“所有用户”配置文件的位置。
%APPDATA%本地返回默认情况下应用程序存储数据的位置。
%CD%本地返回当前目录字符串。
%CMDCMDLINE%本地返回用来启动当前的Cmd.exe的准确命令行。
%CMDEXTVERSION%系统返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME%系统返回计算机的名称。
%COMSPEC%系统返回命令行解释器可执行程序的准确路径。
%DATE%系统返回当前日期。
使用与date/t命令相同的格式。
由Cmd.exe生成。
%ERRORLEVEL%系统返回上一条命令的错误代码。
通常用非零值表示错误。
%HOMEDRIVE%系统返回连接到用户主目录的本地工作站驱动器号。
基于主目录值而设置。
用
户主目录是在“本地用户和组”中指定的。
%HOMEPATH%系统返回用户主目录的完整路径。
基于主目录值而设置。
用户主目录是在“本
地用户和组”中指定的。
%HOMESHARE%系统返回用户的共享主目录的网络路径。
基于主目录值而设置。
用户主目录是
在“本地用户和组”中指定的。
%LOGONSERVER%本地返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS%系统指定安装在计算机上的处理器的数目。
%OS%系统返回操作系统名称。
Windows2000显示其操作系统为Windows_NT。
%PATH%系统指定可执行文件的搜索路径。
%PATHEXT%系统返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE%系统返回处理器的芯片体系结构。
%PROCESSOR_IDENTFIER%系统返回处理器说明。
%PROCESSOR_LEVEL%系统返回计算机上安装的处理器的型号。
%PROCESSOR_REVISION%系统返回处理器的版本号。
%PROMPT%本地返回当前解释程序的命令提示符设置。
由Cmd.exe生成。
%RANDOM%系统返回0到32767之间的任意十进制数字。
由Cmd.exe生成。
%SYSTEMDRIVE%系统返回包含Windowsserveroperatingsystem根目录(即系统根目录)
的驱动器。
%SYSTEMROOT%系统返回Windowsserveroperatingsystem根目录的位置。
%TEMP%和%TMP%系统和用户返回对当前登录用户可用的应用程序所使用的默认临时目录。
%TIME%系统返回当前时间。
使用与time/t命令相同的格式。
由Cmd.exe生成。
%USERDOMAIN%本地返回包含用户帐户的域的名称。
%USERNAME%本地返回当前登录的用户的名称。
%USERPROFILE%本地返回当前用户的配置文件的位置。
%WINDIR%系统返回操作系统目录的位置。
在编自解压的压缩包时,比如安装程序,一般用系统变量,不建议使用绝对路径。
2.6启用变量延时扩展
最佳实践:
在@echooff下面加上此句setlocalEnableDelayedExpansion
原因是防止DOS的将变量的多重嵌套搞混,本质是因为批处理属于脚本语言吧。
注意:
此时用!
var!
来获取变量值,而不是%var%。
2.7定义标号
:
标号名
:
start
2.8If条件选择命令
IF[NOT]ERRORLEVELnumbercommand
IF[NOT]string1==string2command
IF[NOT]EXISTfilenamecommand
注:
在命令形式中“[]”中括号表示可选参数
(1)if"参数"=="字符串"待执行的命令
如:
if"%1"=="C"
formatC:
(2)ifexist文件名待执行的命令
ifexistlog.txt
editlog.txt
(3)if%errorlevel%==数字或者ifnot%errorlevel%==数字待执行的命令
DOS程序在执行的时候通常会有一个数字返回给DOS,称为错误码或者返回码,常用的返回码是0和1。
通常情况下,命令执行成功为0,如果命令不成功或者非法命令,则返回非0数值。
echo%errorlevel%可以查看。
(4)判断某个变量是否已经被赋值,用ifdefinedvar语句;
判断某两个数值是否相等,用if数值1equ数值2语句;
if1equ2(echo两数相等)else(echo两数不等)
注意:
ELSE命令必须与IF命令的尾端在同一行上,但是可以使用括号分割,如下所示:
If条件(
命令
)else(
命令
)
EQU-等于
NEQ-不等于
LSS-小于
LEQ-小于或等于
GTR-大于
GEQ-大于或等于
2.9for循环命令
(1)在CMD和批处理中命令写法是不一样的:
CMD窗口中:
for%Iin(command1)docommand2
批处理中:
for%%Iin(command1)docommand2
(2)参数:
/F分块提取文件
/D显示当前目录下所有指定的目录名称
/R枚举文件和目录
/L计次循环
子参数:
tokens(块)、delims(分块标志)、eol(忽略行)、skip(跳过行)、userbackq(支持长路径名)
长路径名与短路径名的概念。
注意:
●1、for、in和do是for语句的关键字,它们三个缺一不可;
●2、%%I是for语句中对形式变量的引用,就算它在do后的语句中没有参与语句的执行,也是必须出现的;
●3、in之后,do之前的括号不能省略;
●4、command1表示字符串或变量,command2表示字符串、变量或命令语句;
举例讲解:
@echooff
for%%Iin()doecho%%I
pause
1、for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;
2、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
3、for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束;
2.10call命令
(1)命令形式
CALL[drive:
][path]filename[batch-parameters]
A.bat中有callB.bat
则从批处理程序A中调用另外一个批处理程序B,程序B执行完后,返回A继续执行A中的call后面的命令。
(2)带参数传递
注意:
%0代表程序本身,%1代表第一个参数,%2代表第二个参数
2.11|管道命令
命令1|命令2
将命令1的结果作为命令2的输入
2.12find和findstr命令
在文件中搜索字符串。
(1)find
(2)findstr
注意:
find支持unicode字符串,而findstr不支持
Findstr的用法:
①findstr.2.txt或findstr"."2.txt
从文件2.txt中查找任意字符,不包括空字符或空行
②findstr.*2.txt或findstr".*"2.txt
从文件2.txt中查找任意字符包括空行和空字符
③findstr"[0-9]"2.txt
从文件2.txt中查找包括数字0-9的字符串或行
④findstr"[a-zA-Z]"2.txt
从文件2.txt中查找包括任意字符的字符串或行
⑤findstr"[abcezy]"2.txt
从文件2.txt中查找包括abcezy字母的字符串或行
⑥findstr"[a-fl-z]"2.txt
从文件2.txt中查找小写字符a-fl-z的字符串,但不包含ghIjk这几个字母。
⑦findstr"M[abc][hig]Y"2.txt
从文件2.txt中可以匹配MaiY,MbiY,MahY等…
注意:
][中间有个空格。
⑧^和$符号的应用
^表示行首,"^step"仅匹配"stephelloworld"中的第一个单词
$表示行尾,"step$"仅匹配"helloworldstep"中最后一个单词
⑨findstr"[^0-9]"2.txt
如果是纯数字的字符串或者行便过滤掉,例如2323423423这样的字符串,如果是345hh888这样的形式就显示出来。
⑩findstr"[^a-z]"2.txt
同上,如果是纯字母的字符串或者行便过滤掉,例如sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了。
⑪*号的作用
前面已经说过了".*"表示搜索的条件是任意字符,*号在正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者多次。
⑫findstr"^[0-9]*$"2.txt
这个是匹配找到的纯数字,例如234234234234,如果是2133234kkjl234就被过滤掉了。
⑬findstr"^[a-z]*$"2.txt
这个是匹配找到的纯字母,例如sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了
2.13nul的使用
很多时候,为了使得屏幕上不出现无关的信息,我们需要屏蔽掉命令执行过程中产生的一些提示,有时候是屏蔽掉出错信息,有时候是为了屏蔽成功执行命令的信息,有时候两者都需要屏蔽,那么,我们可以把各种提示信息重定向到空设备中去,具体的代码是:
①如果要屏蔽成功执行命令的信息,请在语句的最后加上代码>nul。
比如copya.txtd:
\test>nul
②如果要屏蔽出错信息,请在语句最后加上代码2>nul,需要注意的是,数字2前必须带空格。
比如,mdtest2>nul,如果当前目录已经存在文件夹test,那么,执行这条语句将不会出现错误提示;
③如果要同时屏蔽正确执行代码后产生的提示和出错时的信息,请在语句最后加上代码>nul2>nul。
比如,copya.txtd:
\test>nul2>nul这条语句,无论命令是否成功执行,都不会在屏幕上出现任何提示;
善用这类句式,可以很方便地实现很多目的,比如创建文件夹的时候,无需先用if语句来检测是否已经存在某个目录,直接mdtest2>nul即可,可以提高代码的执行效率。
3、S扫描器实例
教程中没有提供s扫描器。
Syn扫描速度比较快点。
程序解析:
@echooff
setlocalEnableDelayedExpansion
setlocal//设置本地变量,以下的变量只在本文件下有效,防止多个文件变量冲突,好习惯。
@color0e//设置颜色
@modeconcols=60lines=30//设置显示模式
@title自动扫描工具JKSING版
:
start//定义标签
cls
echo.
echo.
echo---------------------请选择要执行的操作---------------------
echo.
echo-----1.使用TCP方式扫描
echo-----2.使用SYN方式扫描
echo-----3.关闭系统防火墙
echo-----4.退出本程序
echo.
echo.
echo提示:
☆XP系统用户选择TCP方式
echo☆非XP系统用户选择SYN方式
echo☆扫描前请关闭您的防火墙
echo.
echo.
:
scan
setnum=
set/pnum=请选择要执行的操作:
if"!
num!
"=="1"goto1//跳转到标号1执行
if"!
num!
"=="2"goto2
if"!
num!
"=="3"goto3
if"!
num!
"=="4"goto4
Echo选择无效,请重新输入
Echo.
Gotoscan
:
1
cls
setxiancheng=//设置变量
setduankou=
set/pxiancheng=请输入线程数(通常500左右):
//设置输入提示
if"!
xiancheng!
"==""goto1//如果线程输入为空,则继续输入,注意!
号
set/pduankou=请输入要扫描的端口(1—65535):
if"!
duankou!
"==""goto1//如果端口输入为空,则继续输入
ifexist扫描结果.txtdel扫描结果.txt
ifexistip.txtdelip.txt
ifnotexistip.txtecho请输入ip段,例如:
192.168.0.1192.168.0.254>ip.txt&ip.txt//写入并打开
echo按“Y”键开始扫描……
pause>nul//其实按任意键开始扫描
cls
echo.
echoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo正在用TCP方式进行扫描中..............
echoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo.
for/f"eol=tokens=1,2delims="%%iin(ip.txt)dos.exetcp%%i%%j%duankou%%xiancheng%/save//忽略空行,以空格为分隔符,将每行的前两个token保存
for/f"eol=-tokens=1delims="%%iin(result.txt)doecho%%i>>s1.txt//忽略以-开头的
for/f"eol=Ptokens=1delims="%%iin(s1.txt)doecho%%i>>s2.txt//忽略以P开头的
for/f"eol=Stokens=1delims="%%iin(s2.txt)doecho%%i>>扫描结果.txt//忽略以S开头的
dels1.txt
dels2.txt
delResult.txt
gotoend
:
2
cls
setduankou=
set/pduankou=请输入要扫描的端口(1—65535):
if"!
duankou!
"==""goto2//如果端口输入为空,则继续输入
ifexist扫描结果.txtdel扫描结果.txt
ifexistip.txtdelip.txt
ifnotexistip.txtecho请输入ip段,例如:
192.168.0.1192.168.0.254>ip.txt&ip.txt
echo按“Y”键开始扫描……
pause>nul
cls
echo.
echoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo正在用SYN方式进行扫描中..............
echoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
echo.
for/f"eol=tokens=1,2delims="%%iin(ip.txt)dos.exesyn%%i%%j%duankou%/save
for/f"eol=-tokens=1delims="%%iin(result.txt)doecho%%i>>s1.txt
for/f"eol=Ptokens=1delims="%%iin(s1.txt)doecho%%i>>s2.txt
for/f"eol=Stokens=1delims="%%iin(s2.txt)doecho%%i>>扫描结果.txt
dels1.txt
dels2.txt
delResult.txt
gotoend
:
3
@netstopsharedaccess>nul
cls
echo防火墙已被关闭,按任意键返回主菜单!
pause>nul
gotostart
:
4
exit
:
end
cls
echo.
echo.
echo------------------扫描完毕,请选择后续操作------------------
echo-----1.打开扫描结果
echo-----2.返回主菜单
echo-----3.退出本程序
echo.
echo.
sethouxiu=
set/phouxiu=请选择要执行的操作:
if"!
houxiu!
"=="1"扫描结果.txt
if"!
houxiu!
"=="2"gotostart
if"!
houxiu!
"=="3"exit
gotoend
心得:
批处理程序可以调用.exe程序如s.exetcp%%i%%j%duankou%,并进行自动化的一些输入操作,然后可对exe程序的输出结果进行自动化的分析等。
关键还是得调用的exe那个程序写的好。
4、查找手机号实例
@echooff
title手机号码归属地查询
modeconlines=10cols=31
:
Main
cls
echo.//显示空行
echo.
echo请输入手机号码:
echo.
setinput=
set/pinput=
ifnotdefinedinputexit//没有输入则退出
if"%input:
~10%"==""gotoMain//检测输入手机号第10位是否为空
ifnot"%input:
~11%"==""gotoMain//检测输入手机号第11位是否为空
echo%input%|findstr"^1[3,5][0-9]*$">nul//|管道,>nul将查找结果屏蔽掉
cls
echo.
setID=%input:
~0,7%//取手机号前7位
for/f"tokens=2,4,6,8,10delims='"%%iin('findstr/r"%ID%"手机信息数据库.txt')do(
echo━━━━━━━━━━━━━━━
echo来自:
%%k%%l
echo.
echo品牌:
%%m
echo.
echo电话区号:
%%j
echo━━━━━━━━━━━━━━━
)
pause>nul
gotoMain
findstr/r以正则表达式的规则进行查找。
5、隐藏文件实例
@echooff
color4f
modecon:
cols=50lines=25
echo==================================
echo#欢迎使用文件隐藏批处理#
echo==================================
echo
echo程序简介:
echo该程序可以建立一个名为jksing的文件夹,该文件
echo夹和回收站几乎一模一样,你根本看不到你要隐藏的文
echo件。
当你要使用你的隐藏的文件时,只须要选择2即可。
echo注意:
本程序只适合fat32磁盘,在xp下测试通过!
echo.
echo.
pause
cls
echo1.隐藏文件2.取消隐藏文件
set/pa=请选择您要做的事:
if"%a%"=="1"(gotohello)else(gotoend)
:
hello
typeC:
\recycled\desktop.ini>C:
\desktop.ini//将回收站文件的配置信息重定向到C盘
ifexistjksing(gotonext)else(mdjksing)
:
next
echo请把你要隐藏的文件放入jksing文件夹里,然后按任意键继续..
pa