Windows XP或更高版本Windows:如何在没有显示窗口的情况下在后台运行批处理文件?
我知道我已经回答了一个类似的问题(),但这次我需要启动一批:Windows XP或更高版本Windows:如何在没有显示窗口的情况下在后台运行批处理文件?,windows,batch-file,cmd,wsh,Windows,Batch File,Cmd,Wsh,我知道我已经回答了一个类似的问题(),但这次我需要启动一批: 从另一批, 没有显示任何控制台窗口 将所有参数传递给不可见批处理 第一批在控制台窗口中执行。但是,我不希望第二批(第一批以异步方式启动)也显示控制台窗口 我已经提出了一个VBScript脚本,它就是这样做的,我把这个脚本作为一个例子,但是如果你有其他的想法/解决方案,请随意贡献 注意:许多人将Windows命令处理器的控制台窗口命名为“并非真正正确的DOS窗口” 谢谢大家的回答。据我所知,如果我需要异步调用脚本以不可见模式运行:
- 从另一批,
- 没有显示任何控制台窗口
- 将所有参数传递给不可见批处理
谢谢大家的回答。据我所知,如果我需要异步调用脚本以不可见模式运行:
- 从已经在控制台窗口中的第二个脚本开始,
就足够了start/b
- 在Windows中,在不触发第二个窗口的情况下,我的解决方案仍然有效
- 以下是一个可能的解决方案:
在第一个脚本中,使用以下行调用第二个脚本:
wscript.exe invis.vbs run.bat %*
实际上,您正在使用以下命令调用vbs脚本:
- 脚本的[路径]\n名称
- 脚本所需的所有其他参数(
)%*
- IntWindowsStyle:0表示“不可见窗口”
- bWaitOnReturn:false表示第一个脚本不需要等待第二个脚本完成
set args=WScript.Arguments
num=args.Count
如果num=0,则
Echo“用法:[CScript|WScript]invi.vbs aScript.bat”
WScript.Quit 1
如果结束
sargs=“”
如果num>1,则
sargs=“”
对于k=1到num-1
anArg=参数项(k)
sargs=sargs&anArg&“
下一个
如果结束
设置WshShell=WScript.CreateObject(“WScript.Shell”)
WshShell.Run“”&WScript.Arguments(0)和“”&sargs,0,False
是否需要第二个批处理文件异步运行?通常,一个批处理文件与call
命令同步运行另一个批处理文件,第二个批处理文件将共享第一个批处理文件的窗口
可以使用
start/b
second.bat从共享第一批文件窗口的第一批文件同步启动第二批文件a。如果两个批处理文件同时写入控制台,则输出将重叠,可能无法识别。此外,您还需要在第二个批处理文件的末尾放置一个exit
命令,或者在完成所有操作后,您将在第二个cmd
shell中。在我建议的另一个问题中。在这种情况下,这也是可能的。只需将服务设置为手动运行(即启动时不自动)。要运行批处理时,请修改autoexnt.bat文件以调用所需的批处理文件,然后启动autoexnt服务
启动此操作的批处理文件可以如下所示(未测试):
请注意,以这种方式启动的批处理文件以系统用户身份运行,这意味着您无法自动访问网络共享。但是您可以使用netuse连接到远程服务器
你必须得到它。资源工具包也可以安装在其他版本的windows上,如windows XP。将批处理文件转换为exe。请尝试或,然后选择将其作为重影应用程序运行的选项,即无窗口 在不同的用户名下运行它,使用“runas”或在Windows计划的任务中在不同的用户下调度它。我认为这是在不打开DOS窗口的情况下运行批处理文件的最简单和最短的解决方案,当您要计划定期运行一组命令时,这可能会让您分心,所以DOS窗口不断弹出,这是你的解决方案。 使用VBS脚本调用批处理文件
Set WshShell=CreateObject(“WScript.Shell”)
运行chr(34)和“C:\Batch Files\mycommands.bat”&chr(34),0
设置WshShell=Nothing
将上面的行复制到编辑器中,并以.VBS扩展名保存文件。相应地编辑.BAT文件名和路径。您可以通过.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
对于自隐藏,您可以使用和:
以下是我收集的实现方法——甚至更多——在可能的情况下,我还尝试返回已启动流程的PID(所有链接的脚本都可以下载并使用您认为方便的任何名称保存):
call IEXPhidden.bat "cmd /c myBat.bat" "argument"
call SCHPhidden.bat "cmd /c myBat.bat" "argument"
call IEXPhidden.bat "cmd /c myBat.bat" "argument"
call SCHPhidden.bat "cmd /c myBat.bat" "argument"
call ShellRunJS.bat "notepad.exe" -style 0 -wait no
call win32process.bat "notepad" -arguments "/A openFile.txt" -showWindows 0 -title "notepad"
call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt" -style Hidden -directory "." -title "notepad" -priority Normal
start /MIN notepad.exe
start /MIN calc.exe