使用VBScript解析unzip -l的输出

时间:2015-01-16 15:42:13

标签: parsing vbscript

我正在尝试编写一些VBScript来解析从命令行调用unzip -l时生成的输出。具体来说,我想知道修改日期和此输出中每个文件的名称。

输出如下:

  Length      Date    Time    Name
---------  ---------- -----   ----
    62208  01/12/2015 08:35   some/file/path/A file name.txt
    61440  01/12/2015 09:07   some/file/path/A file name2.txt

如何在VBScript中解析此问题,以便将文件名和日期/时间存储在变量中?我可以看到一些问题。首先,我不能只用空格解析,因为修改的文件名和日期有空格。其次,如果文件大小太大,则整个行都会移位。这使我无法通过角色位置拉出我需要的信息。

1 个答案:

答案 0 :(得分:1)

使用正则表达式查找由一个或多个空格分隔的数据:

>> s = "    62208  01/12/2015 08:35   some/file/path/A file name.txt "
>> WScript.Echo qq(s)
>> s = Trim(s)
>> WScript.Echo qq(s)
>> Set r = New RegExp
>> r.Pattern ="^(\d+)\s+(\S+)\s+(\S+)\s+(.+)$"
>> Set m = r.Execute(s)
>> WScript.Echo qq(m(0).Submatches(0)), qq(m(0).SubMatches(3))
>>
"    62208  01/12/2015 08:35   some/file/path/A file name.txt "
"62208  01/12/2015 08:35   some/file/path/A file name.txt"
"62208" "some/file/path/A file name.txt"

(qq()只是双引号字符串;如果需要文件名,请应用FileSystemObject的.GetFileName方法)

Spoon feed:

Option Explicit

Function qq(s) : qq = """" & s & """" : End Function

Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")

Dim s : s = "    62208  01/12/2015 08:35   some/file/path/A file name.txt "
s = Trim(s) ' no leading/trailing spaces
Dim r : Set r = New RegExp
r.Pattern = "^(\d+)\s+(\S+\s+\S+)\s+(.+)$"
Dim m : Set m = r.Execute(s)
WScript.Echo CLng(m(0).SubMatches(0))
WScript.Echo CDate(m(0).SubMatches(1)) ' german locale!
WScript.Echo qq(m(0).SubMatches(2))
WScript.Echo qq(oFS.GetFileName(m(0).SubMatches(2)))

输出:

cscript 27987576.vbs
62208
12.01.2015 08:35:00
"some/file/path/A file name.txt"
"A file name.txt"