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