Avatar billede flashit Nybegynder
08. november 2002 - 13:01 Der er 17 kommentarer og
1 løsning

Kopier fra listbox

Hej E.

Jeg har en listbox som indeholder stier til filer.

Eks:

C:\Documents and Settings\jkmi\Desktop\test.txt
C:\Documents and Settings\jkmi\Desktop\test2.txt

Nu vil jer gerne have den til at kopiere filerne fra listboxen til N:

Eks.

C:\Documents and Settings\jkmi\Desktop\test.txt  kopieres til N:\BackupDagsDato\Documents and Settings\jkmi\Desktop\test.txt

Den skal selvfølgelig løbe alle poster igennem i listboxen.

Har i nogle gode forslag……..
Avatar billede martin_moth Mester
08. november 2002 - 13:21 #1
Hvad med:

Dim i As Integer
If Listbox.ListCount > 0 Then
  For i = 0 To Listbox.ListCount - 1
    MsgBox "xcopy " & Listbox.List(i) & " " & "N:\ /C /I /Y"
  Next i
End If
Avatar billede martin_moth Mester
08. november 2002 - 13:25 #2
He he - der skal nok stå "Shell " i stedet for "Msgbox " - msgboxen var bare til at teste ;o))
Avatar billede martin_moth Mester
08. november 2002 - 13:26 #3
For at svare HELT specifikt på dit spørgsmål:

Dim i As Integer
If Listbox.ListCount > 0 Then
  For i =0 To Listbox.ListCount - 1
    Shell "xcopy " & Listbox.List(i) & " " & _
    "N:\BackupDagsDato\Documents and Settings\jkmi\Desktop\ /C /I /Y"
  Next i
End If
Avatar billede flashit Nybegynder
08. november 2002 - 13:38 #4
Jeg er igang med at teste det, men jeg kan se at jeg ikke har forklaret mig orentligt.

Det jeg vil er at kopiere filerne fra c til n

Så jeg skal bytte c:\ ud med N:\Backupdagsdato
derfor vil et eks være:

C:\Documents and Settings\jkmi\Desktop\test.txt kopieres til N:\Backupdagsdato\Documents and Settings\jkmi\Desktop\test.txt

og

c:\temp\test.txt kopieres til N:\Backupdagsdato\temp\test.txt

Giver det mening
Avatar billede martin_moth Mester
08. november 2002 - 14:09 #5
Jamen den klare vi lige i en hurtig vending:

Dim i As Integer
Dim j As Integer
Dim NySti As String

If Listbox.ListCount > 0 Then
  For i = 0 To Listbox.ListCount - 1
    'Finder ny sti & filnavn på ny fil
    NySti = " N:\BackupDagsDato" & _
    Right(Listbox.List(i), Len(Listbox.List(i)) - InStr(Listbox.List(i), ":\"))
   
    'Fjerner filnavnet fra stien - finder først pladsen af "\" set fra højre
    For j = 1 To Len(NySti)
      If Mid(NySti, Len(NySti) - j, 1) = "\" Then Exit For 'tæller fra bagende
    Next j
    'Fjerner alt til højre for ovenstående "\"
    NySti = Left(NySti, Len(NySti) - j)
   
    Shell "xcopy " & Listbox.List(i) & NySti & " /C /I /Y"
  Next i
End If

Du ville gøre dig selv en meget stor tjeneste ved at bruge FileListBox, da du derved kan få skilt filnavn og filsti ad på en meget nem måde... Ovenstående virker fint, men det kunne gøres på 2-3 linier hvis du brugte FileListBox

/Martin
Avatar billede martin_moth Mester
08. november 2002 - 14:12 #6
Forklaring:

Først indeholder NySti:
N:\Backupdagsdato\Documents and Settings\jkmi\Desktop\test.txt

Derefter indeholder Nysti:
N:\Backupdagsdato\Documents and Settings\jkmi\Desktop\

Det gøres, da du ellers vil blive spurgt om hvorvidt "test.txt" er en fil eller en mappe - prøv selv...
Avatar billede flashit Nybegynder
08. november 2002 - 14:18 #7
Det ser helt super ud.

Men jeg vil gerne lige kigge det mere igennem.
Avatar billede flashit Nybegynder
08. november 2002 - 14:24 #8
Det er HELT KANON

MANGE TAK......................

Jeg sender gerne en Sneøl til dig, da det skal fejres.
Kan du have en god weekend
Avatar billede martin_moth Mester
08. november 2002 - 14:38 #9
Jamen dog - selv tak :o))

PS: til en anden gang, over filelistbox *S*
Avatar billede flashit Nybegynder
12. november 2002 - 15:35 #10
Hej Igen Martin

Jeg har lige fundet ud af at xcopy ikke kan kopire filer med mellemrum i navnet.
Har du en god ide til hvorledes man kan få den til at kopiere alle filerne?
Avatar billede martin_moth Mester
12. november 2002 - 15:46 #11
Put stien+filnavn i gåseøjne - så kan den (test evt. først fra en dos-prompt)

Brug asc() og chr() til at indsætte gåseøjne omkring Listbox.List(i) og NySti :o)
Avatar billede flashit Nybegynder
12. november 2002 - 16:01 #12
Er der dette du mener:
Shell "xcopy  " & "List1.List(i) & NySti " & " /C /I /Y"
Avatar billede martin_moth Mester
12. november 2002 - 17:09 #13
Nej!
Avatar billede martin_moth Mester
12. november 2002 - 17:14 #14
xcopy kan kun opfatte fil/mappe-navne med mellemrum, hvis de pakkes ind i gåseøjne

xcopy c:\Mit Drev\min fil.txt c:\Mit Nye Drev\Ny Mappe /C /I /Y virker IKKE
xcopy "c:\Mit Drev\min fil.txt" "c:\Mit Nye Drev\Ny Mappe" /C /I /Y virker!

Så sørg for at den linie du sender med Shell-kommandoen har pakket mappe/stier ind i gåseøjne. Til det kan du bruge Asc/Chr-funktionerne, da du ikke direkte kan skrive et gåseøje i VB, da det vil blive opfattet som en del af en kommando.

Prøv at lege lidt med og brug en msgbox til at teste resultatet - det er ganske ligetil :o)
Avatar billede flashit Nybegynder
14. november 2002 - 12:11 #15
Pas pas....

Her er hvad vi er kommet til:
shell "xcopy " & Chr(34) & List1.List(i) & Chr(34) & " " & Chr(34) & NySti & Chr(34) & " / C / i / Y"

men det virker ikke????
Avatar billede martin_moth Mester
14. november 2002 - 13:42 #16
Tæt på ;o)

Tjek hvad NySti indeholder - der er et mellemrum for meget, tjek ved at prøve med en msgbox, som jeg sagde før
Avatar billede flashit Nybegynder
14. november 2002 - 16:02 #17
Doh doh doh.

Shell "xcopy " & Chr(34) & List1.List(i) & Chr(34) & " " & Chr(34) & NySti & Chr(34) & " /C /I /Y"

Nu kopiere den filer med mellemrum i navnet men den tager ikke alle filer med.
Vil du have min fil?
Avatar billede martin_moth Mester
14. november 2002 - 16:23 #18
kopierer den ikke alle filer? Det kan da ikke passe, for du looper jo netop gennem samtlige filer ved For i = 0 To Listbox.ListCount - 1...
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