我正在寻找某种方式来运行批处理文件(.bat),而用户看不到任何东西(没有窗口,没有任务栏名称,等等)。

我不想使用一些程序来做到这一点,我正在寻找更清洁的东西。我已经找到了使用VBScript的解决方案,但我也不太喜欢使用VBS。

评论

哈哈!当然不。我正在开发Windows服务,该服务将不时运行批处理文件。

Windows服务不能作为批处理文件运行。它们作为服务运行。您需要澄清问题-就书面内容和评论而言,这对我来说毫无意义。

我有一个运行批处理文件的Windows服务。并非该服务是批处理文件。

您用什么语言编写服务?

也有hstart。

#1 楼

解决方案1:
将这一行文本另存为文件invisible.vbs
 CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False
 

运行任何程序或批处理文件不可见地,请像这样使用它: “> CreateObject("Wscript.Shell").Run "" & WScript.Arguments(0) & "", 0, False
示例:Invisible.vbs "Kill.vbs ME.exe"
方法2:
使用命令行工具以静默方式启动进程:Quiet,hidecon或hideexec。

评论


为什么用双引号4个,请您解释一下?

– Starx
2011年7月28日在7:44

@Starx VB语法。 &表示连接字符串。字符串用双引号(“)引起来。字符串定界符内的连续双引号(”“)表示文字双引号(”)。因此,四个双引号(“”“”)将是一个字符的字符串文字,一个双引号(“)。将它们放在一起,”“”“&WScript.Arguments(0)&”“”“将变为“ ”,其中是传递给脚本的第一个命令行参数。

–鲍勃
2012-12-17 17:39



最终,经过数小时的浪费时间进行搜索和尝试之后,这一台VBS便成功了。谢谢,最简单的解决方案可以从计划任务中静默启动批处理文件。

– Bungle先生
13年5月12日在20:46

如何修改它以便传递所有参数?传递参数而不引用参数会更方便。

– Ctrl-C
2015年6月12日14:13在

这是否还不要求您创建一个批处理文件以将wscript.exe“ C:\ Wherever \ invisible.vbs”放入其中?

– Endolith
17年7月27日在13:52

#2 楼

隐藏批处理文件或命令文件或任何文件...。使用IExpress.exe实用程序中内置的Windows XP从批处理文件中生成.EXE。使用IExpress时,请确保选中“隐藏运行”选项,并选中所有未显示任何内容的复选框。创建.exe后,将其放在您选择的任何运行命令文件夹中,您将永远看不到它。

评论


哦,实际上是好的解决方案。

–卡米洛·马丁(Camilo Martin)
2012年9月8日,下午1:34

在Windows 7等较新的Windows版本中,有什么与lexpress.exe等效的东西?

–Sнаđошƒаӽ
2015年6月23日下午5:00

@Sнаđошƒаӽ它在Windows 7中。

– DarthRubik
16年7月17日在0:12

这似乎在Windows 10 64上不起作用,因为“ Command.com”似乎不再存在

–Arne S
17-10-11在23:10

我可以通过@ArneS确认评论。您可以生成EXE,但由于缺少文件(即Command.com)而无法运行。

–布拉姆·范罗伊
18-10-23在7:27

#3 楼

使用Cmdow是用于NT4 / 2000 / XP / 2003的Win32命令行实用工具,它允许列出,移动,调整大小,重命名,隐藏/隐藏,禁用/启用,最小化,最大化,还原,激活/非激活,关闭,终止和关闭窗口更多。

运行隐藏的批处理文件并传递参数:-


cmdow / run / hid mybat arg1“ arg 2”


评论


但是我将如何运行此命令?

– Moayad Mardini
09-10-29在13:01

大多数防病毒产品都将cmdow检测为恶意软件。因此,很难在您自己的PC之外的其他地方使用此解决方案。

–甘尼什(Ganesh R.)
09-10-29在13:02

@Ganesh:还有更好的解决方案吗?

– Moayad Mardini
09-10-29在13:04

它是开源的吗?使用非开源的第三方应用程序毫无用处,当您可以通过运行harrymc的1行vbscript来完成相同的操作时,可以打包木马(请参阅他在线程顶部的回答)。

–thebunnyrules
17年11月16日13:21



好吧,它是开源的,因此非常棒。可以在这里获取源代码:github.com/ritchielawrence/cmdow

–thebunnyrules
17年11月16日在13:40

#4 楼

通过at作业运行脚本而无需使其交互:创建脚本并使用pythonw(GUI操作的链接版本)运行该脚本。由于您没有使用任何图形API,因此不会显示该窗口。只需使用对os.system()的调用,它将模仿批处理脚本,因为它与在命令行中键入字符串相同。

示例:

at 11:00 script.bat


评论


但是我将如何运行该命令?

– Moayad Mardini
09-10-29在13:07

您将必须安排计划的任务或编写服务。

–没钱的坚果
09-10-29在13:26

添加示例。

– John T
2009年10月29日14:44

#5 楼

如果您的批处理文件可以容纳一行并且包含许多字符,则只需使用快捷方式,方法是右键单击随机目录中的文件夹,然后跳过向导的其余部分,最后右键单击刚创建的快捷方式单击属性,然后在目标下,输入通常放在bat文件中的内容。和Bobs你的叔叔!

优点:

评论


唯一的问题是您不能将文件类型与快捷方式关联。因此,如果要通过在资源管理器中双击打开带有批处理脚本的脚本,则仍需要一个.bat文件。

–BjörnLindqvist
2014年1月24日15:40

我仍在寻找鲍勃叔叔,在任何地方都在这里!

–以前的Pimp Juice IT
17年6月15日在20:13



@BjörnLindqvist对于此用例,我将创建一个启动程序pyw脚本,然后将文件类型分配给该脚本。脚本内容将是例如导入子进程,sys; subprocess.Popen([''path / to / prog.exe',sys.argv [1]],shell = True,stdin = None,stdout = None,stderr = None,close_fds = True,creationflags = subprocess.DETACHED_PROCESS)和该脚本的分配为“ path \ to \ pythonw.exe”“ path \ to \ starter_script.py”“%1”。我发现RapidEE是分配文件类型的理想工具。另请参阅John T关于Python v2运行程序方式的答案。

–尼尔斯·林德曼
20年8月14日在18:20

顺便说一句,我的个人脚本工具功能之一具有签名doubleclick(* args),可完成上述操作。当args仅是[filepath]时,它将使用默认程序打开文件路径。

–尼尔斯·林德曼
20年8月14日在18:30

我在第一个评论中犯了一个错误,我的意思是FileTypesMan,而不是RapidEE(它也非常方便,它可以编辑环境变量)。

–尼尔斯·林德曼
20年8月14日在18:46

#6 楼

我不喜欢VBScript解决方案。

将nircmd.exe下载并复制到您的%systemroot%\system32文件夹中,然后将此命令添加到批处理的第一行:

nircmd.exe win hide ititle "cmd.exe"


,或先使用title命令自定义批次标题,以避免隐藏所有cmd窗口,例如:

title MyBatch
nircmd.exe win hide ititle "MyBatch"


评论


我使用了这种确切的方法,但是有一段时间失败了,nircmd不会隐藏cmd窗口,只是最小化到任务栏,并且无法通过单击来恢复。不知道为什么

–杨洁mes
18年6月21日在1:42

#7 楼

您可以轻松地将其最小化运行。

start /MIN batch.cmd


评论


或改用/ B!

–兰尼
16年6月15日在13:26

start是cmd内置命令。无法从Task Scheduler等获得

– gavenkoa
20年1月25日在19:58

#8 楼

您还可以创建AutoHotkey脚本:

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 


#9 楼

使用Windows7,您可以使用“计划任务”控制面板来计划批处理文件,使其以指定的权限甚至以“ SYSTEM”帐户身份在后台运行。请参见下面的屏幕快照:



此外,尽管功能不那么多,您还可以使用“ AT”从命令行创建像这样的不可见批处理脚本任务。 exe”命令,不带'/ interactive'选项。

评论


“隐藏”复选框仅从“任务计划程序”用户界面中隐藏任务(

– Sourav Ghosh
16-10-25在17:24

在不需要“ SYSTEM”特权(并且没有针对安全性漏洞进行检查和强化)时以“ SYSTEM”身份运行任务是一个坏主意;在这里查看评论。

–斯科特
'18 Sep 1'在16:33



我的理解是,使任务隐藏的原因是“无论用户是否登录都运行”选项。就像Sourav Ghosh所写的那样,复选框“隐藏”只是阻止任务计划程序显示任务定义。有关更多信息,请参见:howtogeek.com/tips/…

–多洛雷斯·史蒂文斯(Dolores Stevens)
20 Jul 13'11:43



#10 楼

出色的Bat To Exe Converter会将您的.bat.cmd文件转换为.exe文件。



它具有简单的UI。通过选择Exe Format选项中的XX Bit | Windows (Invisible),可以选择不具有控制台窗口。此外,它还允许您分配图标,设置密码和其他几个选项。

#11 楼

从C / C ++开始的另一种方式是使用带有CREATE_NO_WINDOW标志的CreateProcess函数。它具有许多此处未显示的额外功能。这只是替换system()或_spawn()系列的最低要求。

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );


评论


WINAPI方法的正确答案。这是源代码和应用程​​序,可作为您答案的补充。

– Alex
19年5月13日在12:26

#12 楼


在另一篇文章中添加我的答案,因为它是重复的,我在这里看不到此解决方案,所以现在有17种不同的答案
,用于隐藏批处理文件的运行方式。我将在不久的将来删除关于该帖子的答案。


使用批处理逻辑和命令创建批处理脚本,然后创建扩展名为.VBS的新文件,请使用以下逻辑(下面提供了示例我所提供的示例),并仅使用.CMD等命令插入.BATPING -t <IPAddress>文件的完整路径,以便它以隐藏方式执行批处理,而在执行时不显示命令窗口。

下面的示例中的逻辑指定了C:\Folder\BatchFileName.cmd的更改,使其指向您正在手动运行的命令等批处理脚本。使用.VBS计划它。在Windows7上计划任务以不确定的时间表运行以满足您的需求时遇到问题。您将其指向需要的地方。

注意:我相信这是我获得此脚本的地方逻辑,但是它可以可靠地用于您在此处需要的相同目的,即确保在运行批处理文件时隐藏命令窗口。服务器故障源
br />
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing


#13 楼

我通过nircmd成功地做到了:


从链接下载nircmd.exe

创建.bat文件
第一行。 bat文件必须是:nircmd.exe win hide ititle "cmd.exe"

选择两个文件,并使用winrar
在“常规”标签中创建一个自解压文件,在“常规”标签中选中“创建自动提取文件”框“高级”选项卡选择“自动提取”按钮
有一个新窗口,然后选择“模式”选项卡,然后选择选项:“隐藏所有内容”
选择选项卡“更新”并选择选项“覆盖现有文件”
如果需要,选择“常规”选项卡并定义要提取的目标文件夹,然后在“提取后执行”框中,输入将提取.bat的完整路径。 :“ c:\ windows \”,则提取后要执行的完整路径将为:“ c:\ windows \ file.bat”(如果您的.bat名为:file.bat)
单击接受所有窗口

现在您将拥有一个.exe文件,双击后,安装后,您的.bat文件将完全隐藏。

#14 楼

尽管我已经回答了这,但这是另一种方法。区别在于批处理脚本可以在运行过程中自行隐藏。尽管如此,您将需要两个附加脚本-windowMode.bat和getCMDPid.bat(均包含.net代码)。那么如何使用:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit


#15 楼

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

如下所示的配置: br />
:style:hidden

MyBatchFile.bat
arg1
arg2


并启动runapp.exe

#16 楼

您不需要执行任何特殊操作。

如果从Windows服务运行批处理文件,则默认情况下应将其隐藏,除非您启用服务。

#17 楼

我需要隐藏从资源管理器上下文菜单中调用的批处理文件的窗口,还需要在参数上添加引号。没有答案对我有用,因此我添加了自己的解决方案。

我在浏览器上下文菜单的注册表“命令”上有此命令:像这样: />请注意,.bat路径不能包含空格,因此将其替换为8.3文件名。因此,例如C:\mypath\myscript.vbs必须引用为C:\Program Files\myprogram.bat。要查看8.3文件名,请使用C:\Progra~1\myprogram.bat

#18 楼

这适用于Windows 8(可能是其他Windows)


照常创建批处理文件
创建批处理文件的快捷方式
右键单击快捷方式>属性
单击布局
取消选中“让系统位置窗口”
设置左位置tp -1000
单击应用
单击快捷方式即可运行,但您不会看到它: )


评论


真?这不会在任务栏上显示为按钮吗?

–斯科特
14年8月16日在0:23

#19 楼

我遇到了同样的问题,但发现了:

Shell("filehere" & "parametersforbatchfilehere", vbHidden)


#20 楼

使用Powershell:
Start-Process -FilePath "Batch file path" -ArgumentList "args" -WindowStyle Hidden 


评论


但是然后您有了PowerShell控制台窗口。

–马丁·普里克里(Martin Prikryl)
20-09-17在11:27