xcopy front end help

Just starting out? Need help? Post your questions and find answers here.
wolfwood2x
User
User
Posts: 76
Joined: Sun Oct 02, 2005 5:08 am

xcopy front end help

Post 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?
User avatar
blueb
Addict
Addict
Posts: 1111
Joined: Sat Apr 26, 2003 2:15 pm
Location: Cuernavaca, Mexico

Post 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
- It was too lonely at the top.

System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Post 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!
BERESHEIT
collectordave
Addict
Addict
Posts: 1310
Joined: Fri Aug 28, 2015 6:10 pm
Location: Portugal

Re: xcopy front end help

Post 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.
Any intelligent fool can make things bigger and more complex. It takes a touch of genius — and a lot of courage to move in the opposite direction.
Post Reply