我是编程的新手,所以我先生道歉。
因此,我正在尝试创建一个Win App,以便使用Robocopy更轻松地复制文件,最终完成其他任务。基本上我到目前为止是一个调用Sub Robcopy_EXE的Button。表单上有一个选项卡,其中包含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
答案 0 :(得分:0)
可能有更好的方法(甚至更好的方式!)来做到这一点。但是为了方便起见,你应该阅读一个定时器控件,并每秒执行一次,并检查文件的状态。并阅读最后一行并将其与您要查找的那一行进行比较。
答案 1 :(得分: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?您可以通过这种方式遍历已检查的项目。