2016-07-26 15 views
1

Beim Ausführen der VBS unzip code Batch in Win 10, bekomme ich den Fehler unten. Was kann ein Grund dafür sein, wenn man berichtet, dass es von anderen vorher bearbeitet wurde? Das Ändern von Zielverzeichnissen oder das explizite Festlegen von Zielverzeichnissen hat keine Auswirkungen auf den Fehler.Unzip-Datei Fehler beim Ausführen von VBS-Skript aus einem Stapel in Windows 10

@echo off 
setlocal enabledelayedexpansion 
cd /d %~dp0 
set vbs="%temp%\_.vbs" 
call :UnZipFile "E:\Temp\" "%USERPROFILE%\Downloads\archive.zip\" 
exit /b 

:UnZipFile <ExtractTo> <newzipfile> 
if exist %vbs% del /f /q %vbs% 
>%vbs% echo Set fso = CreateObject("Scripting.FileSystemObject") 
>>%vbs% echo If NOT fso.FolderExists(%1) Then 
>>%vbs% echo fso.CreateFolder(%1) 
>>%vbs% echo End If 
>>%vbs% echo set objShell = CreateObject("Shell.Application") 
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items 
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip) 
>>%vbs% echo Set fso = Nothing 
>>%vbs% echo Set objShell = Nothing 
cscript //nologo %vbs% 
if exist %vbs% del /f /q %vbs% 

::error 
VBScript runtime error: Object required: 'objShell.NameSpace(...)' 

BEARBEITEN: Speicherort der ZIP-Datei geändert, jetzt funktioniert das Skript. Der Grund für den Fehler war, dass der Download-Ordner des Benutzers auf einen anderen Datenträger verschoben wurde als der Standardordner% USERPROFILE% \ Downloads. Das Skript scheint Probleme zu haben, ordnungsgemäß mit system folder symlinks zu funktionieren.

+0

@Matt Williamson Eine Idee, warum dieses Skript hier in Win10 nicht funktioniert? – sambul35

+0

Scheint für mich zu funktionieren - existiert E: \ temp? Haben Sie Schreibzugriff auf E: \? – cup

+0

Übergeben Sie 2 Argumente? –

Antwort

0

Diese Batch-Hybrid auf dem VBS-Skript basiert vorgeschlagen hier durch Nudeln. Es funktioniert sehr gut beim Entpacken von Dateien, hat aber den Vorteil, dass keine eigenständige VBS-Datei mit dem ursprünglichen Batch verglichen werden muss oder dass das Batch-Skript vollständig zugunsten von VBS aufgegeben wird. Es erfordert ein Zielverzeichnis für entpackte Dateien.

<!-- : Begin batch script 
@echo off 
set "dir=%temp%\Unzip" & set "file=%userprofile%\Downloads\archive.zip" 
cscript //nologo "%~f0?.wsf" "%file%" "%dir%" 
exit /b 

----- Begin wsf script ---> 
<job><script language="VBScript"> 
Set objShell = CreateObject("Shell.Application") 
Set Ag=Wscript.Arguments 
set WshShell = WScript.CreateObject("WScript.Shell") 

Set DestFldr=objShell.NameSpace(Ag(1)) 
Set SrcFldr=objShell.NameSpace(Ag(0)) 
Set FldrItems=SrcFldr.Items 
DestFldr.CopyHere FldrItems, &H214 
</script></job> 

Die VBS-Methode scheint Probleme mit Symlinks zu haben oder einen aktuellen Ordnerpfad lokalisieren, wenn der Benutzer Ordner Downloads von ihrer Standardposition bewegt. Verwenden Sie in diesem Fall anstelle von Umgebungsvariablen absolute Pfade in cscript-Argumenten.

1

Dieser Code wird entpackt.

Microsoft Windows [Version 10.0.10240] 
(c) 2015 Microsoft Corporation. All rights reserved. 

C:\Users\David Candy>"C:\Users\David Candy\Desktop\David\Documents\Assorted\Scripts\UnZip.vbs" "C:\Users\David Candy\Desktop\42 - ProcessExplorer.zip" "C:\Users\David Candy\Desktop\New Folder (3)" 

Hier ist eine Debugging-Version. Führen Sie es mit CScript aus.

On Error Resume Next 

Set objShell = CreateObject("Shell.Application") 
Set Ag=Wscript.Arguments 
Set fso = CreateObject("Scripting.FileSystemObject") 

wscript.echo Ag(0) & " Is Drive " & fso.DriveExists(Ag(0)) & " Is Folder " & fso.FolderExists(Ag(0)) & " Is File " & fso.FileExists(Ag(0)) 
wscript.echo Ag(1) & " Is Drive " & fso.DriveExists(Ag(1)) & " Is Folder " & fso.FolderExists(Ag(1)) & " Is File " & fso.FileExists(Ag(1)) 

wscript.echo "" 

If fso.FileExists(Ag(1)) = False Then 
    Wscript.echo "Zip doesn't exist so trying to Create" 
    Set ts = fso.OpenTextFile(Ag(0), 8, vbtrue) 
    If Err.Number <> 0 Then 
     Wscript.echo "Opening Dest " & Err.number & " " & Err.Description & " " & Err.Source 
     Err.Clear 
    End If 

    BlankZip = "PK" & Chr(5) & Chr(6) 
    For x = 0 to 17 
     BlankZip = BlankZip & Chr(0) 
    Next 
    ts.Write BlankZip 
    If Err.Number <> 0 Then 
     Wscript.echo "Writing Dest " & Err.number & " " & Err.Description & " " & Err.Source 
     Err.Clear 
    End If 
End If 

Set DestFldr=objShell.NameSpace(Ag(1)) 
If Err.Number <> 0 Then 
    Wscript.echo "Creating Dest " & Err.number & " " & Err.Description & " " & Err.Source 
    Err.Clear 
End If 

Set SrcFldr=objShell.NameSpace(Ag(0)) 
If Err.Number <> 0 Then 
    Wscript.echo "Creating Source " & Err.number & " " & Err.Description & " " & Err.Source 
    Err.Clear 
End If 


wscript.echo DestFldr.Self.Name & " " & DestFldr.Self.Type & " " & DestFldr.Self.IsBrowsable & " " & DestFldr.Self.IsFileSystem 
If Err.Number <> 0 Then 
    Wscript.echo Err.number & " " & Err.Description & " " & Err.Source 
    Err.Clear 
End If 

wscript.echo SrcFldr.Self.Name & " " & SrcFldr.Self.Type & " " & SrcFldr.Self.IsBrowsable & " " & SrcFldr.Self.IsFileSystem 
If Err.Number <> 0 Then 
    Wscript.echo Err.number & " " & Err.Description & " " & Err.Source 
    Err.Clear 
End If 


Set FldrItems=SrcFldr.Items 
For Each Itm in FldrItems 
    wscript.echo Itm.Name & " " & Itm.IsBrowsable & " " & Itm.IsFileSystem 
Next 


DestFldr.CopyHere FldrItems, &H10001210 
Msgbox "Finished" 

Dies ist die Ausgabe

C:\Users\User>cscript //nologo "C:\Users\User\Desktop\David\Documents\Assorted\Scripts\UnZip - Copy.vbs" C:\symbols c:\file1.zip 
C:\symbols Is Drive False Is Folder True Is File False 
c:\file1.zip Is Drive False Is Folder False Is File False 

Zip doesn't exist so trying to Create 
Opening Dest 70 Permission denied Microsoft VBScript runtime error 
Writing Dest 424 Object required Microsoft VBScript runtime error 
424 Object required Microsoft VBScript runtime error 
symbols File folder False True 
wkernel32.pdb False True 
wntdll.pdb False True 

Zeige ich nicht die Erlaubnis, es zu schaffen hatte.

C:\Users\User>cscript //nologo "C:\Users\User\Desktop\David\Documents\Assorted\Scripts\UnZip - Copy.vbs" C:\symbols c:\file2.zip 
C:\symbols Is Drive False Is Folder True Is File False 
c:\file2.zip Is Drive False Is Folder False Is File False 

424 Object required Microsoft VBScript runtime error 
symbols File folder False True 
wkernel32.pdb False True 
wntdll.pdb False True 

Die Datei wurde nicht angezeigt.

Dies ist, wenn es funktioniert.

C: \ Windows \ system32> cscript // nologo "C: \ Benutzer \ Benutzer \ Desktop \ David \ Dokumente \ Assorted \ Skripts \ UnZip - Copy.vbs" C: \ Symbole c: \ file.zip C: \ Symbole Ist Laufwerk falsch ist Ordner wahr ist Datei Falsch c: \ file.zip Ist Laufwerk falsch ist Ordner falsch ist Datei Wahr

file.zip Komprimierte (gezippt) Ordner True Symbole Dateiordner false True wkernel32.pdb Falsch Wahr wntdll.pdb Falsch Wahr

Ich habe Optionen ändern, um nicht zu rekrutieren. Siehe Die Liste hier.

https://msdn.microsoft.com/en-us/library/windows/desktop/bb775799%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

+0

Nicht für mich, wenn als Batch-Funktion oben verwendet. '\ _. vbs (7, 30) Microsoft VBScript-Kompilierungsfehler: Syntaxfehler'. Und & H214 fehlt in der Datei, da & ein Stapeltrennzeichen ist. Aber selbst wenn ich es manuell zu der VBS-Datei hinzufüge, ein anderer Fehler: 'Index außerhalb des Bereichs'. Kannst du das Arbeiten beim Entpacken disponieren, da das Entpacken nur einer meiner größeren Batch-Funktionen ist. – sambul35

+0

Aufruf von Batch 'cscript // nologo% vbs%" C: \ Benutzer \ Benutzer \ Downloads \ Archiv.zip \ "" C: \ Temp \ "' Ich habe '_.vbs (7, 1) Microsoft VBScript Laufzeitfehler : Objekt benötigt: 'DestFldr'' – sambul35

+0

Leerzeile in der Datei hinzugefügt, Backslash nach .zip in Ag (0) entfernt. Jetzt Fehler 'Objekt benötigt: 'Quellordner''. – sambul35