0

私はプログラミングに非常に慣れていないので、事前にお詫び申し上げます。

そのため、Robocopy を使用してファイルを簡単にコピーし、最終的には他のタスクを作成する Win アプリを作成しようとしています。基本的に、これまでのところ、Sub Robcopy_EXE を呼び出すボタンがあります。フォームには、ユーザーが指定する 100 個のチェック ボックス (端末ごとに 1 つずつ) を備えたタブと、Robocopy からの詳細なレポートが必要かどうかを決定するチェック ボックスがあります。ユーザーがサイトの IP アドレスの最初の 3 オクテットを入力するためのテキスト ボックスもあります。チェックボックスと入力フィールドは、CMD で Robocopy を実行する文字列「Terminal_input」を作成するために使用されます。Robocopy は、「Status.txt」というラベルを付けたテキスト ファイルに進行状況を記録します。それは私が得た限りです。

現時点では、次のターミナルに進むために、現在実行中の更新がいつ完了したかを知る必要があります。「Status.txt」ファイルを継続的に読み取り、「ENDED」という単語を探して次のターミナルに進むようにしています。「ENDED」という単語が存在しない場合、LABEL3を「更新中の端末」に更新したい

最終的には、checkbox# を、各チェックボックス# を進むにつれて増加する変数にする方法が必要ですが、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

これらのログ ファイルのサイズはどれくらいですか? あなたはの線に沿って何かをすることができます

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回行った場合、エラーで終了しますか?)。

さらに、UI をロックしないように、すべてを BackGroundWorker に配置する必要があります (そうしないと、ラベルの更新などの問題が発生します)。

最後に、100 個のチェックボックス (うーん!) の代わりに、チェックされたアイテムを含む動的に生成されたリストボックスか、または同様の DataGridView を使用しますか? チェックされたアイテムをそのように繰り返すことができます。

于 2012-04-12T00:00:19.647 に答える
0

これを行うには、おそらくより良い方法 (さらにはより良い方法!) が存在する可能性があります。しかし、簡単にするために、タイマー コントロールについて読み、1 秒に 1 回実行し、ファイルの状態を確認する必要があります。最後の行を読んで、探している行と比較してください。

于 2012-04-10T18:21:59.307 に答える