0

コンテンツを読み取らずにファイル(2GB)に参加する必要があります。CopyFile メソッドを使用しようとしましたが、機能しません。

私のコードは次のとおりです。

Public Function UnificarCRIs(ByVal path, ByVal FICRIEC, ByVal sessio, ByVal CIBAA)
Dim objFile, objCurrentFolder, filesys, origenFitxers
Dim FileName, WshShell

On error resume next

Set filesys = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objCurrentFolder = filesys.getFolder(path)
origenFitxers = " "

For Each objFile In objCurrentFolder.Files
    FileName = objFile
    If (right(FileName, 4) = ".cri") Then
        origenFitxers = FileName
        'Wscript.Echo FileName
        If filesys.FileExists(path & FICRIEC & sessio) Then
            'Wscript.Echo "If"
            Wscript.Echo path & FICRIEC & sessio & "+" & FileName
            filesys.CopyFile path & FICRIEC & sessio & "+" & FileName, path & FICRIEC & sessio 
             'WshShell.Run ("copy " & path & FICRIEC & sessio & "+" & FileName & " " & path & FICRIEC & sessio & "_tmp")
            'filesys.DeleteFile path & FICRIEC & sessio
            'filesys.MoveFile path & FICRIEC & sessio & "_tmp", path & FICRIEC & sessio
        Else
            Wscript.Echo "Else"
            WshShell.Run ("copy " & FileName & " " & path & FICRIEC & sessio)
            'filesys.CopyFile FileName,path & FICRIEC & sessio
        End If  
    End If 
Next

End Function

Vbscript を使用して 2 つのファイルを結合する方法はありますか?

ありがとう

4

3 に答える 3

2

2つのファイルを結合するには、「誰か」が両方のファイルの内容を読み取る(および書き込む)必要があります。この「誰か」はである可能性がありますcopy [/B] f1 + f2 f3。したがって、ループを使用して、正しいファイル仕様と適切なWshShell.Run/.Execコマンドを作成します。

于 2013-02-13T16:22:14.453 に答える
1

アクセスできる COM オブジェクトと、コードが実行されている場所によって異なります。

1) シェルにアクセスできる場合は、DOS プロンプトの copy コマンドを使用します。この例は Dir コマンドの実行を示していますが、同じ手法です。

Dim oShell    
Set oShell = WScript.CreateObject ("WScript.Shell")

' Note the True value means wait to complete...
' And the 0 value means do not display any window...

oShell.run "cmd /K CD C:\ & Dir", 0, True  

Set oShell = Nothing

また、ここhttp://ss64.com/vb/shellexecute.htmlもご覧ください。その方法が役立つかどうかはわかりません。

2) シェルがない場合、COM オブジェクトを作成できる場合は、C++、Delphi、または VB6 などで作成します。次に、その COM オブジェクトを使用して DOS コマンドを実行し、マージを行います。

3) それ以外の場合は、ファイルからデータを読み取る必要があります。テキスト ファイルの場合は、Vbs でそれを行うための簡単なコマンドがあるため、簡単です。バイナリ データの場合、バイナリ データを取得し、"LenB" および "AscB" スタイルの関数を使用して Unicode の raw バイトにアクセスするには、さらに多くの作業が必要です。しかし、あなたは本当にそれをしたくありません。ASP のアップロード処理スクリプトは、文字列から生のバイトを処理するテクニックを示しているはずです。

于 2013-02-13T16:28:38.353 に答える
1

VBScript と Windows のコピー コマンドを組み合わせて、ファイルを結合できます。ここにコピーを使用して、バイナリ ファイルの追加に関するドキュメントを参照できます https://support.microsoft.com/en-us/kb/71161

テクニックの例は次のとおりです。

JoinFiles "c:\test\", "c:\test\mergedfile.cri"

Function JoinFiles (inPath, outPath)
    Dim objShell, objFSO

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = WScript.CreateObject("WScript.Shell")

    Dim strFilenames, objFile, intFilecount, intExitCode

    strFilenames = ""
    intFilecount = 0
    intExitCode = 0

    ' If the input folder exists, proceed to listing the files
    If objFSO.FolderExists (inPath) Then
        ' List the files in the folder and join the files which has cri extension
        For Each objFile In objFSO.GetFolder(inPath).Files
            If LCase (objFSO.GetExtensionName (objFile.Path)) = "cri" Then
                intFilecount = intFilecount+1
                strFilenames = strFilenames & """" & objFile.Path & """ + "
            End If
        Next

        ' If there're more than one file, proceed to join the file
        If (intFilecount > 1) Then
            ' join the files. Remove the last 3 characters from strFilenames (" + ").
            intExitCode = objShell.Run ("%COMSPEC% /C COPY /B " & Left (strFilenames, Len (strFilenames)-3) _
            & " """ & outPath & """ /Y", 0, True)
        Else
            ' Not enough file to join
        End If
    Else
        ' Can't find folder, exit.
    End If      
End Function
于 2016-06-27T03:28:06.900 に答える