批处理程序中的“多线程”处理代码_DOS/BAT

如下内容将简单举例,在WINDOWS下使用批处理做多进程并发,以达到“多线程”的效果。

  例:需要PING 192.168.0.1到192.168.0.254的所有IP地址,并将是否能PING通的结果输出到log.txt

  实现如下:

rem 主程序.bat,只需一行代码,调用checkip.bat,经测试,CPU2.6G MEM1G可并发40个左右的进程

复制代码 代码如下:

for /l %%i in (1,1,254) do (start /min cmd /c checkip.bat 192.168.0.%%i)

rem checkip.bat内容如下:

复制代码 代码如下:

ping %1 -n 1
if %errorlevel%==0 (echo %1 alive>>log.txt) else (echo %1 dead>>log.txt)

根据以上资料,我自己进行了修改,只需要一个主程序就能执行代码:
程序进化

复制代码 代码如下:

@echo off
if "%1"=="" (for /l %%a in (1,1,100) do (start /min cmd /c %0 10.120.6.%%a&ping 127.0.0.1 -n 1>nul))
if not "%1"=="" (ping -a %1 -n 1|find "reply" /i&&echo alive %1>>LogIP.txt||echo dead %1>>LogIP.txt)

为了使代码过长,方便阅读,我分成了两行,其实一行就可以完成的。你可以自己修改,直接在cmd窗口运行的语句,如果你写不出来,可以再来问我。
程序知识点说明:

1.判断参数是否为空
2.使用start命令,请注意和goto和call的区别
3.使用ping做延迟
4.使用find命令判断IP是否开机状态并记录到日志中
5.提示信息禁止输出。

程序再进化
为了每次执行后清空日志文件,修改代码如下:

复制代码 代码如下:

@echo off
if "%1"=="" (
if exist "logip.txt" del LogIp.txt
for /l %%a in (1,1,100) do (start /min cmd /c %0 10.120.6.%%a&ping 127.0.0.1 -n 1 1>nul))
if not "%1"=="" (ping -a %1 -n 1|find "reply" /i&&echo alive %1>>LogIP.txt||echo dead %1>>LogIP.txt)

当然,如果你想使用两个bat文件,可以直接把两行代码分别写在两个文件中,每个文件写一行也可以。

说明:

1.在for语句的最后,有ping 127.0.0.1 -n 1 1>nul,-n 1表示ping1次,后面的1>nul表示正常信息重定向禁止输出,具体博客内容其他文章句柄重定向。
2.语句if exist "logip.txt" del LogIp.txt可以使用 echo [%date% %time%]>LogIp.txt 来代替,它们两句的作用是相同的,具体使用就看个人用法了
以上是自己的一些心得,怕自己忘记,记录在此。

补充参考 jack_Meng

时间: 2024-09-10 20:57:46

批处理程序中的“多线程”处理代码_DOS/BAT的相关文章

批处理中的预处理实现代码_DOS/BAT

转载自 nxhujiee最终编辑 LJ_SunTB批处理中的[预处理] ━━━━━━━━━━━━━━━━━━━━━━━━━━ 如果你对脱字字符"^"的处理机制比较熟悉那么可以接着阅读,否 则请先参考脱字字符的相关文章. 一.预处理究竟要做什么? 根据我的经验,预处理要做的是变量值的替换和特殊符号的处理.究竟先执行哪个操作呢,我认为要先进行变量值的替换.理由有三: 1. 从逻辑上看 set var=2&echo %var% 类似于这样的语句,如果说先进行特殊符号处理的话,势必要先

如何让批处理程序启动的时候最小化_DOS/BAT

批处理隐藏运行 隐藏批处理本身 复制代码 代码如下: @echo off if "%1"=="h" goto begin start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit :begin ::以下为正常批处理命令,不可含有pause set/

批处理之家发现的用批处理实现的系统类应用代码_DOS/BAT

批处理之家发现的用批处理实现的系统类应用代码 比如菜单的排序,就用到不一样的方法 还有输出的方式等...... 大家用了就知道 写的不好.还请大家多多指教. 由于代码过长,请下载附件. 回帖是美德,下了就要顶啊   bat......右键bat LJ....清理LJ文件  ZCB...查看启动项     JC......查看进程 MIM...通密码管理  IP....查看IP配置    sys.....系统信息 dir.....诊断工具  JH....组策略结集    zcb.......注册表

使用批处理禁用(启用)组策略的代码_DOS/BAT

利用批处理禁用(启用)组策略 regsvr32 /s /u gpedit.dll 禁用 regsvr32 /s gpedit.dll 启用 单单使用这命令依然可以禁止使用组策略,但这样导致的后果就是- 这时候运行的组策略基本上只是个空壳了!利用下面的批处理将完美解决此类问题! 将下面这些代码编成BAT批处理文件,这段是禁用组策略的命令 复制代码 代码如下: @echo off regsvr32 /s /u fde.dll regsvr32 /s /u gpedit.dll regsvr32 /s

批处理重命名特殊文件名的代码_DOS/BAT

一b!a!1235@_ s%#8i 三 c.rar h^e12 0~%l%!p!@. s321-的文件.txt %o%%% !O!ffi9~ ce$- Wor8d29 文档.docx 重命名.bat 图1: 要求运行批处理将这三个文件文件名中的数字.汉字.特殊字符全部(含空格)去掉,而重命名为只含字母的文件,但 后缀名不能更改,同时批处理自身名字不能更改,重命名后: basic.rar helps.txt oOfficeWor.docx 重命名.bat 图2: 要求:代码简洁.通用.效率不至于太

批处理判断是否特殊字符的实现代码_DOS/BAT

批处理判断是否为特殊字符 用于判断输入的一个字符是否为"&^>中的符号.注意,匹配字符串中的空格不可省略! 批处理代码: 复制代码 代码如下: @echo offset Input=S set /p Input=Please input a number:set Filter=S%Input%echo off >nul 2 >nul rem replace " with >set Filter=%Filter:"=>% echo %Fil

批处理处理文本文件去重复实现代码_DOS/BAT

最近需要将重复的内容去掉,所以就想到了使用bat或vbs实现,没想到网上已经有人写好了,测试也正好学习一下 使用方法:把文本拖到批处理上就行了... @echo off :: Code by oicu#lsxk.org 2007/11/29 rem chcp 437>nul :: 看情况使用,utf-8编码的文件不能少了chcp命令,一般无需使用, :: 但无论是否使用都不支持utf-16的文件. :: pushd "%~dp1" :: 如果不用pushd和popd,文件都要用绝

用DOS批处理实现建立文件夹的代码_DOS/BAT

题目:用DOS批处理实现建立文件夹 要求:1要求建立文件名格式为"YYYY1-MM1-DD1至YYYY2-MM2-DD2"的文件夹      2其中YYYY1-MM1-DD1是今天的日期;YYYY2-MM2-DD2是四天后的日期 解答: 复制代码 代码如下: @echo off  rem 比较运算符:  EQU - 等于  NEQ - 不等于   LSS - 小于   LEQ - 小于或等于   GTR - 大于   GEQ - 大于或等于  rem 取模运算符:  %% DOS的取模

用批处理重命名文本文件名的代码_DOS/BAT

实现代码1@echo off&setlocal enabledelayedexpansion for /f "delims=" %%a in ('dir/b *.txt') do (    set /a n+=1    if not exist "!n!.txt" (ren "%%a" "!n!.txt") else call :loop "%%a" ) pause&exit :loop