1

こんにちは、スクリプトの天才です。私はまだ VBScript を学んでおり、鞭打ちの準備は万端です。ですから、方向性がある限り、あなたが私に求めたものは何でも研究します。

提案された質問を検索したところ、必要なものが見つかりましたが、「クローズ」されており、同様の他の質問を探すためのリンクがありませんでした.

これが私が達成しようとしていることです。テキスト ファイルを取得し、データを配列に読み込む必要があります (正しい場合)。このデータには、PC 名、PC の場所が含まれています。約 2000 レコード (または行) を運ぶので、それぞれを変数にロードする必要があります。PC 名にはスペースを入れませんが、PC の場所にはスペースを入れることができます。例のように:

Laptop, my bathroom 
Desktop, kitchen 

WshShell.SendKeysこの情報を変数にロードして、キー コマンドを使用して渡したいと考えています。2つのテキストファイルで「ちょっと」機能させ、そのデータをExcelシートに送信することができました(タブを使用して入力できるため)。しかし、1 対 1 で一致するのではなく、1 対 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} ....最後まで。

4

1 に答える 1

3

単一のループと辞書を使用して、2 つの入力ファイルをデータ構造にロードします (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 に答える