有时在我的批处理脚本中,我通常将批处理代码与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代码转换为char),但现在在VBScript中:
WScript.echo chr(WScript.Arguments.Unnamed(0))
如何将此VBScript代码与我的批处理代码合并,就像我使用JavaScript一样?
答案 0 :(得分:4)
我用过的东西。要保存为.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>
在这种情况下使用了两个技巧。第一个是在执行vbscript部分的wsf文件中的xml注释中隐藏cmd部分。第二个技巧是使用cmd文件调用cscript作为使用"%~f0?.wsf"
执行的脚本,这将使cscript
将文件作为.wsf
文件处理,而实际扩展名为{{} 1}}
但是你应该阅读this来详尽分析这个问题。