2024年3月7日发(作者:)
Bat命令大全一、echo和@@echooff@echooffechoonechoecho.#关闭单行回显#从下一行开始关闭回显#从本行开始关闭回显。一般批处理第一行都是这个#从下一行开始打开回显#显示当前是echooff状态还是echoon状态#输出一个”回车换行”,空白行#(同echo,echo;echo+echo[echo]echo/echo")二、errorlevelecho%errorlevel%每个命令运行结束,可以用这个命令行格式查看返回码默认值为0,一般命令执行出错会设errorlevel为1三、dirdirdir/adirc:/a:ddirc:/a:-ddirc:"/b/pdir*.exe/s#显示当前目录中的文件和子目录#显示当前目录中的文件和子目录,包括隐藏文件和系统文件#显示C盘当前目录中的目录#显示C盘根目录中的文件#/b只显示文件名,/p分页显示#显示当前目录和子目录里所有的.exe文件四、cdcd"cd#进入根目录#显示当前目录
cd/dd:"sdk#可以同时更改盘符和目录五、mdmdd:"a"b"c#如果d:"a不存在,将会自动创建中级目录#如果命令扩展名被停用,则需要键入mkdir"a"b"c。六、rdrdabcrd/s/qd:"temp#删除当前目录里的abc子目录,要求为空目录#删除d:"temp文件夹及其子文件夹和文件,/q安静模式七、deldeld:"#删除指定文件,不能是隐藏、系统、只读文件del/q/a/fd:"temp"*.*删除d:"temp文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录del/q/a/f/sd:"temp"*.*删除d:"temp及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录八、renrend:"temptmp#支持对文件夹的重命名九、cls清屏十、type
显示文件内容typec:"e*.txt#显示指定文件的内容,程序文件一般会显示乱码#显示当前目录里所有.txt文件的内容十一、11copy拷贝文件copyc:":"复制c:"文件到d:",并重命名为从屏幕上等待输入,按Ctrl+Z结束输入,输入内容存为文件con代表屏幕,prn代表打印机,nul代表空设备+合并和的内容,保存为文件如果不指定,则保存到+复制文件到自己,实际上是修改了文件日期十二、title设置cmd窗口的标题title新标题13ver显示系统版本#可以看到cmd窗口的标题栏变了十三、label和vol设置卷标
vollabellabelc:system#显示卷标#显示卷标,同时提示输入新卷标#设置C盘的卷标为system十四、pause暂停命令十五、rem和::注释命令注释行不执行操作十六、date和time日期和时间datedate/ttimetime/t#显示当前日期,并提示输入新日期,按""回车""略过输入#只显示当前日期,不提示输入新日期#显示当前时间,并提示输入新时间,按""回车""略过输入#只显示当前时间,不提示输入新时间十七、goto和:跳转命令:labelgotolabel#行首为:表示该行是标签行,标签行不执行操作#跳转到指定的标签那一行十八、find(外部命令)
查找命令find""abc""c:"在c:"文件里查找含abc字符串的行如果找不到,将设errorlevel返回码为1find/i“abc”c:"查找含abc的行,忽略大小写find/c""abc""c:"显示含abc的行的行数十九、more(外部命令)逐屏显示morec:"#逐屏显示c:"的文件内容二十、tree显示目录结构treed:"#显示D盘的文件目录结构二十一、&顺序执行多条命令,而不管命令是否执行成功二十二、&&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令find""ok""c:"&&echo成功如果找到了""ok""字样,就显示""成功"",找不到就不显示
二十三、||顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令find""ok""c:"||echo不成功如果找不到""ok""字样,就显示""不成功"",找到了就不显示二十四、|管道命令dir*.*/s/a|find/c"".exe""管道命令表示先执行dir命令,对其输出的结果执行后面的find命令该命令行结果:输出当前文件夹及所有子文件夹里的.exe文件的个数typec:"|more这个和morec:"的效果是一样的二十五、>和>>输出重定向命令>清除文件中原有的内容后再写入>>追加内容到文件末尾,而不会清除原有的内容主要将本来显示在屏幕上的内容输出到指定文件中指定文件如果不存在,则自动生成该文件typec:">prn屏幕上不显示文件内容,转向输出到打印机echohelloworld>con在屏幕上显示helloworld,实际上所有输出都是默认>con的copyc:":>nul拷贝文件,并且不显示""文件复制成功""的提示信息,但如果f盘不存在,还是会显示出错信息
copyc:":>nul2>nul不显示”文件复制成功”的提示信息,并且f盘不存在的话,也不显示错误提示信息echo^^W^>^W>c:"生成的文件内容为^W>W^和>是控制命令,要把它们输出到文件,必须在前面加个^符号二十六、<从文件中获得输入信息,而不是从屏幕上一般用于datetimelabel等需要等待输入的命令@echooffecho2005-05-01>e<这样就可以不等待输入直接修改当前日期二十七、%0%1%2%3%4%5%6%7%8%9%*命令行传递给批处理的参数%0批处理文件本身%1第一个参数%9第九个参数%*从第一个参数开始的所有参数批参数(%n)的替代已被增强。您可以使用以下语法:%~1%~f1%~d1%~p1%~n1-删除引号(""),扩充%1-将%1扩充到一个完全合格的路径名-仅将%1扩充到一个驱动器号-仅将%1扩充到一个路径-仅将%1扩充到一个文件名
%~x1%~s1%~a1%~t1%~z1-仅将%1扩充到一个文件扩展名-扩充的路径指含有短名-将%1扩充到文件属性-将%1扩充到文件的日期/时间-将%1扩充到文件的大小%~$PATH:1-查找列在PATH环境变量的目录,并将%1扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串可以组合修定符来取得多重结果:%~dp1%~nx1-只将%1扩展到驱动器号和路径-只将%1扩展到文件名和扩展名%~dp$PATH:1-在列在PATH环境变量中的目录里查找%1,并扩展到找到的第一个文件的驱动器号和路径。%~ftza1-将%1扩展到类似DIR的输出行。可以参照call/?或for/?看出每个参数的含意echoload""%%1""""%%2"">c:"生成的文件内容为load""%1""""%2""批处理文件里,用这个格式把命令行参数输出到文件二十八、if判断命令if""%1""==""/a""echo第一个参数是/aif/i""%1""equ""/a""echo第一个参数是/a/i表示不区分大小写,equ和==是一样的,其它运算符参见if/?ifexistc:"o存在c:"文件ifnotexistc:"windows(echo不存在c:"windows文件夹
)ifexistc:"(echo存在c:")else(echo不存在c:")二十九、setlocal和endlocal设置”命令扩展名”和”延缓环境变量扩充”SETLOCALENABLEEXTENSIONSSETLOCALDISABLEEXTENSIONSSETLOCALENABLEDELAYEDEXPANSIONSETLOCALDISABLEDELAYEDEXPANSIONENDLOCAL“命令扩展名”默认为启用“延缓环境变量扩充”默认为停用批处理结束系统会自动恢复默认值可以修改注册表以禁用""命令扩展名"",详见cmd/?。所以用到""命令扩展名""的程序,建议在开头和结尾加上SETLOCALENABLEEXTENSIONS和ENDLOCAL语句,以确保程序能在其它系统上正确运行""延缓环境变量扩充""主要用于if和for的符合语句,在set的说明里有其实用例程#启用""命令扩展名""#停用""命令扩展名""#启用""延缓环境变量扩充""#停用""延缓环境变量扩充""#恢复到使用SETLOCAL语句以前的状态三十、set设置变量引用变量可在变量名前后加%,即%变量名%set#显示目前所有可用的变量,包括系统变量和自定义的变量#显示系统盘盘符。系统变量可以直接引用echo%SystemDrive%
setp#显示所有以p开头的变量,要是一个也没有就设errorlevel=1#设置变量p,并赋值为=后面的字符串,即aa1bb1aa2bb2#显示变量p代表的字符串,即aa1bb1aa2bb2#显示变量p中第6个字符以后的所有字符,即aa2bb2#显示第6个字符以后的3个字符,即aa2#显示前3个字符,即aa1#显示最后面的2个字符,即b2#显示除了最后2个字符以外的其它字符,即aa1bb1aa2b#用c替换变量p中所有的aa,即显示c1bb1c2bb2#将变量p中的所有aa字符串置换为空,即显示1bb12bb2#第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2#设置变量p,赋值为%p:*bb=c%,即c1aa2bb2#设置p为数值型变量,值为39#支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3#用/a参数时,在=后面的变量可以不加%直接引用#”与”运算,要加引号。其它支持的运算符参见set/?#取消p变量setp=aa1bb1aa2bb2echo%p%echo%p:~6%echo%p:~6,3%echo%p:~0,3%echo%p:~-2%echo%p:~0,-2%echo%p:aa=c%echo%p:aa=%echo%p:*bb=c%setp=%p:*bb=c%set/ap=39set/ap=39/10set/ap=p/10set/ap=”1&0″setp=set/pp=请输入屏幕上显示”请输入”,并会将输入的字符串赋值给变量p注意这条可以用来取代choice命令注意变量在if和for的复合语句里是一次性全部替换的,如@echooffsetp=aaaif%p%==aaa(echo%p%setp=bbbecho%p%)结果将显示
aaaaaa因为在读取if语句时已经将所有%p%替换为aaa这里的""替换"",在/?帮助里就是指""扩充""、""环境变量扩充""可以启用”延缓环境变量扩充”,用!来引用变量,即!变量名!@echooffSETLOCALENABLEDELAYEDEXPANSIONsetp=aaaif%p%==aaa(echo%p%setp=bbbecho!p!)ENDLOCAL结果将显示aaabbb还有几个动态变量,运行set看不到%CD%%DATE%%TIME%%RANDOM%%ERRORLEVEL%%CMDEXTVERSION%%CMDCMDLINE%#代表当前目录的字符串#当前日期#当前时间#随机整数,介于0~32767#当前ERRORLEVEL值#当前命令处理器扩展名版本号#调用命令处理器的原始命令行可以用echo命令查看每个变量值,如echo%time%注意%time%精确到毫秒,在批处理需要延时处理时可以用到三十一、start
批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令三十二、call批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行有时有的应用程序用start调用出错的,也可以call调用三十三、choice(外部命令)选择命令让用户输入一个字符,从而选择运行不同的命令,返回码errorlevel为1234……win98里是2000pro里没有,可以从win98里拷过来win2003里是ice/N/Cy/T5/Dy>nul延时5秒三十四、assoc和ftype文件关联assoc设置'文件扩展名'关联,关联到'文件类型'ftype设置'文件类型'关联,关联到'执行程序和参数'当你双击一个.txt文件时,windows并不是根据.txt直接判断用打开而是先判断.txt属于txtfile'文件类型'再调用txtfile关联的命令行txtfile=%SystemRoot%"system32"%1可以在""文件夹选项""→""文件类型""里修改这2种关联#显示所有'文件扩展名'关联#显示.txt代表的'文件类型',结果显示.txt=txtfile
peftypeexefile#显示.doc代表的'文件类型',结果显示.doc=nt.8#显示.exe代表的'文件类型',结果显示.exe=exefile#显示所有'文件类型'关联#显示exefile类型关联的命令行,结果显示exefile=""%1""%*=nt.8设置.txt为word类型的文档,可以看到.txt文件的图标都变了=txtfile恢复.txt的正确关联ftypeexefile=""%1""%*恢复exefile的正确关联如果该关联已经被破坏,可以运行,再输入这条命令三十五、pushd和popd切换当前目录@echooffc:&cd"&mdmp3mdd:"mp4cd/dd:"mp4pushdc:"mp3popd#在C:"建立mp3文件夹#在D:"建立mp4文件夹#更改当前目录为d:"mp4#保存当前目录,并切换当前目录为c:"mp3#恢复当前目录为刚才保存的d:"mp4三十六、for循环命令这个比较复杂,请对照for/?来看for%%iin(c:d:e:f:)doecho%%i依次调用小括号里的每个字符串,执行do后面的命令注意%%i,在批处理中for语句调用参数用2个%
默认的字符串分隔符是""空格键"",""Tab键"",""回车键""for%%iin(*.txt)dofind""abc""%%i对当前目录里所有的txt文件执行find命令for/r.%%iin(*.txt)dofind""abc""%%i在当前目录和子目录里所有的.txt文件中搜索包含abc字符串的行for/r.%%iin(.)doecho%%~pni显示当前目录名和所有子目录名,包括路径,不包括盘符for/rd:"mp3%%iin(*.mp3)doecho%%i>>d:"把d:"mp3及其子目录里的mp3文件的文件名都存到d:"里去for/l%%iin(2,1,8)doecho%%i生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1for/f%%iin('set')doecho%%i对set命令的输出结果循环调用,每行一个for/f""eol=P""%%iin('set')doecho%%i取set命令的输出结果,忽略以P开头的那几行for/f%%iin(d:")doecho%%i显示d:"里的每个文件名,每行一个,不支持带空格的名称for/f""delims=""%%iin(d:")doecho%%i显示d:"里的每个文件名,每行一个,支持带空格的名称for/f""skip=5tokens=4""%%ain('dir')doecho%%a对dir命令的结果,跳过前面5行,余下的每行取第4列每列之间的分隔符为默认的""空格""可以注意到dir命令输出的前5行是没有文件名的for/f""tokens=1,2,3delims=-""%%ain('date/t')do(echo%%aecho%%becho%%c)对date/t的输出结果,每行取1、2、3列
第一列对应指定的%%a,后面的%%b和%%c是派生出来的,对应其它列分隔符指定为-和""空格"",注意delims=-后面有个""空格""其中tokens=1,2,3若用tokens=1-3替换,效果是一样的for/f""tokens=2*delims=-""%%ain('date/t')doecho%%b取第2列给%%a,其后的列都给%%b三十七、subst(外部命令)映射磁盘。substz:"server"dsubstz:/dsubst#这样输入z:就可以访问"server"d了#取消该映射#显示目前所有的映时三十八、xcopy(外部命令)文件拷贝xcopyd:"mp3e:"mp3/s/e/i/y复制d:"mp3文件夹、所有子文件夹和文件到e:",覆盖已有文件加/i表示如果e:"没有mp3文件夹就自动新建一个,否则会有询问


发布评论