1

嘿,脚本天才们,请注意我还在学习 VBScript,我已经做好了充分的准备。所以,只要我有方向,我会研究你要求我做的任何事情。

我搜索了建议的问题,发现一个可能是我需要的,但它已“关闭”,没有链接去寻找另一个喜欢的问题。

这是我想要完成的。我需要获取一个文本文件并将数据加载到一个数组中(如果这是正确的)。此数据包含 PC 名称、PC 位置。它将携带大约 2000 条记录(或行),我需要将每条记录加载到一个变量中。PC 名称将没有空格,但 PC 位置可以。像例子:

Laptop, my bathroom 
Desktop, kitchen 

我想将此信息加载到我可以使用WshShell.SendKeys并传递关键命令的变量中。我已经能够使它“有点”处理两个文本文件并将该数据发送到 Excel 工作表(因为它可以使用制表符并输入)。但不是一对一匹配,而是一对一匹配。因此,如果 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} ......等到最后。

4

1 回答 1

3

我将使用单个循环和字典将两个输入文件加载到数据结构中(假设 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,正如其他人似乎已经建议的那样。

于 2012-12-17T21:44:48.387 回答