2013-02-13 3 views
0

Мне нужно присоединиться к любым файлам (2 ГБ), не прочитав их содержимое. Я попытался использовать метод CopyFile, но он не работает.CopyFile Vbscript

Мой код является то, что:

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?

Благодаря

ответ

1

Зависит от COM-объектов, к которым у вас есть доступ и где находится код.

1) Если у вас есть доступ к Оболочке, используйте команду копирования команды DOS. В этом примере показано исключение команды 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. Но вы действительно не хотите этого делать. Любой сценарий обработки загрузки для ASP должен показать вам технику работы с необработанными байтами из строк.

+0

Спасибо. Я мог бы бросить команду копирования с помощью метода Run, но теперь я не могу синхронизировать метаданные run в каждом цикле: – user2069014

+0

Команда имеет параметры. Установите waitOnReturn в TRUE, и он вернется только после того, как файл действительно был объединен. http://ss64.com/vb/run.html – 2013-02-14 20:27:53

+0

@bobshacks - исправьте ошибки в операторе 'oShell.run' (param list(), маркер комментария). –

2

Для объединения двух файлов, «кто-то» должен читать (и писать) содержимое обоих файлов. Этот «кто-то» может быть copy [/B] f1 + f2 f3. Поэтому используйте свой цикл для создания правильных спецификаций файлов и WshShell.Run/.Exec команды suitabe.

+0

Спасибо. Я мог бы бросить команду копирования с помощью метода Run, но теперь я не могу синхронизировать метаданные запуска в каждом цикле – user2069014

1

Вы можете комбинировать VBScript с командой Windows Copy для объединения файлов. Вы можете увидеть документ на добавление двоичных файлов с помощью Copy здесь 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 
Смежные вопросы