本帖最后由 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')); //保存
复制代码
|