这是我的情况:
我的问题是我需要我的BAT静默运行,但事实并非如此。所以,我想用以下的Windows脚本启动它:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0
Set WshShell = Nothing
不幸的是,当我安排这个脚本时,它可以完成工作,但会立即返回 ,这使得Windows调度程序认为任务已经完成,而实际上BAT只是在某个地方自行运行。
因此,Windows将在10分钟后重新安排作业并进行多次运行。
我需要什么:
有没有办法告诉Windows脚本文件在进行/退出之前等待.Run命令的目标完成?基本上,我希望它的行为就像我启动了另一个线程,然后调用了它的连接,所以它可以做同样的事情,但是没有显示控制台窗口。
其他解决方案
告诉我任何其他方法让这个BAT静默执行(powershell命令,无论如何),我也会接受它作为解决方案。只是不要告诉我在C ++ / C#应用程序上写一个完整的,这太过分了:)
正在运行: Windows Server 2008 R2
答案 0 :(得分:4)
我认为对于可选的第三个参数
,你需要的只是TRUEWshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0, TRUE
答案 1 :(得分:3)
这就是疯狂......
创建文件invisible.vbs
:
CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, True
然后在任务计划程序中,像这样调用你的脚本:
wscript.exe "C:\Batch Files\invisible.vbs" "C:\Batch Files\syncfiles.bat"
我测试了它,这确实有效:没有命令窗口,任务被认为是在批处理脚本结束之前运行。
信用转到https://superuser.com/a/62646/40362。
对于2008 R2,使invisible.vbs具有此内容,并直接执行它。它会默默运行BAT并等待完成。
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "D:\IUpdateScript.bat", 0, true