此thread概述了如何编写可能包含多种脚本语言组合的批处理混合编码,例如批处理,VBS,JScript,PowerShell等。问题是,批处理混合是否处理“外语”语言块作为“函数”,意味着对这些块的调用可能包括常规和延迟扩展批处理变量等参数,这些参数被引用为常见的参数,如%1,%2等?
下面的示例显示了在使用this文件解压缩代码时解压缩文件的方法,但它在Win10 64位中出错 - 为什么?注意,链接文件解压缩代码在Win 10中运行时也会给出error,但是不同的。
<!-- : 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
答案 0 :(得分:1)
在vbscript中,第一个参数是:wscript.Arguments(0)
第二个参数是:wscript.Arguments(1)
所以,你应该这样写: `
----- 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>