Avatar billede nordclc Nybegynder
18. oktober 2005 - 11:33 Der er 14 kommentarer og
1 løsning

Samkopier mange filer

Hej Eksperter,

jeg har ca 20.000 små tekst filer, som jeg ønsker at kopiere sammen til 1 stor fil. Hvordan gør jeg det? Findes der evt. et eller anden lille program som kan gøre det. Filerne ligger på min Windows XP maskine.

På forhånd tak.

//nordclc
Avatar billede ldanielsen Nybegynder
18. oktober 2005 - 11:44 #1
Du kan lave det i VBScript. Har du forstand på det?
Avatar billede nordclc Nybegynder
18. oktober 2005 - 11:47 #2
nope
Avatar billede bertelbrander Novice
18. oktober 2005 - 11:49 #3
Man kan gøre det med følgende i en .bat fil:
@echo off
Set Counter=0
echo.>Dest0.log
for /F "tokens=*" %%I in ('dir /B *.txt') do call :Process "%%I"
goto :eof

:Process
set /A Next=%counter% + 1
copy /B Dest%Counter%.log + %1 Dest%Next%.%log
del Dest%Counter%.log
set Counter=%Next%

Det forudsætter at der IKKE findes nogle destxxx.log filer i mappen.
Det forudsætter at alle tekst filerne hedder .txt (og ikke .log)
Resultatet kommer til at hedde Dest19999.log hvis du har 20000 .txt filer.
Avatar billede nordclc Nybegynder
18. oktober 2005 - 11:49 #4
Jeg tror egentlig man kan i en kommandoprompt med en for løkke, men kan ikke lige huske hvordan!
Avatar billede nordclc Nybegynder
18. oktober 2005 - 11:50 #5
bertelbrander> ah tak, jeg prøver lige.
Avatar billede nordclc Nybegynder
18. oktober 2005 - 11:53 #6
Det virker. Smid lige et svar bertelbrander så får du point.

Tak for hjælpen.

//nordclc
Avatar billede bertelbrander Novice
18. oktober 2005 - 11:56 #7
Jeg samler ikke på point.
Avatar billede ldanielsen Nybegynder
18. oktober 2005 - 11:59 #8
For langsom, men dette skal gemmes som en vbs-fil:


option explicit

Dim objFSO, strPath, objFolder, objTs, objFile, strScriptPath, strContentSamlet, strSep

call RunIt

Sub RunIt

    strPath = OpenFile("Alle filer (*.mdb)|*.*", "", "Vælg én af filerne")
   
    strScriptPath = WScript.ScriptFullName
    strScriptPath = Left(strScriptPath, InStrRev(strScriptPath, "\"))

    if strPath = vbNullString then
        MsgBox("Du skal vælge en fil")
        Exit Sub
    else
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFolder = objFSO.GetFolder(Left(strPath, InStrRev(strPath, "\")))
       
        strSep = VbCrLf & "----------" & VbCrLf
       
        for each objFile in objFolder.Files
            Set objTs = objFile.OpenAsTextStream(1, -2)
            strContentSamlet = strContentSamlet & objTs.ReadAll & strSep
        next
       
        objFSO.CreateTextFile strScriptPath & "SamletFil.txt"
        Set objFile = objFSO.GetFile(strScriptPath & "SamletFil.txt")
        Set objTs = objFile.OpenAsTextStream(2, -2)
        objTs.Write strContentSamlet
        objTs.Close

        MsgBox("Færdig!")
       
        Set objFSO = Nothing
        Set objFolder = Nothing
        Set objFile = Nothing
        Set objTs = Nothing
    end if
End Sub

Function OpenFile(strFilter, strDirectory, strTitle)
    Const cdlOFNExplorer = &H80000
    Const cdlOFNFileMustExist = &H1000
    Const cdlOFNHideReadOnly = &H4
    Const cdlOFNPathMustExist = &H800

    Dim objCD

    Set objCD = CreateObject("MSComDlg.CommonDialog")

    With objCD
        .MaxFileSize = 260
        .Flags = cdlOFNExplorer AND cdlOFNFileMustExist AND cdlOFNHideReadOnly AND cdlOFNPathMustExist

        .DialogTitle = strTitle
        .InitDir = strDirectory
        .Filter = strFilter

        .ShowOpen

        OpenFile = .FileName
    End With

    Set objCD = nothing  ' clean up


End Function
Avatar billede nordclc Nybegynder
18. oktober 2005 - 12:32 #9
bertelbrander> pjat med dig, kom så med et svar ;o)
ldanielsen> jeg tror du har ret, men da det kun skal foregå en enkelt gang, kan jeg leve med det. Men godt du postede VB svaret, hvis andre kan bruge det.

//nordclc
Avatar billede bertelbrander Novice
18. oktober 2005 - 13:38 #10
Kom til at tænke på, man kan godt gøre det med én linie i en kommando prompt:
for /F "tokens=*" %I in ('dir /B *.txt') do type "%I" >>Dest.log

Det kræver at dest.log ikke findes eller er tom når man starter.
Avatar billede nordclc Nybegynder
18. oktober 2005 - 13:43 #11
Du har ret, og det virker. Kom så med det svar eller jeg kilder dig ;o)

Mvh Claus
Avatar billede nordclc Nybegynder
24. oktober 2005 - 20:07 #12
bertelbrander> Sidste mulighed ellers får ldanielsen de 30 points!

P.S. Skriv lige så jeg ved du har læst beskeden.
Avatar billede bertelbrander Novice
24. oktober 2005 - 20:09 #13
Jeg har set beskeden, og jeg samler stadig ikke på point.
Avatar billede nordclc Nybegynder
24. oktober 2005 - 20:18 #14
Det er så i orden, men tusind tak for hjælpen, du sparede mig for 1 hel dags arbejde ;o)

ldanielsen> så mangler jeg et svar fra dig
Avatar billede ldanielsen Nybegynder
25. oktober 2005 - 11:08 #15
Svar
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