batch file - Uso de variables en híbridos por lotes y VBS
batch-file vbscript (1)
En vbscript, el primer argumento es: wscript.Arguments(0)
el segundo argumento es: wscript.Arguments(1)
Entonces, deberías escribirlo así: `
----- Begin wsf script --->
<job><script language="VBScript">
set fso = CreateObject("Scripting.FileSystemObject")
If NOT fso.FolderExists(wscript.Arguments(0)) Then
fso.CreateFolder(wscript.Arguments(0))
End If
set objShell = CreateObject("Shell.Application")
set FilesInZip = objShell.NameSpace(wscript.Arguments(1)).items
objShell.NameSpace(wscript.Arguments(0)).CopyHere(FilesInZip)
set fso = Nothing
set objShell = Nothing
</script></job>
Este hilo describe cómo codificar híbridos por lotes que pueden incluir una combinación de varios lenguajes de scripts, como por lotes, VBS, JScript, PowerShell, etc. La cuestión es si un híbrido por lotes trata los bloques de lenguaje "extranjeros" como "funciones", es decir las llamadas a estos bloques pueden incluir argumentos como las variables de lotes de expansión regulares y diferidas, a los que se hace referencia como argumentos habituales como% 1,% 2, etc.
El siguiente ejemplo muestra el enfoque en la tarea de descomprimir un archivo, mientras usa este archivo, descomprime el código, pero da un error en Win10 de 64 bits: ¿por qué? Tenga en cuenta que el código de descompresión del archivo vinculado da un error también cuando se ejecuta en Win 10, pero uno diferente.
<!-- : Begin batch script
@echo off
set "dir=C:/Temp/" & set "file=%USERPROFILE%/Downloads/archive.zip/"
cscript //nologo "%~f0?.wsf" "%dir%" "%file%"
exit /b
----- Begin wsf script --->
<job><script language="VBScript">
set fso = CreateObject("Scripting.FileSystemObject")
If NOT fso.FolderExists(%1) Then
fso.CreateFolder(%1)
End If
set objShell = CreateObject("Shell.Application")
set FilesInZip = objShell.NameSpace(%2).items
objShell.NameSpace(%1).CopyHere(FilesInZip)
set fso = Nothing
set objShell = Nothing
</script></job>
:: Error
../test.bat?.wsf(9, 8) Microsoft VBScript compilation error: Invalid character