1.初衷:
bat 批处理文件:当我懒得一个个操作的时候,可以把若干东西放到一个文件里面,开机运行或者需要的时候手动运行、节省时间。
2.命令集说明
2.1 常用命令
2.1.0 help
命令 /? help 命令
type /? >>tmp.txt (把 type 命令的帮助信息写入到tmp.txt文件里)
2.1.1 @ ( 仅影响当前行, 相对于echo off 来说,是遮住了一行,而不是挡住了一片 )
不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
eg 关闭回显(之后的指令不再显示,只输出执行结果):@echo off
2.1.2 echo
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
echo 显示当前回显设置
echo on 打开回显,即显示指令输入及其输出结果
echo off 隐藏后面的所有指令及其输出结果( 在遇到 echo on 之前 )
echo 'hello' 单纯输出字符串
2.1.3 rem (可用::,: 代替rem, :Here is the description , ::Here is the description)
rem 注释命令 : @Rem Here is the description
2.1.4 pause
pause 暂停,使程序挂起
@echo off
:begin
copy a:*.* d:\\back
echo Please put a new disk into driver A
pause
goto begin
,驱动器 A 中磁盘上的所有文件均复制到d:\\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理
2.1.5 call
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]] 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名
一个批处理程序调用另一个批处理程序,并且不终止父批处理程序
2.1.6 start
启动单独的“命令提示符”窗口来运行指定程序或命令
start ["title"] [/dPath] [/min] [/max] [{/separate |/shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}][/wait] [/B] [FileName] [parameters]
"title" 指定在“命令提示符”窗口标题栏中显示的标题。
/dpatch 指定启动目录。
/i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。
/min 启动新的最小化窗口。
/max 启动新的最大化窗口。
/separate 在单独的内存空间启动 16 位程序。
/shared 在共享的内存空间启动 16 位程序。
/low 以空闲优先级启动应用程序。
/normal 以一般优先级启动应用程序。
/high 以高优先级启动应用程序。
/realtime 以实时优先级启动应用程序。
/abovenormal 以超出常规优先级的方式启动应用程序。
/belownormal 以低出常规优先级的方式启动应用程序。
/wait 启动应用程序,并等待其结束。
/b 启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用 CTRL+C,否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。
2.1.7 choice
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令
@echo off
choice /c dme
if errorlevel 3 goto defrag
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
echo '1'
goto end
:mem
echo '2'
goto end
:end
echo good bye
pause
2.1.8 if
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式
if "参数" == "字符串" if "%1"=="a" format a:
if exist config.sys edit config.sys if exist config.sys type config.sys
if errorlevel 2 goto x2
else 连用
if 1 == 0 ( echo comment1 ) else if 1==0 ( echo comment2 ) else (echo comment3 )
2.1.9 for
循环操作
2.2 组合命令
2.2.1 &
同时执行多条命令,而不管命令是否执行成功 dir z: & dir c:\\Ex4rch
2.2.2 &&
同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令 dir z: && dir c:\\Ex4rch
2.2.3 ||
同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令 dir fdImg || start website.txt
2.3 管道命令
2.3.1 |
第一条命令 | 第二条命令 [| 第三条命令...]
第一条命令的结果作为第二条命令的参数来使用 netstat -n -p tcp|find ":49264">D:\\IP.log
2.3.2 >、>>
输出重定向命令
将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中
echo hello world>website.txt
2.4 系统参数 ( 用户及其设置不同值不同 )
%SystemRoot% === C:\WINDOWS (%windir% 同样)
%ProgramFiles% === C:\Program Files
%USERPROFILE% === C:\Documents and Settings\Administrator (子目录有“桌面”,“开始菜单”,“收藏夹”等)
如: 访问我桌面的某个文档 start %USERPROFILE%\desktop\website.txt
C:\Users\admin\Desktop>start C:\Users\admin\desktop\website.txt
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%TEMP% === C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp (%TEM% 同样)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%OS% === Windows_NT (系统)
%Path% === %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem (原本的设置)
%HOMEDRIVE% === C: (系统盘)
%HOMEPATH% === \Documents and Settings\Administrator
3.实际经验分享
3.1 .bat 文件乱码问题
新建一个txt文件 - 文件”=》“另存为”, 在编码的时候选择“ANSI” - 更改为 .bat 后缀 或者 .cmd
3.2 批量打开程序
@echo off
start C:\Users\admin\Desktop\mark.txt
start C:\Users\admin\Desktop\route.txt
start C:\Users\admin\Desktop\styleLogin.txt
start C:\"Program Files (x86)"\Tencent\QQ\Bin\QQScLauncher.exe
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
start C:\Users\admin\AppData\Roaming\360se6\Application\360se.exe
start C:\Users\admin\Desktop\text.xlsx
echo "hello myboy"
pause
扩展:
开机启动目录
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
3.3 创建目录文件并比较
dir*.exe>exeback.txt & dir *.dll>dllback.txt
fc exeback.txt exeback1.txt>diff.txt
3.4 传递参数给批处理文件
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。
变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示。
call test2.bat "hello" "haha" (执行同目录下的“test2.bat”文件,并输入两个参数)
在“test2.bat”文件里写:
echo %1 (打印: "hello")
echo %2 (打印: "haha")
echo %0 (打印: test2.bat)
echo %19 (打印: "hello"9)
4.常用 api
md d:\aa 创建文件夹
set /p pass=请输入密码 等待用户输入、同时设置变量 ( 附带 pause 作用 )
color 0a 设置控制台颜色 ( 背景色 0 文本颜色 a , both : 0-f )
cls : 清屏
start C:\Users\admin\AppData\Roaming\360se6\Application\360se.exe http://www.baidu.com 打开浏览器 并访问网站
修改文件的文件名 rename test.jpg test2.JPG rename *.jpg *.888.JPG
ren 原文件名 新文件名 重命名文件名
tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称
type 文件名 显示文本文件的内容
tasklist >list.txt 将所有进程保存到list文件中(默认保存到当前目录)
5. 查看内置命令帮助指令
ver /? cmd /? set /? rem /?
if /? echo /? goto /? for /?
shift /? call /? type /? find /?
findstr /? copy /?
6.字符串处理
6.1 割字符串,以查看时间为例
%源字符串:~起始值,截取长度% (起始值从0开始;截取长度是可选的,如果省略逗号和截取长度,将会从起始值截取到结尾;
截取长度如果是负数,表示截取到倒数第几个。)
"%time%" 显示如:"11:04:23.03" (完整的时间"hh:mm:ss.tt")
"%time:~0,5%" 显示"hh:mm"(即"11:04"),其中0表示从右向左移位操作的个数,5表示从左向右移位操作的个数
"%time:~0,8%" 显示标准时间格式"hh:mm:ss"(即"11:04:23",前8个字符串)
"%time:~3,-3%"显示"mm:ss"(即从第4个开始,截去最后3个的字符串)
"%time:~3%" 显示"04:23.03"(即去掉前4个字符串)
"%time:~-3%" 显示".tt"(即最后3个字符串)
上面的字串分割格式,也可以用于其它地方,如目录路径:"%cd:~0,10%"
6.2 替换字符串
set a="abcd1234"
echo %a% 显示:"abcd1234"
set a=%a:1=kk% 替换“1”为“kk”
echo %a% 显示:"abcdkk234"
6.3 字符串合并
set str1=%str1%%str2% (合并 str1 和 str2)
6.4 计算字符串长度
没有现成的函数。如下程序利用 goto形成循环,不断将字符串截短1,并记录截短的次数,到字符串变成空时的次数即长度。
set testStr=This is a test string
:: 将 testStr 复制到str,str 是个临时字符串
set str=%testStr%
:: 标签,用于goto跳转
:next1
:: 判断str是不是空,如果不是则执行下边的语句
if not "%str%"=="" (
:: 算术运算,使num的值自增1,相当于num++或者++num语句
set /a num+=1
:: 截取字符串,每次截短1
set "str=%str:~1%"
:: 跳转到next1标签: 这里利用goto和标签,构成循环结构
goto next1
)
:: 当以上循环结构执行完毕时,会执行下边的语句
echo testStr=%testStr%
echo testStr的长度为:%num%
7. 文件处理
清空文件夹 del del /s /q test ( 彻底删除 指定文件 即 清空文件夹)
删除文件夹 rd rmdir rd /s /q test 直接删除整个文件夹
新建文件夹 md mkdir ::md %cd%\hello\cd mkdir %cd%\hello\cd
相关指令含义
/S 除目录本身外,还将删除指定目录下的所有子目录
/Q 安静模式,带 /S 删除目录树时不要求确认
last. 相关文档
来源:oschina
链接:https://my.oschina.net/u/4315513/blog/3593999