找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20342|回复: 5

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

[复制链接]
发表于 2012-6-7 15:48:52 | 显示全部楼层 |阅读模式
本帖最后由 秋风·飞扬 于 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这个进程,不明真相(在调试的时候看见函数里面正常计算,但是在跳出函数之后赋值的时候就不行了)。

评分

参与人数 1PB +2 收起 理由
broly + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-6-7 16:06:00 | 显示全部楼层
编程风格太难看了,没耐心看完。
 楼主| 发表于 2012-6-7 20:36:15 | 显示全部楼层
回复 2# powerbat


    这次呢
发表于 2012-6-7 21:09:41 | 显示全部楼层
也发一个

  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
复制代码

评分

参与人数 1技术 +1 收起 理由
broly + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-6-8 11:58:37 | 显示全部楼层
我的第一个程序 第一个进程没有对齐,是不是piD是0 的缘故?
 楼主| 发表于 2012-6-8 12:10:25 | 显示全部楼层
我自问自答吧:开始要对process_space初始化,process_str_space=""
谢那个大笑提供的算法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:10 , Processed in 0.019417 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表