Разархивируйте файл молча и без диалогового окна для перезаписи - PullRequest
0 голосов
/ 10 октября 2018

Я работаю над VBScript, чтобы распаковать несколько файлов один за другим.

Я использую код ниже

Dim folder(3)
folder(0) = "UBO90R1"
folder(1) = "UBO90R2"
folder(2) = "UBO100R1"
folder(3) = "UBO100R2"

For i = 0 To 3
    unzip_Source = "D:\Autobackup\" & folder(i) & ".zip"
    unzip_destination = "D:\Autobackup_unzip\" & folder(i) &"\"

    Call ExtractFilesFromZip(unzip_Source,unzip_destination)

    WScript.Echo "unzip Finished"
Next

Sub ExtractFilesFromZip(pathToZipFile, dirToExtractFiles)
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")

    pathToZipFile = fso.GetAbsolutePathName(pathToZipFile)
    dirToExtractFiles = fso.GetAbsolutePathName(dirToExtractFiles)

    If (Not fso.FileExists(pathToZipFile)) Then
        WScript.Echo "Zip file does not exist: " & pathToZipFile
        Exit Sub
    End If

    If Not fso.FolderExists(dirToExtractFiles) Then
        WScript.Echo "Directory does not exist: " & dirToExtractFiles
        Exit Sub
    End If

    dim sa  : Set sa = CreateObject("Shell.Application")
    Dim zip : Set zip = sa.NameSpace(pathToZipFile)
    Dim d   : Set d = sa.NameSpace(dirToExtractFiles)

    d.CopyHere zip.items, 4

    Do Until zip.Items.Count <= d.Items.Count
        WScript.Sleep(200)
    Loop
End Sub

Проблема в настоящее время у меня есть, если папка или файл ужесуществует, чем открыть диалоговое окно для пользователя, чтобы выбрать любую опцию перезаписи, сохранить оба файла и т. д.

Если я изменю следующую строку из кода

d.CopyHere zip.items, 4
'Integer 4 didn't show the progress bar

на

d.CopyHere zip.items, 16
'Integer 16 overwrite the existing file but it shows the progress bar.

Я хотел бы перезаписать существующий файл без какого-либо диалогового окна и без индикатора выполнения.

PS: Код для распаковки скопирован с здесь .

1 Ответ

0 голосов
/ 10 октября 2018

Если бы вы смотрели на помощь, она бы сказала вам.

https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/ns-shellapi-_shfileopstructa

Type: FILEOP_FLAGS

Flags that control the file operation. This member can take a combination of the following flags.

FOF_ALLOWUNDO

Preserve undo information, if possible.

Prior to Windows Vista, operations could be undone only from the same process that performed the original operation.

In Windows Vista and later systems, the scope of the undo is a user session. Any process running in the user session can undo another operation. The undo state is held in the Explorer.exe process, and as long as that process is running, it can coordinate the undo functions.

If the source file parameter does not contain fully qualified path and file names, this flag is ignored.

FOF_CONFIRMMOUSE

Not used.

FOF_FILESONLY

Perform the operation only on files (not on folders) if a wildcard file name (.) is specified.

FOF_MULTIDESTFILES

The pTo member specifies multiple destination files (one for each source file in pFrom) rather than one directory where all source files are to be deposited.

FOF_NOCONFIRMATION

Respond with Yes to All for any dialog box that is displayed.

FOF_NOCONFIRMMKDIR

Do not ask the user to confirm the creation of a new directory if the operation requires one to be created.

FOF_NO_CONNECTED_ELEMENTS

Version 5.0. Do not move connected files as a group. Only move the specified files.

FOF_NOCOPYSECURITYATTRIBS

Version 4.71. Do not copy the security attributes of the file. The destination file receives the security attributes of its new folder.

FOF_NOERRORUI

Do not display a dialog to the user if an error occurs.

FOF_NORECURSEREPARSE

Not used.

FOF_NORECURSION

Only perform the operation in the local directory. Do not operate recursively into subdirectories, which is the default behavior.

FOF_NO_UI

Windows Vista. Perform the operation silently, presenting no UI to the user. This is equivalent to FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR.

FOF_RENAMEONCOLLISION

Give the file being operated on a new name in a move, copy, or rename operation if a file with the target name already exists at the destination.

FOF_SILENT

Do not display a progress dialog box.

FOF_SIMPLEPROGRESS

Display a progress dialog box but do not show individual file names as they are operated on.

FOF_WANTMAPPINGHANDLE

If FOF_RENAMEONCOLLISION is specified and any files were renamed, assign a name mapping object that contains their old and new names to the hNameMappings member. This object must be freed using SHFreeNameMappings when it is no longer needed.

FOF_WANTNUKEWARNING

Version 5.0. Send a warning if a file is being permanently destroyed during a delete operation rather than recycled. This flag partially overrides FOF_NOCONFIRMATION.
...