Scripting 在静默模式下运行CMD或BAT

Scripting 在静默模式下运行CMD或BAT,scripting,cmd,batch-file,Scripting,Cmd,Batch File,如何在静默模式下运行CMD或.bat文件?我希望防止CMD界面显示给用户。包括以下短语: @echo off 就在您的bat脚本的顶部。我在StackOverflow问题中提出了一种 这应该能回答你的问题 这是: 在第一个脚本中,使用以下行调用第二个脚本: wscript.exe invis.vbs run.bat %* 实际上,您正在使用以下命令调用vbs脚本: 脚本的[路径]\n名称 脚本所需的所有其他参数(%*) 然后,Invi.vbs将使用调用脚本,这需要: IntWindo

如何在静默模式下运行CMD或.bat文件?我希望防止CMD界面显示给用户。

包括以下短语:

@echo off

就在您的bat脚本的顶部。

我在StackOverflow问题中提出了一种

这应该能回答你的问题

这是:


在第一个脚本中,使用以下行调用第二个脚本:

wscript.exe invis.vbs run.bat %*
实际上,您正在使用以下命令调用vbs脚本:

  • 脚本的[路径]\n名称
  • 脚本所需的所有其他参数(
    %*
然后,Invi.vbs将使用调用脚本,这需要:

  • IntWindowsStyle:0表示“不可见窗口”
  • bWaitOnReturn:false表示第一个脚本不需要等待第二个脚本完成
有关完整的Invi.vbs脚本,请参见问题:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
                                                         ^
                             means "invisible window" ---| 

Tammen反馈后更新:

如果您在DOS会话中,并且希望“在后台”启动另一个脚本,则一个简单的
/b
(如中所述)就足够了:

您可以使用
start/b second.bat
从共享第一个批处理文件窗口的第一个批处理文件异步启动第二个批处理文件


试试。这是一个小型免费软件程序,执行批处理文件时不显示命令提示窗口。

使用来自的高级BAT到EXE转换器


这将允许您将批处理文件中的任何附加二进制文件嵌入到一个独立的完全静默EXE及其免费软件中

如果我想在静默模式下运行命令promt,则有一个简单的vbs命令:

Set ws=CreateObject("WScript.Shell")
ws.Run "TASKKILL.exe /F /IM iexplore.exe"
如果我想在cmd中以静默方式打开url,那么下面是一个代码:

Set WshShell = WScript.CreateObject("WScript.Shell") 
Return = WshShell.Run("iexplore.exe http://otaxi.ge/log/index.php", 0)
'wait 10 seconds
WScript.sleep 10000 
Set ws=CreateObject("WScript.Shell")
ws.Run "TASKKILL.exe /F /IM iexplore.exe"

我很自信我最喜欢这种方法。将下面的代码复制并粘贴到.vbs文件中。从那里您将调用批处理文件。。。因此,请确保编辑最后一行以指定批处理文件的路径和名称(该文件应包含要启动的文件或要执行的操作)


这对我来说确实有效。欢迎评论:)

我认为这是在不打开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文件名和路径。

使用BAT到Exe转换器执行此操作


(选择直接下载链接)

1-打开Bat到Exe转换器,选择Bat文件。
2-在选项菜单中选择“不可见应用程序”,然后按编译按钮

完成了

我生来就是要做这样的工作,并且在我的生产环境中使用它,希望能有所帮助

配置如下所示:

文件:config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

然后启动
runapp.exe

另一种方法,无需第三方程序或转换器(“batch to exe”程序实际上只是将批处理文件放在tmp文件夹中,然后静默运行,这样任何人都可以从那里获取批处理文件并获取代码)没有vbs文件(因为没有人知道vbs)批处理文件开头只有一行

@echo off > NUL

下面的silent.bat文件代码防止需要两个bat文件(使用“goto”和“:”)

它在同一个.bat文件中完成所有操作已测试并确认在Windows 10中工作

确保将“C:\pathToFile\ThisBatFile.bat”替换为该.bat文件的路径!保留“.bat”后面的空格。

如果.bat文件需要的不仅仅是“Initialized”参数(告诉bat文件转到:SilentCall部分),请添加“^&WScript.Arguments(1)、”、“^&WScript.Arguments(2)、”等,具体取决于参数的数量,然后编辑调用WScript.exe的行:


“wscript.exe C:\Windows\Temp\invi.vbs已初始化BatFileArgOneBatFileArgTwo

对其进行了一些改进(格式化,在前面添加了@,以便echo语句本身不会导致输出)。但是,这不会阻止调用命令的输出。调用时将输出重定向到>NUL 2>NUL可以做到这一点。@calvin:这个答案的第二部分只显示DOS命令。根据您的上下文,您可以使用DOS命令在静默模式下运行脚本(在中的答案中也有详细说明)@VonC感谢您提供了非常好的答案,并使我免于额外几天的调查:Dperfect..像一个charmSimple一样工作。工作完美。因为我的批处理文件刚开始只调用一个命令,所以我能够完全消除它,并将该命令放在VBS中。谢谢。@grt3kl当然!如果您的命令只有几行,只需将其直接放入VBS文件中,它就能完美地工作。我将其放在
.cmd
文件的开头,它仍然会打开一个命令行窗口。这是怎么回事?
@echo off > NUL
@echo off
if [%1]==[] (
    goto PreSilentCall
) else (
    goto SilentCall
)

:PreSilentCall
REM Insert code here you want to have happen BEFORE this same .bat file is called silently
REM such as setting paths like the below two lines

set WorkingDirWithSlash=%~dp0
set WorkingDirectory=%WorkingDirWithSlash:~0,-1%

REM below code will run this same file silently, but will go to the SilentCall section
cd C:\Windows\System32
if exist C:\Windows\Temp\invis.vbs ( del C:\Windows\Temp\invis.vbs /f /q )
echo CreateObject("Wscript.Shell").Run "C:\pathToFile\ThisBatFile.bat " ^& WScript.Arguments(0), 0, False > C:\Windows\Temp\invis.vbs
wscript.exe C:\Windows\Temp\invis.vbs Initialized
if %ERRORLEVEL%==0 (
    echo Successfully started SilentCall code. This command prompt can now be exited.
    goto Exit
)


:SilentCall
cd %WorkingDirectory%
REM Insert code you want to be done silently. 
REM Make sure this section has no errors as you won't be able to tell if there are any, 
REM since it will be running silently. You can add a greater than symbol at the end of
REM your commands in this section to output the results to a .txt file for the purpose 
REM of debugging this section of code.


:Exit