Page 1 of 1

xcopy front end help

Posted: Mon Jul 31, 2006 1:49 pm
by wolfwood2x
I have been working on a simple front end for the xcopy utility. The problem I keep running into is that when i call

Code: Select all

runProgram(Command$ , Options$, "")
Where Command = c:\windows\system32\xcopy.exe
and Options = source$ destination$ /D /Y
If I debug options it looks like "c:\source\ c:\targ\ /D /Y"

it doesnt seem to work. However, if I set options = "/?" the xcopy utility fires up without a hitch and displays the help text.
Anyone know what I am doing wrong?

Posted: Mon Jul 31, 2006 2:46 pm
by blueb
Seems to me that you might need to use cmd.exe with xcopy (I think xcopy may be DOS based)

SHCopy is the windows version of xcopy.

See my post (sample code)
http://www.purebasic.fr/english/viewtopic.php?t=11583


--blueb

Posted: Mon Jul 31, 2006 4:43 pm
by netmaestro
Using my own folder, the _fax folder does not exist before the copy:

Code: Select all

RunProgram("xcopy.exe", "d:\_tax\*.* d:\_fax\*.* /D /Y", GetCurrentDirectory())
Works perfectly here. Without the *.*'s it was abending on an invalid directory error.

[edit] Abending. :roll: Datacenter talk!

Re: xcopy front end help

Posted: Wed Nov 25, 2015 4:55 am
by collectordave
Some Code that might help

First the module

Code: Select all

DeclareModule Backup
  
  Declare Start(TopFromFolder.s,TopToFolder.s)
  
EndDeclareModule

Module Backup
  
  Global TopFromFolder.s,TopToFolder.s
  
  Global Folders.i = 0,Files.i = 0, CopyDone.i = 0
  Global FromFolder.s,ToFolder.s,ProgressBar_0.i
  
  Procedure CheckEvents()
  Repeat
    event = WindowEvent()

    Delay(1)
    
Until Event = 0

EndProcedure
  
  Procedure CountObjects(FromFolder.s)
  
  Define ExamFolder.i ;Recursive so needs new each time procedure is run

  Define TopFld.s = FromFolder ;Recursive so needs new each time procedure is run
  
  ExamFolder = ExamineDirectory(#PB_Any, FromFolder, "*.*")  

  If ExamFolder > 0
  While NextDirectoryEntry(ExamFolder)
        If quit > 0
      Break
    EndIf
    If DirectoryEntryType(ExamFolder) = #PB_DirectoryEntry_File
        Files = Files + 1
      Else
        If  DirectoryEntryName(ExamFolder) = "." Or DirectoryEntryName(ExamFolder) = ".."
            ;Ignore these
          Else
        FromFolder = TopFld + DirectoryEntryName(ExamFolder) + "\"
        CountObjects(FromFolder)
        Folders = Folders + 1    
        EndIf
      EndIf
    Wend
    FinishDirectory(ExamFolder)
  EndIf
  
EndProcedure
  
  Procedure CopyObjects(FromFolder.s,ToFolder.s)
  
  Define ExamFolder.i ;Recursive so needs new each time procedure is run
  Define OldFile.s,NewFile.s
  Define TopFld.s = FromFolder ;Recursive so needs new each time procedure is run
  Define DestFolder.s = ReplaceString(TopFld, FromFolder, ToFolder)
  
  ExamFolder = ExamineDirectory(#PB_Any, FromFolder, "*.*")  

  If ExamFolder > 0
    While NextDirectoryEntry(ExamFolder)
      If quit > 0
        Break
      EndIf
      
      If DirectoryEntryType(ExamFolder) = #PB_DirectoryEntry_File
        OldFile = TopFld + DirectoryEntryName(ExamFolder)
        NewFile = ReplaceString(OldFile, topFromFolder, TopToFolder)

        If GetFileDate(OldFile, #PB_Date_Modified) > GetFileDate(newfile, #PB_Date_Modified)
          CopyDone = CopyDone + 1
          CopyFile(OldFile, newfile)
        EndIf
        CheckEvents()
      Else
        If  DirectoryEntryName(ExamFolder) = "." Or DirectoryEntryName(ExamFolder) = ".."
         ;Ignore these
        Else
          FromFolder = TopFld + DirectoryEntryName(ExamFolder) + "\"
          destFolder = ReplaceString(FromFolder, TopFromFolder, TopToFolder)
          CreateDirectory(destFolder)
          CopyObjects(FromFolder,ToFolder)
        EndIf
     EndIf
      
    Wend
    SetGadgetState(ProgressBar_0,CopyDone)
    FinishDirectory(ExamFolder)
  EndIf
  
EndProcedure

Procedure Start(FromFolder.s,ToFolder.s)
  TopFromFolder = FromFolder
  TopToFolder = ToFolder
  ThisWindow = OpenWindow(#PB_Any, 50, 50, 310, 70, "")
  ProgressBar_0 = ProgressBarGadget(#PB_Any, 10, 10, 290, 20, 0, 0)
  btnCancelCopy = ButtonGadget(#PB_Any, 210, 40, 90, 20, "Cancel")
  Folders = 0
  files = 0
  CountObjects(TopFromFolder)
  If quit > 0
    MessageRequester("Count Cancelled","operation cancelled by user",#PB_MessageRequester_Ok)
  Else
    SetGadgetAttribute(ProgressBar_0, #PB_ProgressBar_Maximum , Folders + Files)
    files = 0
    CopyDone = 0
    CopyObjects(TopFromFolder,TopToFolder)
    If quit > 0
      MessageRequester("Cancelled","Copy operation cancelled by user. Only " + Str(Files) + " Files Copied",#PB_MessageRequester_Ok)
    Else
      CloseWindow(ThisWindow)
      MessageRequester("Finished",Str(CopyDone) + " Files Copied")
    EndIf
  EndIf
EndProcedure

EndModule
Now a small test prog

Code: Select all

EnableExplicit

IncludeFile "ModBackup.pb"

Global Window_0,Quit.i = 0

Global strFromFolder, btnBrowseFromFolder, strToFolder, btnBrowseToFolder, btnsmXcopy, btnDone

Define Event.i

Procedure GetFromFolder()
  
  Define FromFolder.s
  
  FromFolder = PathRequester("Select Folder To Copy", "C:\")
  
  SetGadgetText(strFromFolder,FromFolder)  
  
EndProcedure

Procedure GetToFolder()
  
  ;Define i.i
  
  ;For i = 1 To 1000
  ;  SetGadgetState   (ProgressBar_0, i)
  ;Next i
  
  
  
  Define ToFolder.s
  
  ToFolder = PathRequester("Select Folder To Copy To", "C:\")
  
  SetGadgetText(strToFolder,ToFolder)  
  
EndProcedure

Procedure Event_Handler(Event)
  
  Select Event

    Case #PB_Event_Menu
      
      Select EventMenu()
      EndSelect ;EventMenu()

    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case btnDone
          End
          
        Case btnBrowseFromFolder
          GetFromFolder()
          
        Case btnBrowseToFolder
          GetToFolder()
          
        Case btnsmXcopy
          Backup::Start(GetGadgetText(strFromFolder),GetGadgetText(strToFolder))
      EndSelect ;EventGadget()
      
  EndSelect ;Event
  
EndProcedure

Window_0 = OpenWindow(#PB_Any, 10, 10, 380, 180, "", #PB_Window_SystemMenu)
TextGadget(#PB_Any, 20, 10, 90, 20, "From Folder")
strFromFolder = StringGadget(#PB_Any, 10, 40, 290, 20, "")
btnBrowseFromFolder = ButtonGadget(#PB_Any, 310, 40, 60, 20, "Browse")
GadgetToolTip(btnBrowseFromFolder, "Browse for From Folder")
TextGadget(#PB_Any, 20, 70, 90, 20, "To Folder")
strToFolder = StringGadget(#PB_Any, 10, 100, 290, 20, "")
btnBrowseToFolder = ButtonGadget(#PB_Any, 310, 100, 60, 20, "Browse")
btnsmXcopy = ButtonGadget(#PB_Any, 240, 140, 50, 20, "Copy")
btnDone = ButtonGadget(#PB_Any, 310, 140, 60, 20, "Done")

Repeat
  
  Event = WaitWindowEvent()
  Event_Handler(Event)
  
Until event = #PB_Event_CloseWindow
This just copies newer files you can easily add more xcopy functions if you wish.

Just a quick note this will also copy files to dropbox if you have access to a dropbox folder.