Avatar billede igoogle Forsker
02. juni 2009 - 08:37 Der er 2 kommentarer og
1 løsning

Flytning af filer

Hej,

Jeg står og skal have flytte nogen filer.

Jeg har:
Orginal mappe med dertilhørende undermapper c:\dk\
Ny mappe uden undermapper c:\uk\
en indien mappe med random filer c:\in\

processen skal så være at:
1. vælg fil i indien
2. find samme filnavn i dk
3. tage path strukturen for filen i dk
4. flytte filen fra indien til uk mappen med path strukturen fra dk filen.

eksempel:
c:\in\30232.pdf vælges
så søges c:\dk\ efter denne fil
filen findes i c:\dk\mappe1\mappe2\30232.pdf
c:\in\30232.pdf skal så flyttes til
c:\uk\mappe1\mappe2\30232.pdf

ekstra bonus ønske
da der er tale om 3000+ filer en loop funktion der gør dette for alle filer i c:\in\

på forhånd tak.
Avatar billede ebusiness Nybegynder
02. juni 2009 - 12:21 #1
Nu kan jeg ikke lige huske så meget Visual Basic, så du må selv finde de korrekte kommandoer. Men metoden, i pseudokode:

str array indienfiler 'med plads til navnet på hver fil i in folderen.

funktion gennemsøg indienmappe(sti)
    hent filer og mapper i (sti)
    for hver mappe(gennemsøg indienmappe(sti+mappe))
    for hver fil(læg filnavnet i indienfiler)
slut funktion

gennemsøg indienmappe("c:\in\")

funktion gennemsøg danmarkmappe(sti)
    hent filer og mapper i ("c:\dk\"+sti)
    for hver mappe(gennemsøg danmarkmappe(sti+mappe))
    for hver fil(
        hvis(filnavnet er i indienfiler)( 'note som det er skrevet her skal du trawle hele indienfiler igennem for hver fil i dk mappen, det bliver til nogle millioner gange i alt, men jeg tror ikke at det er noget problem i dette tilfælde, ellers skal der laves et indekseringssystem.
            kopier fil til "c:\uk\"+sti+filnavn
        )
    )
slut funktion

gennemsøg danmarkmappe("")

Jeg håber at du kan forstå min pseudokode, ellers må jeg jo i gang med noget rigtigt VB.

Hele pointen her er rekursive funktioner som kalder sig selv, det er klart den letteste måde at gennemsøge en træstruktur på.
Avatar billede igoogle Forsker
02. juni 2009 - 16:33 #2
Det lyder rigtigt nok tror jeg.. har ikke selv den store forstand på emnet :) ..

er kommet frem med denne løsning
Sub SrchForFiles()
        Dim i As Long, z As Long, Rw As Long
    Dim ws As Worksheet
    Dim y As Variant
    Dim fLdr As String, fil As String, FPath As String
    Dim MyTempList As Variant
    Dim MyTempList2 As Variant
    Dim lfldrnm As Integer
    Dim FldrName As String
    Dim FilName As String
    Dim sTmp As String
    Dim t As Long
    Dim l As Variant
    Dim ll As Variant
    Dim filell As String
    Dim p As String
   
    Range("A2:A36").Select
    Selection.ClearContents
   
    With Application.FileDialog(msoFileDialogFilePicker)
    .Show
    l = .SelectedItems(1)
    End With
                MyTempList2 = Split(l, "\")
                        For t = 0 To UBound(MyTempList2)
                        Next t
                Filenamel = MyTempList2(UBound(MyTempList2))
   
    y = Filenamel
    Application.ScreenUpdating = False

    With Application.FileSearch
        .NewSearch
        .LookIn = "C:\test\DK"
        .SearchSubFolders = True
        .Filename = y
     
      On Error GoTo 0
        If .Execute() > 0 Then
            For i = 1 To .FoundFiles.Count
                fil = .FoundFiles(i)
                    'Get file path from file name
                    MyTempList = Split(fil, "\")
                        For t = 0 To UBound(MyTempList)
                        Next t
                    Filename = MyTempList(UBound(MyTempList))
                MyTempList(2) = "UK"
            Next i
        End If
    End With
For i = 0 To UBound(MyTempList) - 1 Step 1
Cells(i + 2, 1).Value = MyTempList(i)
Next i


    Dim Fold As String
    Dim reason As String
    Fold = Range("b2").Value
   
    Select Case Fold
   
    Case 3
    Cells(2, 3).Value = MyTempList(0) & "\" & MyTempList(1) & "\" & MyTempList(2) & "\"
   
    Case 4
    Cells(2, 3).Value = MyTempList(0) & "\" & MyTempList(1) & "\" & MyTempList(2) & "\" & MyTempList(3) & "\"
   
    Case 5
    Cells(2, 3).Value = MyTempList(0) & "\" & MyTempList(1) & "\" & MyTempList(2) & "\" & MyTempList(3) & "\" & MyTempList(4) & "\"
   
    Case 6
    Cells(2, 3).Value = MyTempList(0) & "\" & MyTempList(1) & "\" & MyTempList(2) & "\" & MyTempList(3) & "\" & MyTempList(4) & "\" & MyTempList(5) & "\"
   
    Case 7
    Cells(2, 3).Value = MyTempList(0) & "\" & MyTempList(1) & "\" & MyTempList(2) & "\" & MyTempList(3) & "\" & MyTempList(4) & "\" & MyTempList(5) & "\" & MyTempList(6) & "\"
   
    Case 8
    Cells(2, 3).Value = MyTempList(0) & "\" & MyTempList(1) & "\" & MyTempList(2) & "\" & MyTempList(3) & "\" & MyTempList(4) & "\" & MyTempList(5) & "\" & MyTempList(6) & "\" & MyTempList(7) & "\"
    End Select

    p = Cells(2, 3).Value

    Dim fso
    Dim fol As String
    fol = p ' change to match the folder path
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(fol) Then
        fso.CreateFolder (fol)
    Else
        'MsgBox fol & " already exists!", vbExclamation, "Folder Exists"
    End If
   

    Dim file As String, sfol As String, dfol As String
    file = y ' change to match the file name
    sfol = "C:\test\" ' change to match the source folder path
    dfol = p ' change to match the destination folder path
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FileExists(sfol & file) Then
  ' MsgBox sfol & file & " does not exist!", vbExclamation, "Source File Missing"
    ElseIf Not fso.FileExists(dfol & file) Then
    fso.MoveFile (sfol & file), dfol
    Else
    'MsgBox dfol & file & " already exists!", vbExclamation, "Destination File Exists"
End If

End Sub


men løber ind i problemmer når jeg skal oprette mere end en mappe. nogen forslag
Avatar billede igoogle Forsker
21. september 2009 - 19:43 #3
fandt en løsning med at kopier mappe strukturen først og derefter slette alle filer i den..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester