所以我最初是批量编写的,但是可用于ASCII的令牌数量太少,我猜它只允许26,我需要35个管道保留在我的输出文件中。
我是VBScript的新手,但基本上我希望它在原始文件中读取,做一些魔术来选择文件中的第一个字符到最后35个管道(以及两者之间的所有内容,即使在两个管道之间的空间是空白的)。然后将该文件输出到另一个文件,同时保留原始文件的完整性。
到目前为止,这是我的代码:
' **************
' ** Anthony B.
' **************
' ** PipeDropper
' **************
Dim WshShell, oExec
Set wshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objInputFile = objFSO.OpenTextFile("C:\Users\aborgetti\Desktop\Pipe Delimiter Project\oauthrn.cms",1)
Set objOutputFile = objFSO.OpenTextFile("C:\Users\aborgetti\Desktop\Pipe Delimiter Project\output.txt",8,True)
Do until objInputFile.AtEndofStream
strcomputer = objInputFile.ReadLine
strCommand = "dsquery computer -name " & strComputer
Set oExec = WShShell.Exec(strCommand)
If (oExec.Status = 0) Then
If (oExec.stdOut.ReadAll = "") Then
objOutputFile.WriteLine(strComputer)
End If
End If
Loop
objInputFile.Close
objOutputFile.Close
问题
这一行Set oExec = WShShell.Exec(strCommand)
说它无法找到指定的文件......所以我不确定为什么那么糟糕。
然后我从哪里开始?
提前致谢!
更新
以下是文件中的一行,通常为10-100次......
RE|922124607|1 |KimV|HOS99999|Y|N|2014-04-02 15:49:14|2014-04-02 15:49:58|Y|2014-04-02 00:00:00|R9815|01|1 |2014-04-02 00:00:00|493.90||||2016-04-02|N||HOS99999|||06|PROV99999|2014-04-02 15:48:20|2014-04-02||R9815|2014-04-02 00:00:00|2016-04-02 00:00:00||||||98960|06 |08|6|6|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||02|||||||Z4|2014-04-02 15:49:58|04|001|01|***|PMER|***|***|2013-08-01||||||||||||||||||||||||||||||||||||||||
最后一次01之后的所有事情都需要......所以:
|***|PMER|***|***|2013-08-01||||||||||||||||||||||||||||||||||||||||
应该是:
Start of line ... |***|PMER|***|***|2013-08-01
答案 0 :(得分:2)
我怀疑你的问题
有两种方法可以获得错误424"需要对象"对于像
这样的陈述Set a = b.c(d)
第一个(也是显而易见的):b不是一个对象。第二个:b.c(d)的返回值不是一个对象。
你的代码浓缩了:
Set wshShell = CreateObject("WScript.Shell")
strCommand = "hostname"
Set oExec = WShShell.Exec(strCommand)
WScript.Echo oExec.Stdout.Readline()
运行没有问题。稍有改变:
Set wshShell = CreateObject("WScript.Shell")
strCommand = "hostname"
Set oExec = WShShel1.Exec(strCommand)
WScript.Echo oExec.Stdout.Readline()
以"对象需要"失败。你发现了错字吗?为什么不让" Option Explicit"帮助你:
Option Explicit
Dim wshShell : Set wshShell = CreateObject("WScript.Shell")
Dim strCommand : strCommand = "hostname"
Dim oExec : Set oExec = WShShel1.Exec(strCommand)
WScript.Echo oExec.Stdout.Readline()
输出:
...\22871772.vbs(4, 18) Microsoft VBScript runtime error: Variable is undefined: 'WShShel1'
如果您确定没有拼写错误导致问题,您必须检查变量是否在初始化和使用之间更改/分配:
Option Explicit
Dim wshShell : Set wshShell = CreateObject("WScript.Shell")
Dim strCommand : strCommand = "hostname"
'...
wShSheLL = "oops"
'...
Dim oExec : Set oExec = WShShell.Exec(strCommand)
WScript.Echo oExec.Stdout.Readline()
再次失败,错误424。
更新pipes:
我选择Split()(计数设置为你想要的#pipes + 1)来处理尾随管道:
>> n = 8 + 1
>> s = "|abc123|1*|004|**gobbligook|001|%|2014-01-01|||||||||||||"
>> a = Split(s, "|", n) ' <-- 9th elm get all the junk
>> WScript.Echo UBound(a)
>> a(n - 1) = "" ' <-- zap the junk
>> WScript.Echo Join(a, "|")
>>
8
|abc123|1*|004|**gobbligook|001|%|2014-01-01|
要删除|&#39; s的尾部,RegExp似乎更合适:
>> set r = New RegExp
>> r.Pattern = "\|+$"
>> WScript.Echo r.Replace(s, "")
>>
|abc123|1*|004|**gobbligook|001|%|2014-01-01