位置: 编程技术 - 正文

批处理(bat)命令学习的一些总结(批处理 /b)

发布时间:2024-02-27

推荐整理分享批处理(bat)命令学习的一些总结(批处理 /b),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:批处理命令大全及用法,批处理 /b,批处理 /b,批处理 bat,批处理 bat,batch批处理,bat批处理命令大全,bat批处理命令教程,内容如对您有帮助,希望把文章链接给更多的朋友!

一、set 篇:

1、set(无开关)

set .=testset.::若一个变量以:.这三个与路径相关的符号开头,用set查看以该字符打头的变量时可以省去一个空格。echo %tmp:*=%::显示tmp变量第一个之后的部分,其余变量替换与变量偏移太简单不解释

2、set /p 变量名=注释<设备名当设备名为文件时,因为文件中换行符与回车符伴生,所以只取文件第一行作为var变量的内容,但是不超过字节;而当设备名为nul或者com3时,只显示不换行的注释,这种情况下可以省略变量名(如:set /p=Hello World

3、set /a,最具技巧的命令之一

set /a n=1,m=2::同时把不同数值分别赋予两个变量set /a a=b=c=d=e=f=1::用一条算式为多个变量同时赋值set /a "1/n" 2>nul||echo 变量n非纯数字或为零::利用分母不能为0的特征,用set判断一个变量是否为非零纯数字set n=1set /a "n=!!|!!&!!0"::位运算,!、^、|和&常用于布尔运算,而逻辑位移常用于二进制运算(>>还可判断数值是否为负,见下例)set /a n=-,"1/(->>)"||echo 变量n为负数::顺应cmd中的正负数存储特点,可以用逻辑位移实现判断正负数的“布尔运算”,可以衍生出繁多的算法,比如稍加改动就可以比较两数甚至多个数的大小set /a n=~-::利用~将所有二进制的1、0逆转,负号在后或在前配合可以实现简单加1或减1,这个技巧主要用来减少括号的使用,因为~号与负号的优先级都是高于算数运算符的set /a test=%test:~5,1%-0::可以避免%test:~5,1%为空时出错的情况set /a 十进制=0x十六进制,十进制=0八进制::快速将十六进制与八进制数转为十进制,可惜没有二进制...:loopset /a n+=echo %n:~-3%goto loop::这比常规的补位方法更优越for %%a in (test ABC test @#$ ) do set /a ".%%a+=1"set .|findstr /v /e "=1"::经典的获取字符串的重复次数的方案

二、for 篇:

这是批处理中最强的内部命令,没有之一!

1、for(无开关)

::不带参数的for与for /f配合,威力极大,仅举此一例for %%a in () do for %%a in () do for %%a in () do echo %%a::其实如果只读取最后一层for的参数,即使多层for嵌套也可以使用同样的参数,比如%%afor %%z in (!tmp!) do echo !%%z!::目前已知的摆脱call实现多层变量嵌套的最好方法,不少人用

2、for /l

批处理(bat)命令学习的一些总结(批处理 /b)

for /l %%a in () do echo ::无限循环,步数为0也是一样的效果,但是没这个简洁for /l %%a in (-4 1) do echo %%a::for /l中的三项参数从左至右的三位分别是初始值、步数、终止点,当用户给定的数量不足时,将按从右至左的顺序把不足的一项赋为0

3、for /d /r

for /r /d %%a in (*) do echo %%a::可以遍历所有子文件夹,之所以可以联用r开关和d开关是因为它们的参数有交集,l开关和f开关就不行了。

4、for /f

for /f本身的技巧并不是特别多,它的优势是能够将其他命令的输出作为输入来分析,所以for /f可以说是当之无愧的内部命令之王for /f "tokens=* delims=" %%a in ("") do echo %%a::去除前缀的n个字符for /f "skip=" %%a in (1.txt) do echo 1.txt至少行::以前看到某版主写的,印象颇深。for /l %%a in (1 1 ) do (for /f "tokens=1,2* delims=" %%a in ("!tmp!") do (for %%c in (%%a %%b) do echo %%cset tmp=%%c))::将tokens的取值范围无限拓展set tmp====for /l %%a in (1 1 ) do (for /f "tokens=1,2* delims==" %%a in ("!tmp!") do (set str=!str!,%%a,%%bset tmp=%%c))echo %str:~1%::有时候set变量替换是无法替换一些特殊字符的,此时可以用for /f处理set test=d:testfor %%a in (test.*) do (if "%%~za" neq "%%~z$test:a" replace /p /u "%%a" "%%~dp$test:a")::判断当前目录下以test为名的文件是否在d:test文件夹下存在同名文件,如果存在且大小不同、修改日期更早,则替换之,否则不做处理。for帮助信息中的“%%~dp$path:a”参数似乎没见人用过,虽然它的适用范围很狭隘,但是特定的情况下不妨一试。setlocal enabledelayedexpansionset t=tmpset @=tfor /f %%a in ('echo !%@%!') do echo !%%a!::另一种三层嵌套方法,其实不实用。

三、findstr 篇

我最钟爱的命令,可惜外部命令的启动速度太慢,所以实际运用时较少露面。findstr /s /m .* *.*::其实findstr也是一个dir,虽然比dir慢些,却多了查找文件内容的功能findstr /n .* 1.txt|findstr "^:"::非常实用的取指定行的方法,配合正则可以取指定范围之内的行set /p n=请输入数字或大小写字母(echo !n!)|findstr /i "[0-9a-Z]"&&echo 输入有误!::这个够实用吧?不解释dir|findstr ['-Z]::利用findstr和if命令中字符的实际大小顺序实现查找含有宽字符的行findstr /x ".........." 1.txt::查找1.txt中字节的行(type 1.txt&echo;)|findstr /o .*|more +1::加上for,很容易获取1.txt每行的字节数findstr>1.txt /m /p .* *.*dir /b /a-d|findstr>2.txt /v /i /m /g:1.txt::获取含有不可打印字符的文件名,关键是findstr取集findstr "^Rar!" /g:1.txt::此处1.txt是上个技巧的1.txt,内容是所有含不可打印字符的文件列表,此技巧可搜索rar文件,虽然简单,但是至今也未出错过,原创。more>tmp +2 1.txtfindstr>前两行.txt /x /v /g:1.txt 2.txt::有时候可用此办法获取前几行,当然,绝大部分情况下没有for /f合适,而且存在特殊字符bug@echo offfindstr /n .* 1.txt>tmp1find /n /v "" 2.txt|more>tmp2 +2for /f "tokens=2*delims=]:" %%a in ('fc /n /lb tmp1 tmp2^|sort') do (echo;%%b)del tmp&#;pause::qzwqzw首创用fc /n同时输出双文本的思路,但是存在排序有可能被打乱的缺陷,所以加了个find弥补一下

四、start、call、cmd 篇

之所以放在一起,是因为这三个命令的功能有所交集1、start@echo off%1 cd.>tmpset /p=%1%1 start /b "" %0 :(五秒后退出) tmif not "%1"=="" goto %1set /p n=输入任意字符if defined n (del tmpecho 您输入的是%n%,五秒后退出。) else echo 输入为空!五秒后退出。:(五秒后退出)ping /n 5 localhost>nulif exist %2p exitpause::妙用start /b让set /p实现choice的延时功能,不知道哪位前辈首创的,再次赞一个。此处%1、%2的技巧仅作点缀,我只是觉得这样“搭积木”很好玩才强加上去的。2、callset a=bset b=ccall echo %%%a%%%::不使用变量延迟仍然可以借助call实现变量的延迟读取与嵌套,但是效率上有缺陷3、cmdset a=bset b=ccmd /c echo %%%a%%%::这证明call一个命令时的效果近似于cmd /c,二者的区别体现在"for"和"if"这两个命令不能用call运行,因为for和if其实可能只是关键字,而非真实存在的命令set a=bset b=ccmd /v:on /c echo !%a%!::不需要setlocal,照样可以使用变量延迟%1 %0 :: echo;成功调用自身%2::个人很常用,这里用%1和%2的技巧为我所偏爱,那个::可以视情况换为rem。虽然此处并未出现cmd命令,但其实运行自身时执行的就是cmd /c %0。@echo off%1 cmd /v:on /c %0 ::set n=echo !n!pause::综合前两个技巧实现不使用setlocal,开启变量延迟@echo offset str=test测试setlocal enabledelayedexpansionfor /f "delims=:; " %%a in ('((cmd /u /c echo !str!^)^&echo^;^;^)^|findstr /o ^;') do set /a n=%%a-5for /f "delims=:" %%a in ('((echo !str!^)^&echo^;^;^)^|findstr /o ^;') do set /a d=n-%%a+3set /a m=n/2,s=m-decho 共!m!个字符,!d!个单字节字符、!s!个双字节字符pause::三步判断单字符、双字符个数的另类办法。优势在于支持对超长字符串进行计算(此时用常规算法步骤多且难通用),缺点在于效率低。ren 1.exe 1.batecho 请双击1.bat::为什么这样也可以运行呢?因为exe的打开方式是"%1" %*,bat是cmd /c "%1" %*,所以把exe当做bat运行时,相当于cmd /c 1.exe...不过这只适合双击打开,在cmd内部调用此文件的时候是当成真正的bat运行的,所以会出错。

五、其他命令篇

1、xcopy比copy强大得多,最大的遗憾在于它是外部命令xcopy /a 源文件夹 目标文件夹::xcopy用在筛选上也很实用xcopy /l /y /n %cd% ..::巧取当前目录下文件的短名,并不会真的复制xcopy /d:1-- /l "%cd%" tmp::获取修改日期在年1月日以后的文件清单xcopy /t *.txt C:test::复制含有txt文件的目录结构到C:test@echo 1.txt>listxcopy /exclude:list &#;.txt test::复制所有以单个字符为名的文件到test文件夹xcopy /s *.txt ..txt::复制所有以txt为名的子文件到上一级目录中的txt文件夹for /f "delims=" %%a in ('dir /s /b /ad^|sort -r') do rd "%%a" 2>nul::删除空文件夹的经典思路,利用rd默认不删除非空文件夹的特性进序删除空文件夹for /d %%a in (*) do (xcopy /q /h /r /s /k "%%a" "tmp"rd /s /q "%%a"ren "tmp" "%%a")::删除空文件夹的另类方案2、相比于前面几个大佬级的命令,这些命令算是比较不起眼的了,所以归在一类copy nul+Unicode.bat 解密.bat::用Unicode文件头来进行编码混淆加密的bat,可以用这条命令解密echo>tmp more /t tmp>对齐.txttype 对齐.txtpause::more命令的t开关也有大用途,潜规则不解释。cmd /u /c echo |more::more命令会将cmd /u输出的nul字符转换为空格,从而实现逐字打印一行单字节字符。@echo off&setlocal enabledelayedexpansionset n=(for %%a in ( 8 4 2 1) do sort /rec !n! %0&&set /a n-=%%a||set /a n+=%%a)>nul 2>nulecho 最长行有%n%个字符pause::当最长的行字符数大于时可能可以用这个来判断最长行的字符数(短于时rec开关会失效,代码中那一大堆2的N次方就是凑字数的,实战中可以省掉一些),支持超长字符串,计算大文件时效率明显优于传统算法,新折半法来自plp的转帖,sort的/rec开关比较鸡肋,想来想去也只想到这个用途,未见先例ren 1.exe 1.batecho 请双击1.bat::为什么可以把exe改为bat后缀名运行呢?因为exe的打开方式是"%1" %*,bat是cmd /c "%1" %*,所以把exe当做bat运行时,相当于cmd /c 1.exe...不过这只适合双击打开,在cmd内部调用此文件的时候是当成真正的bat运行的,所以会出错。而且基于同样的原因,它还可以改成com或者cmd后缀名来执行。3、再介绍一些在cmd窗口中的技巧,当然它们仅仅是“欺骗”cmd窗口,一旦输出到文件就原形毕露:@echo offecho 1echo 2echo 3echo 退行了pause>nul::这个太牛了,不知道哪位发现的set "dq= "(echo 2、计划生育的重要性%dq%啊echo 1、贯彻落实科学发展观%dq%哇)|sort::借助tab键与退格符实现多行捆绑排序并错行显示,tab与退格之间的那个空格是关键,否则变为退行set /p=同一行显示不同颜色:set /p=红底蓝字echo  黄底绿字findstr /a: .* 红底蓝字&#;findstr /a: .* 黄底绿字&#;del>nul 红底蓝字 黄底绿字pause::经常见到的在同一行显示不同颜色的办法,不过很多人总是用    (四个退格四个空格),说明没理解退格键的意义@prompt $_dir fuck.tmppause::利用这个prompt,打开回显后可以同时输出命令与命令结果,而不会有多余内容,适合制作bat运行日志echo ::这个黑色的圆点在前面的介绍中作为配角出现过,是ansi码中的0x,也等同于在cmd中输入的ctrl+G,它每次被显示在屏幕上时都会发出“滴”的一声,所以以后findstr *.*时一定要留神了(除非不得已,否则需要把结果显示到窗口时建议加上/p开关),万一不小心打印出几万个,你的电脑会像发电报一样响个不停,我中招N次了...

六、cmd运行机制篇

1、预处理机制:特殊字符优先级、语句和语块的划分setlocal enabledelayedexpansion(set n=3set /a n=2,n=%n%+!n!+n)::利用预处理机制,将一个变量解释为多个值setlocal enabledelayedexpansionecho ^^!::当语句中存在变量延迟符号时,将被预处理两次,这是一定要注意的set str=.set "str name=str"for %%a in (%tmp%) do if defined %%a echo %%a 存在变量str::利用for的参数变量在if参数划分之后才被解释的特点,弥补if defined对于空格变量名的兼容性缺陷,本质原因是for和if都是特殊的函数,他们的参数设置在语块的预处理中就已经被cmd“记住”了,之后无法对其进行改变。(del %0echo 能找到我,就给你发糖pause>nul)::括号里的内容被理解成一个语块,运行其中的命令时不需从文件读取,所以就算删除自身仍可运行。echo "test&pause|sort::当一行命令中存在奇数个双引号时,将会转义其后所有本行字符for /f tokens^=2delims^=^" %%a in (""test"") do echo %%a::通过对特殊字符的转义,在for中用双引号当分隔符for /f tokens^=2delims^=^" %%a in (^""") do echo %%aset /p=^"""::当一组字符串中含有奇数个双引号时经常会出错,解决方法是转义其中的一个,保持有效的双引号成对,可是引号对之内无法用转义符对其转义,所以转义符要放在引号对之外使用set /a "1/(%random%%%2)"&&set com=||set com=/f "tokens=2"for %com% %%a in (" ") do echo %%a::假如随机值为偶数,则显示指定字符串第二段,否则显示整段。这里用变量来定制命令,会比常规办法(一条if和一条命令对应)更灵活和省事,但是要注意的是,变量延迟是在解释语块之后进行,所以这里的%com%不能使用变量延迟。set /a test1=,test2=(@echo offfor /f "tokens=1* delims==" %%a in ('set') do echo %%b)|sort::sort对for命令的输出进行排序,那个@echo off并非多余,因为通道之前的若是语块(for、if或者被成对括号包起来的语句),该语块中的内容将会以cmd /c的形式运行,此时的回显是打开的,而变量延迟则是默认关闭的。dir /ad &&md||rd &tree /f|more::当存在文件夹时,创建文件夹,否则删除文件夹,无论结果如何,接下来都会逐屏显示当前目录树。重点是管道命令、逻辑连接符的灵活运用2、句柄的妙用@echo off 2>nul 3>nul这个命令不存在...echo 错误回显呢?pause::句柄备份,可用于屏蔽所有正确或错误回显cd.>1.txt 2>2.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt 9>9.txt::用一个命令创建9个文件,效率自然提高了@echo off(for /r %%a in (*.*) do del /f /s "%%~nxa" 3>>"%%a") 2>nul 4>>%0pause::利用写入句柄会占用文件的特性实现高效删除重复文件待续...

批处理bat计算两个时间差 这个是脚本代码[保存为etime.bat放在当前路径下即可::etimebegin_timeend_timereturnrem所测试任务的执行时间不超过1天//骨瘦如柴版setlocal&setbe=%~1:%~2&setcc=(%%d-%%a

DOS批处理 函数定义与用法 Whatitis,whyit`simportantandhowtowriteyourown.Description:Theassumptionis:Abatchscriptsnippetcanbenamedafunctionwhen:1....ithasacallableentrancepoint.2....oncompletionexecutioncontinuesrightaftertheco

批处理bat命令 获取当前盘符和当前目录和上级目录的代码 批处理命令获取当前盘符和当前目录%~d0是当前盘符%cd%是当前目录可以用echo%cd%进行打印测试以下例子是命令行编译VisualStudio编写的程序:@echooffsetb=%cd%//

标签: 批处理 /b

本文链接地址:https://www.jiuchutong.com/biancheng/371855.html 转载请保留说明!

上一篇:用批处理修改日期 然后在改回来(批处理修改文件修改日期)

下一篇:批处理bat计算两个时间差(bat批处理命令大全)

  • 公司全额承担个税怎么申报
  • 山东税务网上申报平台操作员查询
  • 进项税转出的会计凭证
  • 适用综合所得税率表
  • 税务会计常用会计科目
  • 海关完税价格计算公式
  • 流动资金包括哪三种
  • 机票改签费能否抵税
  • 个人所得税里累计专项扣除是什么意思
  • 财务软件计提所得税分录
  • 城建税的征税范围是什么
  • 个税申报本期收入包括社保吗
  • 小微企业增值税优惠政策最新2023
  • 房产税从租计征12%是年税率吗
  • 承租人与出租人签订了一份租赁合同,该设备
  • 变更企业性质企业怎么办
  • 经营性固定资产计入什么科目
  • 生产用水的会计分录
  • 超市开发票要交百分之几的税?
  • 活动策划税费
  • 房产税从价计征的计税依据
  • 研发费用的会计和税法的不同
  • 变更股权需要资质证书吗
  • 收到母公司的投资款
  • windows 修改host
  • 按销售收入比例分摊进项税额按月还是按年
  • 营业利润是怎么计算的?
  • 房产证办理流程图
  • 营改增之前的房子现在出售怎么开票
  • 固定资产的计量属性
  • 单目测距精度
  • 【机器学习】python实现吴恩达机器学习作业合集(含数据集)
  • 前端开发工程师是干嘛的
  • 营改增销售服务范围
  • 房屋租赁费属于什么税收分类编码
  • 个体工商户没有收入要交税吗
  • 工程施工预缴增值税
  • 下乡扶贫有补助吗
  • mongodb数据库操作题
  • 关闭论坛
  • 清理扬声器
  • 以前年度损益调整会计分录
  • 临时工工资计入什么费用
  • 加工费的预付款是什么
  • 广告公司收到广告收入会计分录
  • 建设工程招投标示范文本
  • 税率由16%变更为13怎么算
  • 房屋租赁协议印花税怎么计算
  • 长期未用的定金可以退吗
  • 电子承兑汇票是什么
  • 员工垫付的费用怎样记账
  • 去银行提备用金需要什么
  • 在MySQL中使用GTIDs复制协议和中断协议的教程
  • mysql 查找
  • Linq to SQL 插入数据时的一个问题
  • 在sql查询中使用where子句指定的是
  • 数据库的行和列的叙述
  • 谈一谈有关阅读的
  • solaris版本查询
  • win8开机启动项怎么关闭
  • windowsxp还能正常使用吗
  • 如何将iPhone照片导入电脑
  • linux svn管理工具
  • 虚拟机安装redhat没有图形界面
  • win7系统关闭自动休眠
  • win7旗舰版怎么重装系统教程
  • win10一堆毛病
  • iframe移动端自适应
  • cocos2dx 不规则按钮的实现
  • 有哪些小工具
  • 批处理设置dns
  • Unity的WWW类的用法整理
  • node.js 微信小程序
  • android 加密算法
  • ruby元编程第二版
  • 工会经费税务代收
  • 南京江宁汽车过户手续及费用
  • 徐州交社保有户口限制吗
  • 个人所得税计算扣除五险一金吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号