阅读文本文件中途中断

时间:2013-09-09 01:55:29

标签: vbscript

已解决:我所要做的只是为循环添加一个睡眠。

我有一个文本文件,其中包含需要登录的用户名和密码。我正在尝试制作一个VBScript文件来自动执行此过程。文本文件的语法是

    username
    password
    username
    password
    etc etc

并且共有738行。

我目前的代码是

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\Users\Jacob\Desktop\logins.txt", ForReading)
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Const ForReading = 1
    Dim strUsername
    Dim strPassword
    wshshell.AppActivate "Notepad"
    Do Until objFile.AtEndOfStream
    strUsername = objFile.ReadLine
    strPassword = objFile.ReadLine
    wshshell.sendkeys strUsername
    wshshell.sendkeys "~"
    wshshell.sendkeys strPassword
    wshshell.sendkeys "~"
    Loop

我只是通过将其写入空白文本文件来确保它的工作原理。 (稍后记事本将被登录可执行文件替换,我已经知道该部分有效)。

代码正常工作,直到它到达文本文件的第221行,然后它才会中断。它导出一堆随机垃圾,然后停止。

非常感谢任何帮助。

编辑: 这是写入文本文件末尾的垃圾文本。你可以看到仍然有遗留物应该出现。

。[编辑用户名] .22bssddd2222ent000.2wlllkarsstt00 .... 000h8b6b99b88uub2

..... ttttte0000mp00 ... gh.rrlll00225..gbu ..... 0022sdg [编辑密码] .proeflussssddd ..22le.pu6 .... 225500s.gl.iteee.55.uuu.hmadttn..0dl

tsssssbeeee0000nsssss0000000ssssdssdbuuuz22dddd000buuu.jj2222 B4 .... 3 .j00000000b

收率

bb.ddddssgg.2222ssgg05uuudbeeeeen ...... hh00222l11 ..... tdddd.nn

00000 ll0ssssau0s000ssssss bbddddlll.ttttl ......小号 是

.o222

b.ddddddutttt ll000buc11e000000utttt bbb.eeeeee0000seeeee5

mmssss000000unnnttttnnn bb000..s.dsssssss.fa000000 2 ..... k000.4tnnn ..... bbbseeeu

.n.2te ....小号 7e9bbmv00000000tttteeee.mttseetnn2222222r0000000000.u.ddd0000000.111ddddge11111ssddddoo000.ssssssnnnn.uutnnn772 .bbg ....... 66teeb000000ee1114lrd00002222nsp

1 个答案:

答案 0 :(得分:1)

你可以尝试两件事......

  1. 在致电WScript.Sleep 100后,尝试在循环中添加对SendKeys的来电。
  2. 您可以尝试将脚本只是将用户名和密码写入另一个文件,而不是使用AppActivateSendKeys。这将排除问题是否由SendKeys引起。无论如何,使用SendKeys和这么多数据相当危险。如果记事本获得焦点并且键开始被定向到另一个应用程序时出现任何问题,那么它可能会产生一些非常非常无意的结果。
  3. 以下是要写入文本文件的脚本的修改副本

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("logins.txt", ForReading)
    Set objFile2 = objFSO.OpenTextFile("logins2.txt", ForWriting, true)
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    Const ForReading = 1, ForWriting = 2
    Dim strUsername
    Dim strPassword
    
    Do Until objFile.AtEndOfStream
        strUsername = objFile.ReadLine
        strPassword = objFile.ReadLine
        objFile2.Write strUsername & vbCrLf
        objFile2.Write strPassword & vbCrLf
    Loop
    

    还有几个风格笔记:

    • 在使用它们之前定义常量,最好是在脚本的最顶部。这使您和其他人不必在以后捕获它们或认为它们尚未定义。在这样的小脚本中,这不是一个大问题,但如果你的脚本开始变大,它可能会让你头疼。
    • Dim一致。您定义了strUsernamestrPassword,但未定义objFSOobjFileWshShell。我总是建议使用Option Explicit强制您在使用之前定义变量。它可以帮助您避免拼写错误,从长远来看可以为您节省很多麻烦。