我正在寻找某种方式来运行批处理文件(.bat),而用户看不到任何东西(没有窗口,没有任务栏名称,等等)。
我不想使用某些程序来执行此操作,我正在寻找更清洁的工具。我已经找到了使用VBScript 的解决方案,但我也不太喜欢使用VBS。
我正在寻找某种方式来运行批处理文件(.bat),而用户看不到任何东西(没有窗口,没有任务栏名称,等等)。
我不想使用某些程序来执行此操作,我正在寻找更清洁的工具。我已经找到了使用VBScript 的解决方案,但我也不太喜欢使用VBS。
Answers:
解决方案1:
将这一行文本另存为file invisible.vbs
:
CreateObject(“ Wscript.Shell”)。Run“”“”&WScript.Arguments(0)&“”“”,0,False
要隐式运行任何程序或批处理文件,请按以下方式使用它:
wscript.exe“ C:\ Weverever \ invisible.vbs”“ C:\ Some Other Place \ MyBatchFile.bat”
为了也可以传递/中继参数列表,请仅使用两个双引号
CreateObject(“ Wscript.Shell”)。运行“”&WScript.Arguments(0)&“”,0,否
例: Invisible.vbs "Kill.vbs ME.exe"
解决方案2:
&
表示连接字符串。字符串用双引号("
)括起来。""
字符串定界符中的连续双引号()表示文字双引号("
)。因此,四个双引号(""""
)将是一个字符的字符串文字,即双引号("
)。将其放在一起,"""" & WScript.Arguments(0) & """"
将变为"<argument>"
,这<argument>
是传递给脚本的第一个命令行参数。
wscript.exe "C:\Wherever\invisible.vbs" ...
放入其中?
隐藏批处理文件或命令文件或任何文件。...使用Windows XP内置IExpress.exe
实用程序从批处理文件中生成.EXE。使用时,请IExpress
确保选中“运行隐藏”选项并选中所有不显示任何内容的复选框。创建.exe后,将其放在您选择的任何运行命令文件夹中,您将永远不会看到它。
使用Cmdow是用于NT4 / 2000 / XP / 2003的Win32命令行实用工具,它允许列出,移动,调整大小,重命名,隐藏/隐藏,禁用/启用,最小化,最大化,还原,激活/非激活,关闭,终止和关闭窗口更多。
运行一个隐藏的批处理文件,并为其传递参数:-
cmdow / run / hid mybat arg1“ arg 2”
如果您的批处理文件可以容纳一行并且包含许多字符,则只需使用快捷方式,方法是右键单击随机目录中的文件夹,然后跳过向导的其余部分,最后右键单击刚刚创建的快捷方式,单击属性,然后在目标下,输入通常放在bat文件中的内容。和鲍伯你的叔叔!
优点:
No Command Window
Ability to use an icon
Same Functionality of bat file
缺点:
Limited to one line, so many characters
通过at作业运行脚本,而无需使其交互:
at 11:00 script.bat
另一个解决方案是,如果您不介意安装Python之类的东西,则可以简单地创建一个脚本并运行它pythonw
(GUI操作的链接版本)。由于您未使用任何图形API,因此不会显示该窗口。只需使用对的调用os.system()
,它将模仿批处理脚本,因为它与在命令行中键入字符串相同。
例:
import os
os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
使用Windows7,您可以使用“计划任务”控制面板来计划批处理文件,使其以指定的权限甚至以“ SYSTEM”帐户身份在后台运行。请参见下面的屏幕截图:
此外,尽管功能不那么多,但是您也可以使用“ AT.exe”命令从命令行创建不可见的批处理脚本任务,而无需使用“ / interactive”选项。
我不喜欢VBScript解决方案。
下载nircmd.exe并将其复制到您的%systemroot%\system32
文件夹,然后将此命令添加到批处理的第一行:
nircmd.exe win hide ititle "cmd.exe"
或先使用title
命令自定义批次标题,以避免隐藏所有cmd
窗口,如下所示:
title MyBatch
nircmd.exe win hide ititle "MyBatch"
似乎有人列出了7-8种运行“静默”方式的清单:
http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html
您还可以创建一个AutoHotkey脚本:
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
从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 );
nircmd.exe win hide ititle "cmd.exe"
现在,您将拥有一个.exe文件,只需双击并安装它,您的.bat文件将完全隐藏。
cmdow /run /hid "file.extention" arg1 "arg 2"
'cmdow' is not recognized as an internal or external command, operable program or batch file.
由于这是重复的文章,我在另一篇文章中添加了我的答案,在这里我看不到此解决方案,因此对于如何运行隐藏的批处理文件,现在有17种不同的答案。我将在不久的将来删除关于该帖子的答案。
使用批处理逻辑和命令创建批处理脚本,然后创建具有.VBS
扩展名的新文件,使用以下逻辑(下面提供的示例),并使用等命令插入您.CMD
或.BAT
文件的完整路径PING -t <IPAddress>
,因此它以隐藏方式执行批处理,而不在执行时显示命令窗口。
下面的示例中的逻辑指定了C:\Folder\BatchFileName.cmd
更改,以指向您现在正在手动运行的命令等批处理脚本。
保存.VBS
文件并使用“ Task Scheduler
在Windows7上计划任务以不确定的时间表运行以满足您的需求”中的问题进行计划。
否则,只需双击该.VBS
文件即可运行PING
您在批处理文件中输入的无限命令(将其指向需要的地方)。
注意: 我相信这是我从中获得此脚本逻辑的地方,但是它可以可靠地工作,以达到您在此处需要的相同目的,即确保在运行批处理文件时隐藏命令窗口。服务器故障源
隐藏CMD窗口的示例VBS脚本运行命令行批处理
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
尽管我已经回答了这,但这是另一种方法。不同的下面是批处理脚本可以自动隐藏自身在它的run.You'll需要两个额外的脚本虽然- 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
我遇到了同样的问题,但发现了:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)
我需要隐藏从资源管理器上下文菜单中调用的批处理文件的窗口,还需要在参数上添加引号。没有一个答案对我有用,因此我添加了自己的解决方案。
我在资源管理器上下文菜单的注册表“命令”上有此命令:
cmd /c C:\mypath\myprogram.bat "%1"
因此,要替换它,我必须创建一个如下的vb:
WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False
保存在类似的地方C:\mypath\myscript.vbs
,然后在注册表中这样调用它:
wscript "C:\mypath\myscript.vbs" "%1"
请注意,.bat路径不能包含空格,因此将其替换为8.3文件名。因此,例如C:\Program Files\myprogram.bat
必须引用为C:\Progra~1\myprogram.bat
。查看8.3文件名的用法dir /x