0

我对编程很陌生,所以我提前道歉。

因此,我正在尝试创建一个 Win 应用程序,以使使用 Robocopy 复制文件更容易,并最终完成其他任务。到目前为止,基本上我所拥有的是一个调用 Sub Robcopy_EXE 的按钮。表单上有一个带有 100 个复选框的选项卡,每个终端一个,由用户指定,还有一个复选框用于确定您是否需要来自 Robocopy 的详细报告。我还有一个文本框供用户输入站点 IP 地址的前 3 个八位字节。复选框和输入字段用于创建字符串“Terminal_input”,这是在 CMD 中运行 Robocopy 的内容。Robocopy 将其进度记录到我标记为“Status.txt”的文本文件中。这就是我所得到的。

此时我需要知道当前正在运行的更新何时完成才能进入下一个终端。我正在尝试不断阅读“Status.txt”文件并寻找“ENDED”一词以进入下一个终端。如果“ENDED”一词不存在,我想将 LABEL3 更新为“更新终端”

最终,我希望有一种方法可以使复选框#成为一个变量,随着它通过每个复选框#而递增,但是在我弄清楚如何检查要完成的 1 个终端之后,我会弄乱它。

就像我说的那样,我是编程新手,解决这个问题我很开心,但我对这个过程感到非常困惑,我会以最糟糕的方式去做:D

先谢谢了。

   Private Sub RoboCopy_EXE()
        Dim Robocopystart = "Robocopy C:\wtg\update \\"
        Dim Robocopymid = IP_Input.Text
        Dim Robocopyend = ".42\c$\wtg /E /copy:datsou /r:3 /w:20 /log+:status.txt /tee /ns /nc /nfl /"
        Dim Terminal_Input = Robocopystart + Robocopymid + Robocopyend
        If CheckBox10.Checked Then
            If RoboCopy_Detailed_Progress.Checked = True Then
                Shell("CMD.exe", vbNormalFocus)
                Threading.Thread.Sleep(400)
                SendKeys.SendWait(Terminal_Input)
                Label3.Text = items
            Else : RoboCopy_Detailed_Progress.Checked = False
                Shell("CMD.exe", vbNormalFocus)
                Threading.Thread.Sleep(500)
                SendKeys.Send("Test2")
            End If
        End If
    End Sub
4

2 回答 2

0

可能有更好的方法(甚至更好的方法!)来做到这一点。但是为了简单起见,您应该阅读有关计时器控件的内容,并每秒执行一次,并检查文件的状态。并阅读最后一行并将其与您要查找的行进行比较。

于 2012-04-10T18:21:59.307 回答
0

这些日志文件有多大?你可以按照以下方式做一些事情

While true
    Dim sr as new StreamReader(fileName)
    Dim contents as String = sr.ReadToEnd()
    sr.Close
    ForEach(string line in contents)
        if (line = "ENDED") then
            exit While
        Endif
    Next
    Thread.Sleep(1000)
Loop

(原谅任何语法错误,在我的脑海中写下,这些天我主要是 C#)

尽管您可能应该通过一些错误处理和退出循环的方法来加强它,这样它就不会永远循环(如果它出现 100 次退出错误?)。

此外,您应该将所有这些都放在 BackGroundWorker 上,这样它就不会锁定 UI(否则您会发现更新标签等问题)。

最后,不是 100 个复选框(糟糕!),也许是一个动态生成的带有选中项的列表框,或者一个类似的 DataGridView?您可以通过这种方式遍历检查的项目。

于 2012-04-12T00:00:19.647 回答