批处理 函数
[批处理]计算时间差的函数etime
![[批处理]计算时间差的函数etime](https://img.taocdn.com/s3/m/bc86caf5551810a6f52486ad.png)
[批处理]计算时间差的函数etime计算时间差的函数etime 收藏/thread-4701-1-1.html这个是脚本代码[保存为etime.bat放在当前路径下即可:免费内容::etime <begin_time> <end_time> <return> rem 所测试任务的执行时间不超过1天// 骨瘦如柴版setlocal&set be=%~1:%~2&setcc=(%%d-%%a)*360000+(1%%e-1%%b)*6000+1%%f-1% %c&set dy=-8640000for /f "delims=: tokens=1-6" %%a in ("%be:.=%")do endlocal&set/a %3=%cc%,%3+=%dy%*("%3>> 31")&exit/b----------------------------------------------------------------------------------------------------------------------------------------计算两个时间点差的函数批处理etime今天兴趣大法思考了好多bat的问题,以至于通宵在论坛逛看到有个求时间差的"函数"被打搅调用地方不少(大都是测试代码执行效率的)免费内容::time0::计算时间差(封装)@echo off&setlocal&set /a n=0&rem code 随风@for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do ( set /an+=10%%a%%100*360000+10%%b%%100*6000+10%% c%%100*100+10%%d%%100set /an-=10%%e%%100*360000+10%%f%%100*6000+10%%g %%100*100+10%%h%%100)set /as=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/1 00,n=n%%100set "ok=%s% 小时%f% 分钟%m% 秒%n% 毫秒" endlocal&set %~3=%ok:-=%&goto :EOF这个代码的算法是统一找时间点凌晨0:00:00.00然后计算任何一个时间点到凌晨的时间差(单位跑秒)然后任意两个时间点求时间差就是他们相对凌晨时间点的时间数的差对09这样的非法8进制数的处理用到了一些技巧,还有两个时间参数不分先后顺序,可全可点,但是这个代码一行是可以省去的(既然是常被人掉用自然体积越小越好):免费内容:@echo offf&setlocal&set/a n=0&set"s=+:%~1^&echo -:%~2"for /f "tokens=1-5 delims=.:" %%a in ('echo %s%') do (rem code 随风@set/an%%a=10%%b%%100*360000+10%%c%%100*6000+10 %%d%%100*100+10%%e%%100)set /as=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/1 00,n=n%%100set "ok=%s% 小时%f% 分钟%m% 秒%n% 跑秒" endlocal&(if %3. neq . (echo %ok:-=%) elseset %~3=%ok:-=%)&exit/b再研究下,有更简短的版本这个代码是我在cn-dos写过的,今天再优化了下更简短代码的算法深入一层:用hmsw(各字母代表一个两位数字)表示标准时间我们记他到凌晨的相对时间数为TxTx=hmsw时间点-0:00:00.00时间点=h*3600*100+m*60*100+100*s+whmsw 8位10进制数表示的时间数(单位0.01秒)就是hmsw 跑秒hmsw=w+100*s+10000*m+1000000*hhmsw-Tx=640000*h+4000*m所以Tx=hmsw-(640000*h+4000*m)=hmsw-4000*(160*h+m)那么Tx_2-Tx_1=hmsw_2-hmsw_1-4000*(160*(h_2-h_1)+(m_2-m_1))对与09这样的非法8进制数我们给他们每个前面加上1就可以保证是十进制数又能保证差值不变对于非同一天的时间(这种情况较少,除非你在接近0晨时调用)我们把用8640000-去替换负号再用set/a赋值就是下面代码用到的算法Tx_2-Tx_1=hmsw_2-hmsw_1-4000*(160*(1h_2-1h_1)+(1m _2-1m_1))免费内容:rem 兼容时间点跨天的情行,时间格式00:00:00.00 或者0:00:00.00 皆可:_difftime <Begin_Time> <End_Time> [ret] //返回两个时间点的差值(单位0.01秒)Setlocal enabledelayedexpansion&setb=0%1&set e=0%2&setc=1!e:~-11!-1!b:~-11!&set c=!c::=!set/ac=%c:.=%-4000*(160*(1%e:~-11,-9%-1%b:~-11,-9%)+1% e:~-8,-6%-1%b:~-8,-6%)endlocal & (if %3.==. (echo %c:-=8640000-%) else set/a %3=%c:-=8640000-%)&exit/b给difftime前面加上_是为了表明不是临时写的子过程也为了以后连接库函数标签的唯一性// 题外话:对于子过程,若启用了变量延迟,原则上三行都可以写完,尽量写紧凑些(因为没人读),但是对于算法,思路性的东西要能舍得笔墨,越详细越好,我发现即使你的代码写得再好,不会有人全搬,都会小修改,你自己初写代码时不可能考虑到所有人使用的具体情况,自然没人愿意很详细看你的代码,倒是你的思路为别人提供了一个方法,在此意义上函数库的作用起到方法库的作用发表于@ 2009年12月15日04:48:00 | 评论( 0 ) | 编辑| 举报| 收藏旧一篇:网吧母盘常用批处理| 新一篇:更改SysListView32内的项查看最新精华文章请访问博客首页相关文章批处理修改网络打印机端口的主机地址DOS延时实现批处理问题:SET 命令在FOR 循环中失效/ SET 环境变量生存域/作用域批处理for中如何实现break在不同日期格式下批处理输出自定义格式的日期和时间svn钩子程序自动备份配置库的批处理文件bat 批处理获取ip批处理获取本机IP(局域网)及MAC地址本文来自CSDN博客,转载请标明出处:/wq1282/archive/2009/12/16/5008350. aspx。
批处理中的字符串处理详解

批处理中的字符串处理详解2008年03月25日 14:57首先说一下,批处理和高级语言不同,没有字符串处理函数,比如strcat之类的,但是却可以利用环境变量来实现这些函数的功能。
本文对照C语言中的字符串处理函数,讲解在批处理中的实现方法。
首先说一下字符串的存储,在C语言中,采用字符数组或者字符指针来存储字符串,而BAT 中没有这些东东,所以要依靠环境变量来存储。
设置环境变量的语句为set语句,本文不详细介绍了,参考set /?语句。
1、C语中的strcpy函数,将一个字符串复制到另一个字符型指针或字符数组,覆盖原来的字符串。
C语言中的调用方法:strcpy(目标字符串,源字符串)在批处理中的实现方法:set 目标字符串=%源字符串%示例:复制内容到剪贴板代码:@echo off::关闭屏幕回显(可选)set str1=This is old string::设置str1中存储的字符串,注意没有双引号,这点与C语言等不同!set str2=This is new string::设置str2中存储的字符串echo 执行字符串拷贝以前:echo str1=%str1%echo str2=%str2%::先输出一次原有的字符串set str1=%str2%::字符串拷贝echo 执行字符串拷贝以后:echo str1=%str1%echo str2=%str2%::输出执行完字符串拷贝后的字符串echo 输出完毕,按任意键退出&&pause>nul&&exit::输出信息,当用户按任意键时,结束该批处理。
效果图:截图00145.PNG (8.8 KB)2008-3-25 14:212、C语中的strcat函数,将一个字符串连接到另一个字符型指针或字符数组的末尾。
C语言中的调用方法:strcat(目标字符串,源字符串)在批处理中的实现方法:set 目标字符串=%目标字符串%%源字符串%示例:复制内容到剪贴板代码:@echo offset str1=This is string1set str2=This is string2::设置str1和str2中存储的字符串echo 连接字符串以前:echo str1=%str1%echo str2=%str2%::先输出一次原有的字符串set str1=%str1%%str2%::字符串连接echo 连接字符串以后:echo str1=%str1%echo str2=%str2%::输出执行完字符串连接后的两个字符串echo 输出完毕,按任意键退出&&pause>nul&&exit效果图:截图00146.PNG (8.69 KB)2008-3-25 14:213、字符串截取,C中没有这种函数,不过可以通过语句实现,不再介绍,直接说批处理的。
批处理命令注释方法

批处理命令注释方法批处理命令是一种在Windows操作系统下批量执行一系列命令的方法,它可以帮助我们自动化一些重复性的操作。
在编写批处理命令时,为了方便自己和他人阅读和理解代码,我们经常需要添加注释。
本文将介绍一些常用的批处理命令注释方法。
一、REM命令注释REM是批处理命令中的注释命令,它可以在批处理脚本中添加注释,不会被执行。
REM后面的文本将被视为注释内容。
例如,我们可以使用REM命令注释说明某一行代码的作用:```REM 这是一个注释示例```二、::命令注释::是另一种常用的注释方法,它与REM命令一样,可以在批处理脚本中添加注释,不会被执行。
::后面的文本将被视为注释内容。
例如,我们可以使用::命令注释说明某一行代码的作用:```:: 这是一个注释示例```三、@echo off命令注释@echo off命令用于关闭批处理命令的命令回显功能,即在执行批处理脚本时不显示命令本身。
我们可以在@echo off命令后面添加注释,以解释脚本的功能和用途。
例如,我们可以使用@echo off命令注释说明整个批处理脚本的作用:```@echo offREM 这是一个批处理脚本示例,用于批量处理文件```四、标题注释在批处理脚本中,我们可以使用标题注释来标识和说明脚本的功能和用途。
标题注释通常位于脚本的开头,并使用一行或多行注释来进行说明。
例如,我们可以使用标题注释来说明脚本的功能和用途,并添加作者和日期信息::: 批处理脚本示例:: 作者:XXX:: 日期:YYYY-MM-DD@echo offREM 以下是脚本的具体执行逻辑```五、函数注释在批处理脚本中,我们可以定义自己的函数来实现一些特定的功能。
为了方便理解函数的作用和用法,我们可以使用函数注释来进行说明。
例如,我们可以使用函数注释来说明函数的功能、输入参数和返回值:```:: 函数名称:add:: 功能:实现两个数相加的功能:: 输入参数:num1 - 第一个操作数:: num2 - 第二个操作数:: 返回值:相加的结果六、代码行注释除了在整个脚本或函数级别上进行注释,我们还可以在代码行级别上添加注释,以解释某一行代码的作用和用途。
C#动态执行批处理命令

C#动态执⾏批处理命令C# 动态执⾏⼀系列控制台命令,并允许实时显⽰出来执⾏结果时,可以使⽤下⾯的函数。
可以达到的效果为:持续的输⼊:控制台可以持续使⽤输⼊流写⼊后续的命令⼤数据量的输出:不会因为⼤数据量的输出导致程序阻塞友好的 API:直接输⼊需要执⾏的命令字符串即可函数原型为:/// <summary>/// 打开控制台执⾏拼接完成的批处理命令字符串/// </summary>/// <param name="inputAction">需要执⾏的命令委托⽅法:每次调⽤ <paramref name="inputAction"/> 中的参数都会执⾏⼀次</param>private static void ExecBatCommand(Action<Action<string>> inputAction)使⽤⽰例如下:ExecBatCommand(p =>{p(@"net use \\10.32.11.21\ERPProject yintai@123 /user:yt\ERPDeployer");// 这⾥连续写⼊的命令将依次在控制台窗⼝中得到体现p("exit 0");});注:执⾏完需要的命令后,最后需要调⽤exit命令退出控制台。
这样做的⽬的是可以持续输⼊命令,知道⽤户执⾏退出命令exit 0,⽽且退出命令必须是最后⼀条命令,否则程序会发⽣异常。
下⾯是批处理执⾏函数源码:/// <summary>/// 打开控制台执⾏拼接完成的批处理命令字符串/// </summary>/// <param name="inputAction">需要执⾏的命令委托⽅法:每次调⽤ <paramref name="inputAction"/> 中的参数都会执⾏⼀次</param>private static void ExecBatCommand(Action<Action<string>> inputAction){Process pro = null;StreamWriter sIn = null;StreamReader sOut = null;try{pro = new Process();pro.StartInfo.FileName = "cmd.exe";eShellExecute = false;pro.StartInfo.CreateNoWindow = true;pro.StartInfo.RedirectStandardInput = true;pro.StartInfo.RedirectStandardOutput = true;pro.StartInfo.RedirectStandardError = true;pro.OutputDataReceived += (sender, e) => Console.WriteLine(e.Data);pro.ErrorDataReceived += (sender, e) => Console.WriteLine(e.Data);pro.Start();sIn = pro.StandardInput;sIn.AutoFlush = true;pro.BeginOutputReadLine();inputAction(value => sIn.WriteLine(value));pro.WaitForExit();}finally{if (pro != null && !pro.HasExited)pro.Kill();if (sIn != null)sIn.Close();if (sOut != null)sOut.Close();if (pro != null)pro.Close();}}。
批处理等待/延迟/暂停时间

批处理等待/延迟/暂停1、暂停(Pause)、延迟(Delay)、等待(Wait)、睡眠(Sleep)1)for+set+if,时间精度为0.01秒,适用平台为WinNT/2K/XP/2003。
利用for解析变量%time%并存为两个时间点%start%和%now%,再利用set /a计算两个时间点的时间差,最后用if判断时间差是否达到设定的暂停时间。
@echo offsetlocal enableextensionsecho %time%call :ProcDelay 200echo %time%goto :EOF:ProcDelay delayMSec_setlocal enableextensionsfor /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k:_procwaitloopfor /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%kset /a diff_=%now_%-%start_%if %diff_% LSS %1 goto _procwaitloopendlocal & goto :EOF2)VBS脚本中的sleep函数,时间精度为0.001秒,使用平台为Win9x/WinNT系列。
动态创建一个调用sleep()函数的VBS脚本,然后用Windows脚本宿主的命令行版本cscript调用它。
@echo off & setlocal enableextensions enabledelayedexpansionecho WScript.Sleep 2000 > %temp%\tmp$$$.vbsecho %time%cscript //nologo %temp%\tmp$$$.vbsecho %time%for %%f in (%temp%\tmp$$$.vbs) do if exist %%f del %%fendlocal & goto :EOF3)ping的消息发送间隔,时间精度为1秒,使用平台为Win9x/WinNT系列。
Windows批处理(bat)语法大全

Windows批处理(bat)语法⼤全%~dp0[获取当前路径]%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,⽬录cd %~dp0 :进⼊批处理所在⽬录cd %~dp0bin\ :进⼊批处理所在⽬录的bin⽬录⽰例这个⽰例在win10 x64测试正常::作⽤:以管理员⾝份安装Apached:cd %~dp0binhttpd.exe -k install -n “Apache24”运⾏结果以管理员⾝份运⾏ ⽰例.bat ,执⾏结果如下:C:\Windows\system32>d:D:>cd D:\Server\Apache24\binD:\Server\Apache24\bin>httpd.exe -k install -n “Apache24”我的常⽤命令%cd%[执⾏的路径]当前执⾏的路径,并⾮⽬标⽂件的路径taskkill /f /im notepad.exe [终⽌进程]taskkill /?打开帮助cmd窗⼝中⽂乱码在CMD窗⼝右键/默认值,打开属性选择 “默认代码页为简体中⽂GBK”,获取命令帮助 xxx /?遇到记不清楚的命令,但记得名字,就可以键⼊ 命令名 空格 /?就会有详细的该命令的帮助了,⽐如:ping /? cd /?查看内置命令的帮助信息ver /?cmd /?set /?rem /?if /?echo /?goto /?for /?shift /?call /?其他常⽤的命令type /?find /?findstr /?copy /?#⼀、基础语法1.批处理⽂件是⼀个“.bat”结尾的⽂本⽂件,这个⽂件的每⼀⾏都是⼀条DOS命令。
可以使⽤任何⽂本⽂件编辑⼯具创建和修改。
2.批处理是⼀种简单的程序,可以⽤ if 和 goto 来控制流程,也可以使⽤ for 循环。
3.批处理的编程能⼒远不如C语⾔等编程语⾔,也⼗分不规范。
批处理:FOR的参数F之delims详解下

批处理:FOR的参数/F之delims详解下(原创)代码:@echo offfor /f "delims=:" %%a in (易经.txt) do echo %%apause>nul运行结果将显示第一小节(列)的内容。
原因是没有定义显示的列,默认情况下忽略第一个分隔符(冒号)后面的内容。
要显示列,需要用到下节学习的tokens。
如:@echo offfor /f "tokens=1,2 delims=:" %%a in (易经.txt) do echo %%a %%bpause>nul你也可以使用冒号(:)和逗号(,),写法是“delims=:,”(使用英文双引号)。
原文中的每行文字将被作为分隔符的冒号和逗号分成多个小节:(不知道百度怎么搞的,竟然说我的表格超载!省略了)代码:@echo offfor /f "delims=:," %%a in (易经.txt) do echo %%apause>nul运行结果将显示第一小节(列)的内容。
没有定义列的时候,默认只显示第一列,忽略分隔符和第一个分隔符后的内容。
例如:文本“静夜思.txt”的内容是:床前明月光,疑是地上霜,举头望明月,低头思故乡。
文本中有四句古诗,诗句之间用逗号分隔。
古诗原本是没有标点符号的,标点符号是后人才加上去的。
逗号在语文上是语气暂停的意思,其实就是用来分隔语句意思以便于阅读和理解。
Delims=,的意思就是提取逗号做分隔符,并以此将诗句分成四个小列或小节。
第一列分隔符第二列分隔符第三列分隔符第三列第一行床前明月光,疑是地上霜,举头望明月,,低头思故乡。
如果我要用for将四句诗都显示到屏幕上,不需要任何参数即能实现:@echo offfor /f %%i in (静夜思.txt) do echo %%ipause>nul如果我只要“床前明月光”这句话,就需要delims帮忙了:@echo offfor /f "delims=," %%i in (静夜思.txt) do echo %%ipause>nul讲解:delims=后面跟了一个逗号,表示用原文中的逗号作为分隔符(划分的方法)将古诗分成四个小节。
Windows批处理脚本---取得指定N天前的日期

Windows批处理脚本---取得指定N天前的日期windows批处理获取几天前的日期。
目前是去年1月1日志今天的所有日期。
可另存为*.bat脚本直接执行。
Rem 获取当天x天前的日期@echo offrem 开启变量延迟setlocal enabledelayedexpansionset baseDir=D:rem == 需要输入参数 agoDaysrem 设定天数(0~365)set agoDays=30if agoDays EQU "" set agoDays=60if %agoDays% GTR 365 set agoDays=365rem 初始化新日期set newDate=0rem 日志文件set logFile=%baseDir%\\logs.txtecho ==== Begin %date% %time% ==== >>%logFile%REM echo %date% %time% >>%logFile%rem 调用子函数获取几天前的日期call :date2days2date %agoDays%echo newDate=!newDate!>>%logFile%goto endLooprem 获取当前时间的目录名:date2days2dateset agoDays=%1set curDays=0for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do ( set YY=%%a&set MM=%%b&set DD=%%c&if "!MM:~0,1!"=="0" set MM=!MM:~1!if "!DD:~0,1!"=="0" set D=!DD:~1! )if !MM! EQU 1 set /a "M_31=0","M_2829=0"if !MM! EQU 3 set /a "M_31=1"if !MM! EQU 5 set /a "M_31=2","M_30=1"if !MM! EQU 7 set /a "M_31=3","M_30=2"if !MM! EQU 8 set /a "M_31=4","M_30=2"if !MM! EQU 10 set /a "M_31=5","M_30=3"if !MM! EQU 12 set /a "M_31=6","M_30=4"if !MM! EQU 2 set M_2829=Dif !MM! EQU 4 set /a "M_31=2","M_30=0"if !MM! EQU 6 set /a "M_31=3","M_30=1"if !MM! EQU 9 set /a "M_31=5","M_30=2"if !MM! EQU 11 set /a "M_31=6","M_30=3"if !MM! GTR 2 set /a "R=(^!(YY%%4)&^!^!(YY%%100))|^!(YY%%400)","M_2829=28+ R"set /a curDays=M_2829+30*M_30+31*M_31+Dset /a disDays=curDays-agoDaysset yTh=%YY%set R=0if !disDays! LEQ 0 set /a "yTh=%YY%-1","R=(^!(yTh%%4)&^!^!(yTh%%100))|^!(yTh%%400)","disDays =365+R+disDays"set xDay=%disDays%set newM=1set newD=0set /a "R=(^!(yTh%%4)&^!^!(yTh%%100))|^!(yTh%%400)","C_2829=2 8+R"for %%a in (31, !C_2829!,31,30,31,30,31,31,30,31,30,31) do ( if !xDay! LEQ %%a set /a "newD=!xDay!"&(if !newM! LSS 10 set newM=0!newM!if !newD! LSS 10 set newD=0!newD!set newDate=!yTh!!newM!!newD!)&goto tuiChuif !xDay! GTR %%a set /a "newM+=1","xDay-=%%a"):tuiChugoto :EOF:endLoopecho ==== End %date% %time% ==== >>%logFile%。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
批处理函数
批处理函数是可在批处理脚本中调用的一组命令。
它们通常用于执行
特定的任务或操作,例如文件复制、打开某个应用程序或删除某个文件等。
以下是一些常见的批处理函数:
1.ECHO:在命令窗口中显示文本或值。
2.CD:更改当前文件夹。
3.DIR:列出当前文件夹中的文件和子文件夹。
4.COPY:将一个或多个文件从一个位置复制到另一个位置。
5.DEL:删除文件或文件夹。
6.MD:创建一个新文件夹。
7.TYPE:显示文本文件中的内容。
8.SET:设置或显示环境变量。
9.FOR:执行一个或多个命令,并对一组文件或文件夹执行操作。
10.CALL:在批处理文件中调用另一个程序或批处理文件。
11.IF:测试条件并执行相应的命令。
这些函数可用于组合为复杂的批处理脚本,以自动化各种任务和操作。