嘿有脚本天才,请注意我还在学习VBScript,我已经完全准备好了。所以,只要我有指示,我就会研究你问我的任何事情。
我搜索了建议的问题,我找到了一个可能是我需要的东西,但它是“关闭”,没有链接去寻找其他类似的东西。
这是我想要完成的。我需要获取一个文本文件并将数据加载到一个数组中(如果这是正确的)。此数据包含Pc名称,Pc位置。它将携带大约2000条记录(或行),我需要将每个记录加载到一个变量中。 PC名称没有空格,但Pc位置可能。例如:
Laptop, my bathroom
Desktop, kitchen
我想将此信息加载到我可以使用WshShell.SendKeys
的变量中并传递关键命令。我已经能够使用两个文本文件“有点”工作并将该数据发送到Excel工作表(因为它可以使用tab并输入)。但是它不是一对一匹配,而是匹配一个到10.因此,如果PC.txt有10个PC名称,而Location.txt上有10个位置(按行顺序匹配每个文件),我的脚本会给我100个结果,不是10.所以,我知道我这样做是错的,需要一些指导。这是我失败的尝试,我准备好了笑声......
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile1 = objFSO.OpenTextFile("C:\pc.txt", ForReading1)
Set objFile = objFSO.OpenTextFile("C:\Location.txt", ForReading)
'test is my excel file title test, this will allow tabs and enters
WshShell.AppActivate "test"
Const ForReading1 = 1
Dim arrFileLines1()
i = 0
Do Until objFile1.AtEndOfStream
Redim Preserve arrFileLines1(i)
arrFileLines1(i) = objFile1.ReadLine
i = i + 1
Loop
objFile1.Close
Const ForReading = 1
Dim arrFileLines()
i = 0
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
For Each strLine1 in arrFileLines1
For Each strLine in arrFileLines
WshShell.SendKeys strLine1
WshShell.SendKeys "{TAB}"
WshShell.SendKeys strLine
WshShell.SendKeys "{ENTER}"
Next
Next
我一直在研究如何根据“,”来分割这些数据,但是我需要将它变成一个我可以使用的变量并重复击键,如:
笔记本电脑{TAB}我的厨房{ENTER} 桌面{TAB}浴室{ENTER} ........... ETC直到最后。
答案 0 :(得分:3)
我会使用单个循环和dictionary将两个输入文件加载到数据结构中(假设PC名称是唯一的)。
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set names = fso.OpenTextFile("C:\pc.txt", ForReading)
Set locations = fso.OpenTextFile("C:\Location.txt", ForReading)
Set computers = CreateObject("Scripting.Dictionary")
Do Until names.AtEndOfStream Or locations.AtEndOfStream
computers.Add names.ReadLine, locations.ReadLine
Loop
names.Close
locations.Close
这将创建一个包含名称/位置对的字典,可以像这样访问:
For Each key In computers
WScript.Echo key & " is in " & computers(key)
Next
我建议在将数据传递给其他应用程序时避免使用SendKeys
,因为至少可以说,该功能的使用往往是不稳定的。根据目标应用程序,可能有更好的方法,例如,如果应用程序公开可以从VBScript控制的COM对象。
如果目标应用程序不能像那样使用RC,你可能最好使用AutoIt,正如其他人似乎已经建议的那样。