标题: [原创教程] js/bat脚本混编新方案 [打印本页]
作者: CrLf 时间: 2014-11-28 01:46 标题: js/bat脚本混编新方案
本帖最后由 CrLf 于 2014-11-28 02:22 编辑
该方案弥补了三种原有方案的缺点,不过仍然不支持含 */ 的批处理- 1>1/* :
- @echo off
- echo 你好,我是 Batch
- cscript -nologo -e:jscript %0
- pause&exit
- */
-
- WScript.Echo('你好,我是 JScript')
复制代码
和其他的混编方案一样,关键只在第一句复制代码
在 Batch 看来这句相当于:复制代码
这是因为 cmd 在预处理的时候会先解析出句柄重定向(对同一句柄的多次定向以最后出现的为准),再统一后置
所以重定向被预处理到 : 后面,结果可想而知
在 JScript 看来这句相当于:复制代码
1>1 的运行结果是个 Boolean 值,而 js 允许这种无意义的语句(其实对 eval 来说是有意义的)
作者: CrLf 时间: 2014-11-28 02:00
本帖最后由 CrLf 于 2014-11-28 02:13 编辑
经过测试,发现竟然还能简写...- 1>/* :
- @echo off
- echo 你好,我是 Batch
- cscript -nologo -e:jscript %0
- pause&exit
- */
-
- WScript.Echo('你好,我是 JScript')
复制代码
连自己都看不懂,JScript 引擎到底是怎么理解 1> 的,凭什么不报错
为了便于记忆理解,建议还是用顶楼方案吧...
PS:第一句改成 "0</* :"、"2>/* :"、"3>/* :"... "9>/* :" 都行,: 之后可以写任意内容,反正对于两个脚本而言 : 之后的部分都属于注释或标签
作者: CrLf 时间: 2014-11-28 02:04
应该是js/bat混编的最优方案了,就是看起来非常怪异
作者: Demon 时间: 2014-11-28 02:16
留名
作者: CrLf 时间: 2014-11-28 02:23
回复 4# Demon
兄台还没睡,是加班吗?
作者: Demon 时间: 2014-11-28 02:25
回复 Demon
兄台还没睡,是加班吗?
CrLf 发表于 2014-11-28 02:23
打游戏
作者: CrLf 时间: 2014-11-28 03:22
回复 6# Demon
噢...看电影中
作者: bailong360 时间: 2016-3-20 13:25
回复 2# CrLf
似乎是js把注释后面的内容接到>后面去了
以下代码报错- 1>/* :
- cscript -nologo -e:jscript "%~f0"
- pause
- exit
- */
-
- var x = new Array();
复制代码
作者: ai20110304 时间: 2020-2-10 13:17
好帖子。 学到一招
作者: woetu 时间: 2020-7-15 08:53
非常感谢,受益匪浅
作者: woetu 时间: 2020-7-15 14:55
还有一种- @if (0)==(0) echo off
- cscript -nologo -e:jscript %~s0
- goto :EOF
- @end
-
- // **************************** JavaScript *******************************
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |