【问题标题】:Using variables in batch & VBS hybrids在批处理和 VBS 混合中使用变量
【发布时间】:2016-07-27 01:16:11
【问题描述】:

这个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

【问题讨论】:

    标签: batch-file vbscript hybrid


    【解决方案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>
    

    【讨论】:

    • 完美运行。我想知道,类似用途的批处理和 JScript 混合会是什么样子? :)
    • @sambul35 在这种情况下不要忘记投票并接受它作为答案;)
    • 另见question :)
    猜你喜欢
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多