Je n'ai pas été en mesure d'extraire un fichier zip codé récursive dans un répertoire cible plat VBS sur Windows 7. Voici la partie centrale du code d'extraction zip:Comment extraire sans créer des dossiers récursifs
objTarget. CopyHere objSource, intOptions
où intOptions est donné la valeur de 4096, à partir de cette liste de valeurs: http://www.robvanderwoude.com/vbstech_files_zip.php#CopyHereUNZIP
Alors, où les fichiers du zip sont normalement extraits à un ou plusieurs sous-dossiers (au lieu du dossier sélectionné), les fichiers extraient dans ces sous-dossiers. Je n'ai pas à m'inquiéter du fait que les fichiers se «tabassent» les uns les autres, car il n'y a que quelques fichiers nommés de façon unique.
D'autres valeurs pour intOptions semblent fonctionner correctement, comme 512, qui ne "confirme pas la création d'un nouveau répertoire si l'opération en nécessite la création".
Des idées?
* Edit: script de travail complet ci-dessous, sur demande, en utilisant la réponse de Ansgar *
Dim strCurrentFolder, ExtractTo, strCurrentZip, src, dst, fso, strFileName, app
strCurrentFolder = Replace(WScript.ScriptFullName,WScript.ScriptName,"") ' Path where script is running
ExtractTo = strCurrentFolder & "temp1"
WScript.Echo ExtractTo
strFileName = "samplefile.zip"
'If the extraction location does not exist create it.
Set fso = CreateObject("Scripting.FileSystemObject")
If NOT fso.FolderExists(ExtractTo) Then
fso.CreateFolder(ExtractTo)
End If
'Unzip "C:\path\to\your.zip", "C:\output\folder"
Unzip strCurrentZip, ExtractTo
WScript.Quit
Sub Unzip(src, dst)
' Function to extract all files from a compressed "folder"
' (ZIP, CAB, etc.) using the Shell Folders' CopyHere method
Dim obj, app, intOptions
Set app = CreateObject("Shell.Application")
' Loop through zipped "subfolders"
' http://stackoverflow.com/a/24515198/1569434
For Each obj In app.NameSpace(src).Items
If obj.IsFolder Then
'WScript.Echo "Recursing into nested folders..."
Unzip obj.Path, dst 'recurse into nested folders
Else
'WScript.Echo "Extracting files"
app.NameSpace(dst).CopyHere obj 'extract files, not using intOptions right now
End If
Next
End Sub
vous êtes un * sauveteur *! J'ai fait un léger mod à votre script pour le faire fonctionner, et j'ai édité votre réponse. Si vous préférez que je crée ma propre réponse à partir de la vôtre, ou si je me suis trompé, SVP faites le moi savoir, mais cette légère modification fonctionne parfaitement et je voulais attribuer le vôtre comme la réponse qui a fonctionné pour moi. Tu es un sauveur! :-D – Lizz
@Lizz: Votre modification ne devrait pas faire de différence (et ne l'a pas fait quand je l'ai testé). Aussi, c'est une perte de ressources pour créer un nouvel objet 'Shell.Application' avec chaque récursivité. Un objet global devrait suffire. Quelle erreur avez-vous dit que vous receviez avant? –
Lorsque "Définir l'application ..." est déplacé en dehors de Sub ou commenté, je me trompe "Objet requis: 'app'" avec le code 800A01A8. Où est-ce que je me suis trompé? :( – Lizz