以静默方式运行CMD或BAT

时间:2009-01-04 16:45:34

标签: scripting cmd batch-file

如何以静默方式运行CMD或.bat文件?我希望阻止向用户显示CMD界面。

11 个答案:

答案 0 :(得分:39)

加入短语

@echo off

就在你的蝙蝠脚本的顶部。

答案 1 :(得分:36)

我在StackOverflow问题中提出了run a batch file in the background (no DOS windows displayed)

的方法

那应该回答你的问题。

这是:


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

wscript.exe invis.vbs run.bat %*

实际上,您使用以下命令调用vbs脚本:

  • 脚本的[路径] \名称
  • 脚本所需的所有其他参数(%*

然后,invis.vbs将使用Windows Script Host Run() method调用您的脚本,其中包含:

  • intWindowStyle:0表示“隐形窗口”
  • bWaitOnReturn:false表示您的第一个脚本不需要等待第二个脚本完成

请参阅完整的invis.vbs脚本的问题:

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

Tammen的反馈后更新:

如果您在DOS会话中并且想要“在后台”启动另一个脚本,那么简单的/b(详见same aforementioned question)就足够了:

  

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

答案 2 :(得分:8)

http://www.battoexeconverter.com

使用高级BAT到EXE转换器

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

答案 3 :(得分:6)

我认为这是在不打开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 :(得分:6)

使用Bat To Exe Converter执行此操作

http://download.cnet.com/Bat-To-Exe-Converter/3000-2069_4-10555897.html
(选择直接下载链接

1 - 打开Bat to Exe Converter,选择你的Bat文件 2 - 在选项菜单中选择" Invisible Application",然后按编译按钮。

完成!

答案 5 :(得分:5)

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

答案 6 :(得分:3)

如果我想在静默模式下运行命令提示符,那么有一个简单的vbs命令:

Set ws=CreateObject("WScript.Shell")
ws.Run "TASKKILL.exe /F /IM iexplore.exe"

如果我想以静默方式在cmd中打开网址,那么这是一段代码:

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"

答案 7 :(得分:2)

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

Const HIDDEN_WINDOW = 12 

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set objStartup = objWMIService.Get("Win32_ProcessStartup") 

Set objConfig = objStartup.SpawnInstance_ 
objConfig.ShowWindow = HIDDEN_WINDOW 
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process") 
errReturn = objProcess.Create("C:\PathOfFile\name.bat", null, objConfig, intProcessID)

这绝对对我有用。欢迎评论:)

答案 8 :(得分:1)

下面的无提示.bat文件代码可避免需要两个bat文件(使用“ goto”和“:”)。

它都在同一个.bat文件中完成。 经过测试并确认可在Windows 10中正常工作

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

@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

如果您的.bat文件需要的不仅仅是“ Initialized”参数(它告诉bat文件转到:SilentCall部分),还需要更多,请添加“ ^&WScript.Arguments(1 ),”,“ ^&WScript.Arguments(2),”等。根据参数的数量,然后编辑调用wscript.exe的行:

“ wscript.exe C:\ Windows \ Temp \ invis.vbs初始化 BatFileArgOne BatFileArgTwo

答案 9 :(得分:0)

我创建了RunApp来完成这样的工作,并且也在我的生产环境中使用它,希望对您有所帮助。

如下所示的配置:

文件:config.arg

RewritEngine On

RewriteRule ^$ subdirectory/ [L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ subdirectory/$1 [L]

然后启动:style:hidden MyBatchFile.bat arg1 arg2

答案 10 :(得分:0)

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

@echo off > NUL