如何在一个文件中运行没有窗口的批处理文件

如何在一个文件中运行没有窗口的批处理文件

由于这个问题,我知道如何在没有窗口的情况下运行批处理文件:在没有窗口的计划任务中运行.bat 文件

第一个答案是我正在使用的答案。它指出,要运行没有窗口的批处理文件,请创建以下 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 脚本和批处理文件脚本)上面的答案需要两个文件,因为 vbs 文件指的是批处理文件。如果可能,该怎么做?

答案1

在脚本中创建一个临时文件并将批处理文件写入其中。然后从临时文件执行脚本。完成后删除临时文件。

理想情况下,将临时文件写入其他用户无法访问的位置,因为那里存在潜在的竞争条件,可用于提升权限。

答案2

有很多方法可以创建混合脚本,详见http://www.dostips.com/forum/viewtopic.php?f=3&t=5543

我列出了创建混合 VBS/批处理的多种方法https://stackoverflow.com/q/9074476/1012053

但是,创建混合 JScript/batch 要容易一些,所以我将在这里介绍该解决方案。

大多数混合脚本首先执行批处理部分,然后通过 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"

该解决方案的一个特别好的功能是您可以直接运行批处理脚本,它将在可见的 cmd.exe 窗口中正常运行,或者您可以通过 WSCRIPT 激活它以进行不可见的执行。

相关内容