温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解批处理与VBS_JS混编

发布时间:2021-10-14 10:11:59 来源:亿速云 阅读:160 作者:iii 栏目:编程语言

这篇文章主要介绍“如何理解批处理与VBS_JS混编”,在日常操作中,相信很多人在如何理解批处理与VBS_JS混编问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解批处理与VBS_JS混编”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

让我们以VBS为例来具体看看这种方法

'&Cls&@Echo off&Start "" Wscript -Nologo -E:Vbscript "%~0"Msgbox "Hello,world!"

将上面的例子保存为Bat或Cmd运行,再保存为Vbs或Vbe运行,结果是否一样呢?
如果读者已经亲自测试,就会发现,上面那段代码在存为批处理文件时(拓展名Bat或Vbs)会先闪一下CMD窗口,再弹出MessageBox;而存为Vbs或Vbe则会直接弹出MessageBox窗口(当Wsh默认宿主为Cscript时伴随着CMD窗口的出现,作者默认该文章的读者已经熟悉Wscript宿主和Cscript的区别,在此不再赘述)。
让我们来解读一下这些命令。http://www.0391yy.com/
Line1:
如果拓展名为Vbs或Vbe,被解释器当作注释忽略;
如果拓展名为Bat或Cmd,则被解析为四条命令,如下:

‘Cls@Echo offStart "" Wscript -Nologo -E:Vbscript "%~0"

执行第一条命令时,由于无法找到 ’ 命令而报错。但Cmd的特殊的错误处理机制促使其忽略错误并继续执行。
执行第二条命令时,屏幕上的命令回显和错误信息被清除。
执行到第三条命令时,回显被关闭。
执行到第四条命令时,开启一个新的Wscript.EXE脚本宿主并强制将自身当Vbscript运行。
Line2:
如果拓展名为Vbs或Vbe,则执行MsgBox过程。
如果拓展名为Bat或Cmd,则由于无法找到Msgbox命令而报错,又因无指令可执行而退出。
上面的两行还可以精简为一行,如下:

Msgbox "Hello,world!" '&Cls&@Echo off&Start "" Wscript -Nologo -E:Vbscript "%~0"

这样的一行代码也可以正常执行,其原理不再赘述。
或者咱就是任性,拆分成多行:

Msgbox "Hello,world!"'&Cls&@Echo off 2>Nul 3>Nul
'&Start "" Wscript -Nologo -E:Vbscript "%~0"

这样的代码当然也可以正常执行,但有眼尖的读者可能会注意到,第二行的@Echo off后面多了个2>Nul 3>Nul,这是什么意思呢?其实就是将错误回显屏蔽掉,以便保证正常回显不被错误回显分隔开。
想要详细了解2>Nul 3>Nul的含义,请阅读普及讲解重定向。
看到这里,相信读者已经明白了注释混编法的原理了。
那么,读者可能会问了,如果Vbs和Bat要交互执行呢?
其实,也是可行的~
看下面的示例代码:

Execute Wscript.Arguments(0) '&Cls&@Echo off 2>nul 3>nul'&Echo 我是Bat
'&Pause'&Cscript -nologo -E:Vbscript "%~0" Func1
Sub Func1
    Msgbox "我是Vbs"
End Sub
'&Echo 我Bat又回来了
'&Set /p str=输入一个字符串:
'&For /f %%a in ('Cscript -Nologo -E:Vbscript "%~0" "Strlen wsh.Arguments(1)" "%Str%"') Do Set /A strlen=%%aSub Strlen(String)
    Wscript.Echo Len(String)
End Sub
'&Echo 你输入的字符串的长度是%Strlen%。
'&Echo 演示结束&Pause

需存为批处理运行。
上面的代码的流程为从上到下执行,当然Vbs语句可以放到后面去,但是为了可读性,就交错放置了。
下面来解读一下:
Line1:第一行,既有批处理命令又有Vbs语句。Vbs语句的意思是动态执行该Vbs接收到的第一个参数(即将第一个参数当语句执行)。
Line2&3:批处理命令。
Line4:批处理语句,把自身当VBS调用,并执行VBS语句:Func1。
**Line5&6&7:**Vbs语句,定义Func1。
Line8&9:批处理命令,回显、设置变量。
Line10:批处理语句,执行Vbs语句“Strlen wsh.Arguments(1)”并将批处理的Str变量传递为第二个参数,然后获取其回显。
Line11&12&13:定义Strlen函数。
Line14&15:批处理命令。

到此,关于“如何理解批处理与VBS_JS混编”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI