bat批处理学习

::学习书籍 《批处理入门手册》修正版.chm
:: hello zxh//两个冒号的注释不会回显,rem注释会回显
::显示回显的注释
rem hello zxh
::@echo关闭回显
@echo hello,world

::off关闭批处理中的命令回显,on打开命令回显
@echo off
echo hello world
echo i will come back
::echo.输入一个回车
echo.
echo next again
::在time命令之后给出一个回车,然后自动返回到dos提示符
echo. | time

::自动将Y输入给rd /s c:\abc命令的答复
echo Y|rd /s c:\abc
::pause是暂停为了展示给大家看

::>将字符串保存为文件
echo 123>myfile.txt

::cd\ 回到根目录下
::cd.保持原来的目录
::%cd%显示当前完整路径
echo 当前路径是%cd%

::dir /p每页暂停 /B或/b没有标题或摘要 /a列出所有文件 /ah列出隐藏文件 /ad列出所有文件夹 /ad-h列出所有文件夹不包含隐藏文件其中-h表示去掉显示的意思h为隐藏文件
::dir /o分类列出 /oN按名称 /oS按大小 /oE按扩展名 /oD按日期 /oG按组目录优先 /o-颠倒顺序的前缀

::进入当前bat所在文件夹
cd %~dp0

::attrib d:\pagefile.sys 查看文件属性,结果: R只读,A存档,S系统,H隐藏 ; 参数:/S递归处理子文件夹匹配的文件,/D处理文件夹

::attrib - h d:\pagefile.sys 消除隐藏属性,s消除系统属性

::del d:\123\abc.txt 删除命令,可以删除多个文件作为参数,/P删除之前确认,/F强制删除文件,/S递归删除,/Q安静删除不需要确认,/A根据属性删除其中R只读、S系统、H隐藏、A存档、-表示否的前缀

::copy source[drive:][path][filename]  [destination [drive:][path][filename]] 即copy 要复制的源文件(包括路径和文件名)  文件复制的目标路径[\文件名],当[destination [drive:][path][filename]]缺省时则为当前目录。

::copy c:\123\*.rm d:\abc /y 将123目录下所有rm格式的文件拷贝到d:\123,y表示强制覆盖不确认

::copy /b d:\1.mp3 d:\2.mp3 e:\3.mp3 将1.mp3 2.mp3合并到e:\3.mp3 其中/b表示binary二进制,相对的/a表示文本文件

::xcopy /s d:\123 e:\kkk\ 将123文件夹复制到e:\kkk\其中/s不包括空的子目录,/E复制所有子目录(是/e、/s 和 /t的组合),/T只复制目录树不复制文件 要复制空目录必须包含/e,/Y禁止提示覆盖现存的目标文件
::使用xcopy命令只能复制a下的所有文件和子目录,并不能将a文件夹一起复制。你可以创建一个a文件夹,然后复制到文件夹中。

::md d:\abc 创建文件夹abc,md d:\a\a\a 在d盘创建三个嵌套的a文件夹,md d:\a b c 创建三个文件夹a,b,c,md "d:\a b c" 注意加引号在d盘创建一个a b c的文件夹,

::rm /s /q d:\123 删除123文件夹/s以及子目录和文件 /q不询问即删除

::ren d:\123.txt 456.bat 把123.txt重命名为456.bat,ren是rename的缩写
::ren *.txt *.bat 批量重命名,把bat的文件批量更改为bat的文件,*表示任意多个字符,?表示一个字符

::move d:\abc d:\abcd 把abc移动到d:\abcd内,移动命令支持文件夹和文件,支持相对路径,/Y覆盖不需要确认,/-Y覆盖需要提示;只有把隐藏属性去了之后move才能执行;可以跨分区移动文件,不可以跨分区移动文件夹

::find /i "abc" d:\a.txt 查找字符串含abc的行,/i不区分大小写 /N显示行号 /C记录合格行的总行数 /v搜索不包含abc的行即反向查找行
::findstr /r "icq msn" 123.txt 使用正则表达式搜索icq或msn的行使用空格隔开,/s递归 /i不区分大小写 /r使用正则表达式,右为正故r代表正则 /c:"icq msn"表示"icq msn"是一个整体
::正则通配符: .任何字符 *以前字符重复0或0次以上 ^行的开始 $行的结尾 [class]任何在字符集中的字符 [^class]任何不在字符集中的字符 [x-y]指定范围内的任何字符 \x元字符x的文字用法 \<xyz字符的开始 xyz\>字符的结束

::常用网络命令和符号篇
::ping -n 3 www.baidu.comwww.baidu.com发送3次echo数据包,默认为4次
::ping www.baidu.com >nul 其中>nul为屏蔽输出
::ping www.baidu.com -w 1000 其中-w表示超时值为1s
::ipconfig /all 查看ip配置,/all是所有信息
::arp -a 查看arp缓存中所有项目,arp -a ip 为查看制定网卡的arp缓存项目
::arp -s ip mac 对ip添加静态arp实现arp绑定
::arp -d ip 删除ip的静态项目

::start "" "%windir%\system32\NOTEPAD.EXE" "%userprofile%\桌面\abc.txt" 用记事本打开桌面的abc.txt文件,/min /max使窗口最小化最大化
::shutdown -l 注销本机
::at 12:00 shutdown -s 在12点关闭计算机
::shutdown -r -t 60 在60s之后重启计算机,其中-r重启,-t多少秒之内,-s关机,-f强制,-a放弃当前关机
进程

::taskkill /im qq.exe 结束qq进程,im代表imagename进程名,/f强制,/pid结束的进程id

::echo hello123 > 1.txt 把字符串传递并覆盖到1.txt文件,后面有空格并且最后有空行回车,>>是在末尾追加

::tasklist | find /i "qq.exe" && taskkill /f /im qq.exe 如果找到qq进程并结束qq进程,其中|为命令管道,将左边的输出输入到右边
::echo Y|rd /s c:\abc 将Y传递给rd命令,相当于自动输入y
::dir z:\ & dir c:\ & dir d:\ 其中&表示连续执行多条命令,一条失败了不影响后面的命令,其中&&表示一条失败了后面的不执行;||与其相反,一条失败了后面才执行,一条成功了后面不执行
::管道命令|优先级高于重定向命令>,>>

::该学习3.1 if条件语句

@echo off
::set会带打印提示,并且用户可以输入
::set /p var1=请输入第一个比较的字符:
::set /p var2=请输入第二个比较的字符:
::下面的if else要写到一行
::if "%var1%"=="%var2%" (echo 输入的两个字符相同) else echo 输入的两个字符不相同

::/i不区分大小写
if /i "abc"=="ABC" (echo 相同) else (echo 不相同)

::等于equ,大于gtr,大于等于geq,小于lss,小于等于leq,不等于neq,注意比较的是数字不是字符串
::set /p var=请输入一个数字:
::if %var% geq 10 (echo 此数大于等于10) else echo 此数小于10

::判断文件或文件夹是否存在
if exist "e:" (echo e盘存在) else echo (e盘不存在)


::errorlevel是dir返回值
dir /a-d d:\123.bat >nul 2>nul
if %errorlevel%==0 (echo 123.bat文件存在) else echo 123.bat文件不存在

::defined 变量,确定一个变量是否已定义,set声明一个变量
set a=10
if defined a (echo 变量a已定义) else (echo 变量a未定义)

::查看文件是否存在,若存在则删除
::if exist "d:\123.txt" (del "d:\123.txt")

::如果123.txt文件不存在则输出,if not 表示不存在的判断
::if not exist "d:\123.txt" (echo "d:\123.txt 不存在")

::for循环
::for %I in (command1) do command2 在cmd窗口中
::for %%I in (command1) do command2 在批处理文件中
::会输出"www.baidu.com "
::for %%i in (www.baidu.com) do echo "%%i "
::会输出"www. "回车"baidu. "回车"com "
for %%i in (www.,baidu.,com) do echo "%%i "
set str=a b c d e f g h i j k l m n o p q r s t u v w x y z
echo 当前电脑有磁盘:
for %%i in (%str%) do (if exist %%i: echo %%i:)
echo.
echo 当前文件夹下所有的文件
::(*.txt)为txt格式的文件,(??.txt)文件名为两个字符的txt文件
for %%i in (*.*) do echo "%%i"
::for /f 为解析文本而生,bat的正则表达式,/f是以行为单位处理文本文件的
echo.
for /f %%i in (test.txt) do echo %%i
echo.
for /f "delims=," %%i in (test.txt) do echo %%i
::/f默认以空格键或tab分割
::delims=,以逗号进行分割可以依次指定多个符号以空格区分
echo.
for /f "delims=:," %%i in (test.txt) do echo %%i
::/f分成好多个节,默认提取第一个节

::tokens是delims所划分的第几个节,索引从1开始
echo.
for /f "delims=, tokens=3" %%i in (test1.txt) do echo %%i
::tokens后面可以跟两个数字,最后的echo字母(%%i %%j)从in前面的字母(%%i)开始依次计算
echo.
for /f "delims=, tokens=3,5" %%i in (test1.txt) do echo %%i %%j
::token=1,* 表示1以后的范围
echo.
for /f "delims=, tokens=1,*" %%i in (test1.txt) do echo %%i %%j
::skip=2 表示要跳过的行数是count,直接从n+1行开始
echo.
echo skip
for /f "skip=1" %%i in (test.txt) do echo %%i

::eol忽略以指定字符开头的行,默认是忽略分号;开头的行,使用"eol="来不跳过任何一个开头的行
echo.
echo eol
for /f  "eol=" %%i in (test.txt) do echo %%i

::1、for /f %%i in (文件名) do (……)
::2、for /f %%i in ('命令语句') do (……)
::3、for /f %%i in ("字符串") do (……)  
::加了for /f "usebreakq delims=" %%i in (test.txt) do echo %%i 之后文件名加双引号"test.txt",命令语句加`号,字符串加单引号'
::4、for /f "usebackq" %%i in ("文件名") do (……)
::5、for /f "usebackq" %%i in (`命令语句`) do (……)
::6、for /f "usebackq" %%i in ('字符串') do (……)

::1.for /d 参数 查询目录
::2.for /r 参数 遍历搜索
::3.for /l 参数 建立序列
::访问c盘根目录下文件夹
@echo off
echo.
echo c盘根目录所有文件夹
for /d %%i in (c:\*) do echo %%i
echo.
echo 当前目录根的下所有文件夹
for /d %%i in (*) do echo %%i

::列举c盘所有exe文件,很耗时的,若不写c:\则为当前cmd光标所指向的目录下,隐藏文件不会搜索
::for /r c:\ %%i in (*.exe) do echo %%i
::搜索并打印c盘所有readme.txt文件
::for /r c:\ %%i in (readme.txt) do if exist %%i echo %%i

::for /l 参数 建立序列格式:FOR /L %%variable IN (start,step,end) DO command [command-parameters]
echo.
echo 打印出1,2,3,4,5序列各占一行
for /l %%i in (1,1,5) do echo %%i

::set 设置变量
set var=abcd
echo %var%
::使var为未定义状态
set var=
::echo %var% 将无法输出

::::set /p可以作为提示也可以声明变量,表示用户下一步要输入
::set /p var=请输入变量的值
::echo 你输入了%var%

::set的替换%src:strfind=strnew%
set src=www.baidu.com
set var=%src:baidu=sina%
echo %var%

::系统变量http://www.cnblogs.com/lm002003/archive/2012/05/15/2502367.html

::set字符串截取,索引从0开始
set var=bbs.bathome.cn
echo %var%
set var1=%var:~0,3%
echo %var1%
::~1,-3%代表1到倒数第三个
set var1=%var:~1,-3%
echo %var1%
::~-3,2%代表倒数第三个到它的前两个
set var1=%var:~-3,2%
echo %var1%
::~3%代表第三个以后的
set var1=%var:~3%
echo %var1%

::%a:~1,3%    -------- “bs.”        变量a 偏离1位,截取3位字符。
::%a:~1,-3%   -------- “bs.bathome” 变量a 偏离1位,截取倒数第3位前的字符。
::%a:~-3%    -------- “.cn”        变量a 偏离-3位,截取倒数的3位字符。
::%a:~-3,2%   -------- “.c”        变量a 偏离-3位,截取倒数后3位的前两2位字符\
::%a:~3%     -------- “.bathome.cn”变量a 偏离3位,截取完后面的字符。
::%a:~,3%     -------- “bbs”      变量a 偏离0位,截取3位字符。

pause

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值