标题: [网络连接] [已解决]各位高手帮我完善“ping 多IP 网络诊断批处理脚本” [打印本页]
作者: ly_16 时间: 2023-2-5 14:39 标题: [已解决]各位高手帮我完善“ping 多IP 网络诊断批处理脚本”
求助各位高手,帮我完善“ping 多IP 网络诊断脚本”,想要实现1.诊断结束中的丢包数与平均时间间距加大,与上面标题对齐;2.想把屏显诊断日志同时也保存一份在bat文件同目录下以当前时间命名的txt文件;3.IP地址显示加上名称备注,例如 192.168.88.5 张三电脑;4.可不可多IP并行拼,速度快些。谢谢各位帮助!!!- @echo off
- echo .
- echo [!] 网络诊断中……
- echo .
- @echo off
- echo 日期 时间 地址 丢包数 平均时间
- (for /f "usebackq delims=" %%a in ("ip.txt") do (
- set /p"=%date:~0,-3% %time:~0,-3% %%a--->"
- for /f "tokens=4 delims==(" %%i in ('ping -n 4 %%a^|findstr /i "丢失 平均 lostavera ge"') do set /p"=%%i "
- echo;
- ))<nul
- echo .
- echo [!] 网络诊断结束,已生成诊断日志。
- echo .
- pause
复制代码
作者: ly_16 时间: 2023-2-8 12:38
回复 1# ly_16
感谢aloha20200628回复,现日志已经可以以时间命名另存。- @echo off
- echo .
- echo [!] 网络诊断中……
- echo .
- @echo off
- set "outF=%date% %time:~0,-3%.txt"
- set "outF=%outF::='%"
- set "outF=%outF:/=-%"
- (echo 日期 时间 地址 丢包数 平均时间
- for /f "usebackq delims=" %%a in ("ip.txt") do (
- set /p"=%date:~0,-3% %time:~0,-3% %%a--->"
- for /f "tokens=4 delims==(" %%i in ('ping -n 4 %%a^|findstr /i "丢失 平均 lostavera ge"') do set /p"=%%i "
- echo;
- ))<nul>"%outF%"
- echo .
- echo [!] 网络诊断结束,已生成诊断日志。
- echo .
- pause
复制代码
作者: ly_16 时间: 2023-2-8 12:40
回复 2# ly_16
现还有几个需求也向大家请教,1.诊断结果也想同时显示在命令窗口; 2.诊断结果丢包数与平均时间数值之间间隔大些,平均时间数值右移与上标题对齐;3.想方便知道哪 IP 对应设备名称,在 IP 表中添加说明,在执行时不认?
作者: WHY 时间: 2023-2-8 20:09
本帖最后由 WHY 于 2023-2-9 10:39 编辑
Test.bat,保存为ANSI编码- @if(0)==(0) echo off
- cd /d "%~dp0"
- echo;[!] 网络诊断中……
- type ip.txt | cscript //nologo //e:jscript "%~f0"
- echo;[!] 网络诊断结束,已生成诊断日志。
- pause & exit
- @end
-
- var max = [0, 0]; //地址列、丢包列最大字符数
- var arr = [[], [], [], []]; //日期时间、地址、丢包数、平均时间共4列
- var out = []; //数组,输出到文件
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- var oShell = new ActiveXObject('WScript.Shell');
-
- function formatDateTime(d){
- var yy = d.getFullYear();
- var MM = ('' + (101 + d.getMonth())).substr(1);
- var dd = ('' + (100 + d.getDate())).substr(1);
- var HH = ('' + (100 + d.getHours())).substr(1);
- var mm = ('' + (100 + d.getMinutes())).substr(1);
- var ss = ('' + (100 + d.getSeconds())).substr(1);
- return yy + '/' + MM + '/' + dd + ' ' + HH + ':' + mm + ':' + ss;
- }
-
- while(!WSH.StdIn.AtEndOfStream){
- var dtm = formatDateTime(new Date()); //日期格式化
- var strLine = WSH.StdIn.ReadLine(); //IP地址
- var match = strLine.match(/(?:\d+\.){3}\d+/);
- if(!match) continue;
- var oExec = oShell.Exec('ping -n 4 ' + match[0]); //调用ping
- while(oExec.status < 1) WSH.Sleep(100);
- var str = oExec.StdOut.ReadAll();
- var match1 = str.match(/(?:丢失|Lost) = (\d+)/i);
- var match2 = str.match(/(?:平均|Average) = (\d+m?s)/i);
- var lost = '--->' + (match1 ? match1[1] : ' '); //丢包数
- var aver = match2 ? match2[1] : ' '; //平均时间
- arr[0].push(dtm);
- arr[1].push(strLine);
- arr[2].push(lost);
- arr[3].push(aver);
- var s1 = strLine.replace(/[^\x00-\xFF]/g, '..'); //非ASCII字符改成..
- max[0] = s1.length > max[0] ? s1.length : max[0]; //地址列最大字符数
- max[1] = lost.length > max[1] ? lost.length : max[1]; //丢包列最大字符数
- }
-
- var space1 = '', space2 = '';
- for(var i=0; i<max[0]; i++) space1 += ' '; //地址列后面空格数
- for(var i=0; i<max[1]; i++) space2 += ' '; //丢包列后面空格数
- var title = '日期 时间 ';
- title += '地址' + space1;
- title += ('丢包数' + space2).replace(/\s{2}$/, '');
- title += '平均时间';
- out.push(title);
- WSH.Echo(title);
-
- for(var i=0; i<arr[0].length; i++){
- var str = arr[0][i] + ' '; //日期时间列
- arr[1][i] += space1; //地址列补齐空格
- var len = arr[1][i].replace(/[^\x00-\xFF]/g, '..').length - max[0];
- str += arr[1][i].replace(
- new RegExp('\\s{' + len + '}$'),
- function(){return ' ';}
- );
- str += (arr[2][i] + space2).substr(0, max[1]+4); //丢包列补齐空格
- str += arr[3][i]; //平均时间列
- out.push(str);
- WSH.Echo(str);
- }
-
- var name = formatDateTime(new Date()).replace(/[\/:\s]/g, '') + '.log';
- fso.OpenTextFile(name, 2, true).Write(out.join('\r\n')); //保存
复制代码
作者: ly_16 时间: 2023-2-9 00:30
回复 4# WHY
所有功能都实现了,感谢大神!!!
作者: ly_16 时间: 2023-2-9 07:48
回复 4# WHY
请教一下,jscript代码运行时,会提示“Microsoft JScript 运行时错误:'MZP'未定义”不知如何解决?
作者: WHY 时间: 2023-2-9 10:38
回复 6# ly_16
脚本里面没有MZP变量。如果你需要修改脚本,首先要保证能看懂脚本。
作者: ly_16 时间: 2023-2-9 11:05
回复 7# WHY
代码太深奥了,不敢乱动,要转成EXE可执行文件如何操作?
作者: WHY 时间: 2023-2-9 13:21
1.这个问题与本主题毫无关系;
2.不要试图挑战我的耐心。
作者: ly_16 时间: 2023-2-9 15:51
回复 9# WHY
再次感谢大神热心帮助!!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |