我知道我已经回答了类似的问题(Running Batch File in background when windows boots up),但这次我需要启动批处理:
第一批在控制台窗口中执行。但是,我不希望第二批(由第一批以异步方式启动)也显示控制台窗口。
我已经提出了一个VBScript脚本,它就是这样,我把脚本作为answer for others to refer to,但是如果你有其他的想法/解决方案,请随时贡献。
注意:Windows命令处理器的控制台窗口被许多人命名为不太正确的DOS窗口。
谢谢大家的答案。根据我的理解,如果我需要异步调用脚本以在隐形模式下运行:
start /b
就足够了。答案 0 :(得分:109)
这是一个可能的解决方案:
从第一个脚本中,使用以下行调用第二个脚本:
wscript.exe invis.vbs run.bat %*
实际上,您使用以下命令调用vbs脚本:
%*
)然后,invis.vbs将使用Windows Script Host Run() method调用您的脚本,其中包含:
这是invis.vbs:
set args = WScript.Arguments
num = args.Count
if num = 0 then
WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
WScript.Quit 1
end if
sargs = ""
if num > 1 then
sargs = " "
for k = 1 to num - 1
anArg = args.Item(k)
sargs = sargs & anArg & " "
next
end if
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
答案 1 :(得分:51)
您是否需要第二批文件异步运行?通常,一个批处理文件与call
命令同步运行另一个批处理文件,第二个批处理文件将共享第一个窗口。
您可以使用start /b
second.bat 从您的第一个分享第一个批处理文件 a 一个人的窗口。如果两个批处理文件同时写入控制台,则输出将重叠并且可能难以辨认。此外,您需要在第二个批处理文件的末尾添加exit
命令,或者在完成所有操作后,您将在第二个cmd
shell内。
答案 2 :(得分:12)
将批处理文件转换为exe。尝试Bat To Exe Converter或Online Bat To Exe Converter,然后选择将其作为ghost应用程序运行的选项,即无窗口。
答案 3 :(得分:8)
我认为这是在不打开DOS窗口的情况下运行批处理文件的最简单,最简单的解决方案,当您想要安排一组定期运行的命令时,它会非常分散注意力,因此DOS窗口会不断弹出,这里是你的解决方案。 使用VBS脚本调用批处理文件...
Set WshShell = CreateObject("WScript.Shell" )
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0
Set WshShell = Nothing
将上面的行复制到编辑器并保存扩展名为.VBS的文件。相应地编辑.BAT文件名和路径。
答案 4 :(得分:7)
以下是我实现这一目标的方法 - 甚至更多 - 我可能已经尝试返回启动过程的PID(所有链接的脚本都可以下载并以您认为方便的名称保存):
1) IEXPRESS 解决方案甚至可以在旧的win 95/98机器上使用。 Iexpress是一个非常古老的工具,仍然与Windows一起打包 - 因为参数只接受命令及其参数。
使用示例:
call IEXPhidden.bat "cmd /c myBat.bat" "argument"
2) SCHTASKS - 再次只接受两个参数 - 命令和参数。还检查它是否以提升的权限启动,如果可能,使用WEVTUTIL获取进程的PID(从Vista及以上版本可以获得,因此较新版本的Windows将接收PID命令。
使用示例:
call SCHPhidden.bat "cmd /c myBat.bat" "argument"
3) 'WScript.Shell' - 脚本是'WScript.Shell'的完整包装,每个可能的选项都可以通过命令行选项设置。它是一个jscript / batch hybrid,可以被称为蝙蝠。
示例用法(有关详细信息,请使用'-h'打印帮助):
call ShellRunJS.bat "notepad.exe" -style 0 -wait no
4) 'Win32_ProcessStartup' - 再次完整包装,所有选项都可以通过命令行参数访问。这次是WSF /批处理混合,带有一些Jscript和一些VBScript代码 - 但是它返回已启动进程的PID。如果没有隐藏进程,可以使用一些选项,如X / Y坐标(不适用于每个可执行文件 - 但例如cmd.exe接受坐标)。
示例用法(有关详细信息,请使用'-h'打印帮助):
call win32process.bat "notepad" -arguments "/A openFile.txt" -showWindows 0 -title "notepad"
5)。 NET solution 。使用了ProcessStartInfo选项的大多数选项(但最后我太累了,无法包含所有内容):
示例用法(有关详细信息,请使用'-h'打印帮助):
call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt" -style Hidden -directory "." -title "notepad" -priority Normal
答案 5 :(得分:2)
在我提出的另一个问题autoexnt。在这种情况下也是可能的。只需将服务设置为手动运行(即启动时不自动)。如果要运行批处理,请修改autoexnt.bat文件以调用所需的批处理文件,然后启动autoexnt服务。
启动它的批处理文件可能看起来像这样(未经测试):
echo call c:\path\to\batch.cmd %* > c:\windows\system32\autoexnt.bat
net start autoexnt
请注意,以这种方式启动的批处理文件以系统用户身份运行,这意味着您无法自动访问网络共享。但您可以使用 net use 连接到远程服务器。
您必须download the Windows 2003 Resource Kit才能获得它。 Resource Kit也可以安装在其他版本的Windows上,例如Windows XP。
答案 6 :(得分:2)
使用“runas”在不同的用户名下运行,或者在Windows Scheduled Tasks中的其他用户下安排它。
答案 7 :(得分:1)
我知道这已经有了答案,但如果有人偶然发现了这一点,这可能会有所帮助:
这是在后台完全运行它的好方法,没有任何方法可以看到它。您可以与之交互的唯一方法是使用 taskmgr 或 Process Hacker 终止它。
这使用了名为 NirCmd 的第三方工具。
@echo off
nircmd exec hide "MainScript.bat"
将其保存为您喜欢的任何内容。 “MainScript.bat”可以是任何东西,但请稍后注意。
现在,使用您之前记下的名称制作另一个脚本。例如,我将其命名为 MainScript.bat 并提供以下代码:
@echo off
echo Can you see me now?
pause
exit
这将是您要在后台执行的代码。
确保它们在同一目录下,并将 NirCmd 下载到同一目录中。
这是这些脚本的结果:
注意:NirCmd 不是我的工具,但它仍然有用。
答案 8 :(得分:0)
您可以通过.vbs文件运行.bat文件 将以下代码复制到.vbs文件中:
Dim WshShell
Dim obj
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("C:\Users\file1.bat", 0)
obj = WshShell.Run("C:\Users\file2.bat", 0) and so on
set WshShell = Nothing
答案 9 :(得分:0)
您也可以使用
start /MIN notepad.exe
PS:不幸的是,最小化的窗口状态取决于要运行的命令。 V.G.不起作用
start /MIN calc.exe