2013-04-14 3 views
1

В следующем коде будут извлекаться файлы, измененные сегодня из SourceDirectory, и поместить их в папку FilesExtracted, а затем пакетный файл удалит остальные файлы в исходном каталоге. Но после этого все будет сделано, новый набор файлов будет скопирован из папки OriginalTestFiles и помещен в исходный каталог, но его не делает. Кто-нибудь думает, что это может быть из-за того, что пакетные файлы не остановили свои операции и все еще удаляют файлы в sourceDirectory, или есть еще одна проблема. Спасибо вам всем!Вызов пакетного файла для завершения его операций, прежде чем продолжить?

Imports System.IO 

Public Class frmExtractionator 

' Dim txtFiles1 As Control 
Dim sourceDirectory As String = "F:\CopierFolderforTestDriveCapstone" 
Dim archiveDirectory As String = "F:\FilesExtracted" 
Dim originalDirectory As String = "F:\OriginalTestFiles" 

Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click 

    Try 

     Dim txtFiles = Directory.EnumerateFiles(sourceDirectory) 

     If (Not System.IO.Directory.Exists(archiveDirectory)) Then 
      System.IO.Directory.CreateDirectory(archiveDirectory) 
     End If 


     For Each currentFileLoc As String In txtFiles 

      Dim fileName = currentFileLoc.Substring(sourceDirectory.Length + 1) 



      If (IO.File.GetLastWriteTime(currentFileLoc).ToString("MM/dd/yyyy") = DateTime.Now.ToString("MM/dd/yyyy")) Then 
       MessageBox.Show(currentFileLoc & " moved", "Moved Succesfully") 
       File.Move(currentFileLoc, Path.Combine(archiveDirectory, fileName)) 

      End If 

     Next 
    Catch eT As Exception 
     Console.WriteLine(eT.Message) 
    End Try 

    System.Diagnostics.Process.Start("F:\poop.bat") 


    Try 
     Dim txtFiles2 = Directory.EnumerateFiles(originalDirectory) 

     For Each currentFileLoc2 As String In txtFiles2 

      Dim fileName = currentFileLoc2.Substring(originalDirectory.Length + 1) 

      File.Move(currentFileLoc2, Path.Combine(sourceDirectory, fileName)) 

     Next 
    Catch eT As Exception 
     Console.WriteLine(eT.Message) 
    End Try 
End Sub 

End Class 

ответ

0

Вы можете получить process как переменные, как только вы запустите его и wait for it to exit:

Dim theProcess As Process = Process.Start("F:\poop.bat") 
theProcess.WaitForExit() 
+0

Совершенные. Исправлена ​​проблема. Большое спасибо! –

0

Попробуйте мониторинг процесса для завершения ...

'Start the process. 
Dim Proc = Process.Start("F:\poop.bat") 
'Wait for the window to finish loading. 
Proc.WaitForInputIdle() 
'Wait for the process to end. 
Proc.WaitForExit() 

... 
Смежные вопросы