vbs在cmd下带参数运行生成bat

上面的代码巧妙利用 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脚本:



  • 脚夲需要的所有其他参数c $ c>%* )

然后invis.vbs将使用 ,它需要:



  • bWaitOnReturn:false表示您的第一个脚本不需要等待您的第二个脚本完成

查看完整的invis.vbs脚本的问题:

如果伱在一个DOS会话并且你想在后台启动另一个脚本,一个简单的 / b 在)可以是足够的:

您可以使用 start / b second.bat 从与您的第一个窗口共享的第一个文件异步啟动第二个批处理文件


我要回帖

 

随机推荐