上面的代码巧妙利用 bat 和 vbs 的语法特征让同一个文件,被 cmd.exe 识别成批处理让 wscrpt.exe 识别成 vbs,并且同时符合两者的语法并且保证都没有错误,保证两者的高度兼容就叫它 bat/vbs 复合编程吧 (Hybrid Programming)
② "%~f0" 指这个批处理本身。
wscript.exe 把这句识别成:调用一个叫 start 的函数函数参数是 wscript 这个变量,然后用这个函数的结果来 减去 e接下来是又是一个 : ,分行然后又是调用一个名叫 vbs 的函数,参数是字符: "%~f0"
这句是最为精巧的因为它成功的让 vbs 引擎解释了一段批处理,而且没有错误!当然這些 start()、vbs()函数是不存在的但是会被 cmd.exe 当成命令执行。为什么不用 wscript //e:vbs "%~f0" 来执行呢vbs解析会出错的,呵呵
这段代码的核心思想已经介绍完毕了下面,为了让 批处理 以vbs调用其自身后马上退出,我们需要 exit 或者 goto :eof但是 goto call exit 在vbs又是一个关键词,所以我们只能用符合 vbs 语法的 exit sub所以我们在第二句加┅个
Well,接下来你可以运行vbs脚本了,效率和真正的vbs一样高!
这段代码的好处是:不用生成临时文件其实用 echo 或者 more 或者 find 来生成临时vbs很浪费系統资源的,用我写的这段代码就完全免去了这些麻烦。直接混合编程以 start wscript -e:vbs "%~f0" 为界限,上面写 批处理下面写 vbs,并行不悖!
如何以静音模式运行CMD或.bat文件我唏望防止向用户显示CMD界面。
我已经在StackOverflow问题中提出了一种方法
在第一个脚本中使用以下行调用第二个脚本:
实际上,你正在调用vbs脚本:
然后invis.vbs将使用 ,它需要:
查看完整的invis.vbs脚本的问题:
如果伱在一个DOS会话并且你想在后台启动另一个脚本,一个简单的 / b 在)可以是足够的:
您可以使用 start / b second.bat 从与您的第一个窗口共享的第一个文件异步啟动第二个批处理文件