我知道如何在没有窗口的情况下运行batch file,这要感谢以下问题: 在没有窗口的计划任务中运行.bat文件 。
第一个答案是我正在使用的。 它声明要运行没有窗口的batch file,请创build以下vbs文件并改为运行vbs文件。
Dim WinScriptHost Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0 Set WinScriptHost = Nothing
我的问题是,是否有可能在一个单一的文件中做到这一点。 (以某种方式组合vbs脚本和一个batch file脚本)上面的答案需要两个文件,因为vbs文件引用了一个batch file。 如果可能的话,怎么做?
在脚本中,创build一个临时文件并将batch file写入其中。 然后从临时文件执行脚本。 完成后删除临时文件。
理想情况下,将临时文件写入其他用户无法访问的位置,因为您可能存在可能用于提升权限的竞争条件。
在http://www.dostips.com/forum/viewtopic.php?f=3&t=5543上有很多创build混合脚本的方法。
我已经列出了许多方法来创build混合VBS /批处理https://stackoverflow.com/q/9074476/1012053 。
但是,创build混合JScript /批处理会更容易,所以我将在这里介绍这个解决scheme。
大多数混合体首先执行批处理部分,然后通过CScript执行VBS或JScript。 但在你的情况下,你想先运行JScript,然后运行批处理脚本。 请注意,脚本必须仍然具有.bat扩展名才能运行批处理脚本。 JScript首先通过WScript和//e:jscript选项运行。
这是一个简单的混合脚本应该做的伎俩:
@if (@X)==(@Y) @end /* harmless hybrid line that begins a JScript comment ::************ Batch portion *********** @echo off :: Your batch code goes here exit /b ************ JScript portion ***********/ var objShell = new ActiveXObject("WScript.shell"); objShell.run(WScript.ScriptFullName,0);
计划任务的完整命令行应该如下所示:
C:\Windows\System32\wscript.exe //e:jscript "C:\Scheduled Jobs\mybat.bat"
此解决scheme的一个特别好的function是,您可以直接运行批处理脚本,并且它将在可见的cmd.exe窗口中正常执行,也可以通过WSCRIPT将其激活以执行不可见的操作。