Board logo

标题: [问题求助] [已解决]VBS脚本如何实现字符对齐输出? [打印本页]

作者: 秋风·飞扬    时间: 2012-6-7 15:48     标题: [已解决]VBS脚本如何实现字符对齐输出?

本帖最后由 秋风·飞扬 于 2012-6-8 12:10 编辑
  1. strComputer= "."
  2. Set system_process = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
  3. Set process_get= system_process.instancesOf("win32_process")
  4. For Each process_infomation in process_get
  5.        length process_infomation.name,22
  6.        process_name_space=str_space
  7.        length process_infomation.processid,10
  8.        process_id_space=str_space
  9.        i=i+1
  10.        If i=1 Then
  11.                      str= str &  process_infomation.csname & "   "  & process_infomation.name & process_name_space & process_infomation.processid & process_id_space
  12.        Else
  13.                      str= str & process_infomation.csname & "   " &  process_infomation.name & process_name_space & process_infomation.processid  & vbCr
  14.                      i=0
  15.        End If
  16.        process_name_space=""
  17.        process_id_space=""
  18. Next
  19. Set system_process= Nothing
  20. Set system_process_infomation= Nothing
  21. WScript.Echo str
  22. Function length(a,b)
  23.            process_space=""
  24.            c = Len (a)
  25.            process_space  =  b- c
  26. For  j=0 To process_space
  27.            str_space = str_space & " "
  28. Next
  29. End Function
复制代码
问题:只有一个进程不能对齐,就是PID为0 的system idle process这个进程,不明真相(在调试的时候看见函数里面正常计算,但是在跳出函数之后赋值的时候就不行了)。
作者: powerbat    时间: 2012-6-7 16:06

编程风格太难看了,没耐心看完。
作者: 秋风·飞扬    时间: 2012-6-7 20:36

回复 2# powerbat


    这次呢
作者: powerbat    时间: 2012-6-7 21:09

也发一个
  1. strComputer = "."
  2. Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
  3. Set colPS = wmi.InstancesOf("Win32_Process")
  4. For Each ps in colPS
  5.     i = (i+1) mod 2
  6.     If i Then
  7.         str= str & FMT(ps.CSName, ps.Name, ps.ProcessId)
  8.     Else
  9.         str= str & " | " & FMT(ps.CSName, ps.Name, ps.ProcessId) & vbCrLf
  10.     End If
  11. Next
  12. WScript.Echo str
  13. Function FMT(s1, s2, s3)
  14.     CONST MAX_LEN = 38
  15.     CONST PID_LEN = 5
  16.     Dim s
  17.     s = s1 & "  " & s2
  18.     If Len(s) > (MAX_LEN - PID_LEN - 1) then
  19.         'name与pid之间至少要一个空格,所以再减1
  20.         s = Left(s, MAX_LEN - PID_LEN - 1)
  21.     End If
  22.     s = s & String(MAX_LEN - PID_LEN - Len(s), " ") & s3
  23.     s = s & String(MAX_LEN - Len(s), " ") '后面填充空格
  24. FMT = s
  25. End Function
复制代码

作者: 秋风·飞扬    时间: 2012-6-8 11:58

我的第一个程序 第一个进程没有对齐,是不是piD是0 的缘故?
作者: 秋风·飞扬    时间: 2012-6-8 12:10

我自问自答吧:开始要对process_space初始化,process_str_space=""
谢那个大笑提供的算法




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2