如何将批处理代码与 vbscript 代码合并

How to merge batch code with vbscript code

本文关键字:代码 合并 vbscript 批处理      更新时间:2023-09-26

有时在我的批处理脚本中,我通常会将批处理代码与JavaScript代码(.js文件)合并,如下所示:

@if(@X)==(@Y) @end /*          ← Hybrid line. Starts a Javascript comment block.
::Batch code
@echo off
set code=65
cscript //nologo /E:JScript "%~f0" %code%      ← Calls itself using cscript.exe.
pause>nul
exit/b
*/                        ← Ends the comment block, now we can write JavaSCript.
//JavaScript code
WScript.echo(String.fromCharCode(WScript.Arguments.Unnamed(0)));

其输出为 A (65 ASCII)。

好的,JavaSCript工作正常。我的问题是:我如何使用VBScript做到这一点?我不是 VBScript 的专家,但我知道在我的代码中没有任何方法可以制作注释块,因此我不能使用与 JavaScript 相同的技术。

假设我有一个代码可以做同样的事情(将第一个参数传递的 ASCII 代码转换为字符),但现在在 VBScript 中:

WScript.echo chr(WScript.Arguments.Unnamed(0))

如何像使用 JavaScript 一样将此 VBScript 代码与我的批处理代码合并?

我用过的。另存为.cmd文件

<?xml : version="1.0" encoding="UTF-8" ?> ^<!-- This is the cmd zone ---------
@echo off
    setlocal enableextensions disabledelayedexpansion
    set "code=65"
    cscript //nologo "%~f0?.wsf" //job:mainJob %code%
    exit /b
------------------------------------------------ This is the vbs zone ------->
<package>
  <job id="mainJob">
    <script language="VBScript"><![CDATA[
        If WScript.Arguments.Unnamed.Count > 0 Then 
            WScript.StdOut.WriteLine Chr(WScript.Arguments.Unnamed(0))
        End If
    ]]></script>
  </job>
</package>

在这种情况下使用了两个技巧。第一个是将 cmd 部分隐藏在将执行 vbscript 部分的 wsf 文件中的 xml 注释中。第二个技巧是使用 cmd 文件作为脚本调用 cscript 以使用 "%~f0?.wsf" 执行,这将使cscript将文件作为.wsf文件处理,而真正的扩展名是.cmd

但是您应该阅读本文以对问题进行详尽的分析。