以完全隐藏的方式运行一个批处理文件
我在找一些方法来运行一个批处理文件(.bat),而不需要用户看到任何东西(没有窗口,没有任务栏名称,.等等)。我找到了一个解决方案,使用VBScript,但我也不太喜欢用VBS。
我在找一些方法来运行一个批处理文件(.bat),而不需要用户看到任何东西(没有窗口,没有任务栏名称,.等等)。我找到了一个解决方案,使用VBScript,但我也不太喜欢用VBS。
Arguments(0)& “”“”“”, 0, False
要运行任何程序或批处理文件,可以这样做:
wscript.exe “C:\Wherever\invisible.vbs” “C:\Some Other Place\MyBatchFile. bat”
为了能够传递/转发一个参数列表,只能使用两个双引号
CreateObject(“Wscript.Shell”).Run “” & WScript.Arguments(0) & “ Arguments(0) & ”“, 0, False
示例: invisible.vbs
解决方案2:
要隐藏批处理文件或命令文件或任何文件…..。使用Windows XP内置的IExpress.exe
实用程序,从批处理文件中建立一个.EXE。当使用IExpress
时,请确保你勾选了运行隐藏选项,并在所有不显示任何东西的框中打上标记。当你创建了你的.exe后,把它放在你选择的任何运行命令文件夹中,你将永远不会看到它出现。
我不喜欢VBScript方案。
下载并复制nircmd.exe到你的%systemroot%\system32
文件夹中,然后在批处理的第一行添加这个命令:
nircmd.exe win hide ititle "cmd.exe"
或者先用title
命令自定义你的批处理标题,避免隐藏所有的cmd
窗口,如:
title MyBatch
nircmd.exe win hide ititle "MyBatch"
你可以将其最小化运行。
start /MIN batch.cmd
优秀的【BAT To Exe Converter】(https://www.computerbild.de/download/Bat-To-Exe-Converter-2345613.html)可以将你的`.bat`或`.cmd`文件转换为`.exe`文件。
它有一个简单的UI. 你可以通过选择Exe Format
的XX Bit | Windows (Invisible)
选项来选择没有控制台窗口。此外,它还允许你分配一个图标,设置密码和其他几个选项。
似乎有人列出了7-8种运行 “无声 "的方法:
http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html
还有一种方法是使用C/C++的CreateProcess函数和CREATE/NO/WINDOW标志。它有很多额外的功能,这里没有显示。这只是你替换system()或_spawn()家族所需要的最低限度。
你也可以创建一个 AutoHotkey 脚本:
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
选择这两个文件,然后用winrar创建一个自解压文件 5.在 “常规 "选项卡中,勾选 "创建自动解压文件 "框 6.在 "高级 "选项卡中选择 "自动解压 "按钮 7.有一个新窗口,选择 "模式 "选项卡,然后选择选项。"选择 "更新 "选项卡,选择 "覆盖现有文件” 8. 选择 “一般 "选项卡,如果你想的话,选择 "一般 "选项卡,然后定义一个目标文件夹,在 "提取后执行 "框中写上你的.bat将被提取的完整路径。例如:如果你将提取文件夹定义为: "c:\windows\",那么提取后的完整路径将是: "c:\windows\file.bat” (如果你的.bat被命名为:file.bat) 10.在所有窗口上点击接受
现在你将会有一个.exe文件,当你点击它并安装后,你的.bat将完全隐藏起来。
**在这里添加了我在另一个帖子中的答案,因为它是重复的,而且我在这里没有看到这个解决方案,所以现在有17个不同的答案,关于如何运行一个隐藏的批处理文件。我将在不久的将来的某个时候删除我在那篇帖子上的答案。*
创建你的批处理脚本,里面有你的批处理逻辑和命令,然后创建一个新的以.VBS
为扩展名的文件,使用下面的逻辑(我在下面提供的例子),然后只需将你的.CMD
或.BAT
文件的完整路径插入PING -t <IPAddress>
等命令,这样它就会在C:\Folder\BatchFileName.cmd
文件中执行批处理。在下面的例子中,如果逻辑中指定的是.VBS
,那么就把它改成批处理脚本的完整路径,并将其指向你正在手动运行的命令等。
保存Task Scheduler
文件,然后用.VBS
在windows7上调度任务的问题将其无限期调度运行,以满足你的需求。
否则,只需双击PING
文件,运行你在批处理文件中放置的无限期&007命令,你把它指向的批处理文件中的命令按需要运行。
注:*我相信这是我从这个脚本逻辑中得到的,但它的工作原理和你在这里需要的目的是一样的,那就是当批处理文件运行时,确保命令窗口被隐藏服务器故障源
示例VBS SCRIPT RUN COMMAND LINE BATCH HIDING CMD WINDOW
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
尽管我已经回答了这个问题,但这里有另一个方法。你需要两个额外的脚本 - 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
我需要隐藏一个从资源管理器上下文菜单中调用的批处理文件的窗口,还需要在参数上添加引号。没有一个答案对我有效,所以我把自己的解决方案加进去。
我在注册表中的资源管理器上下文菜单的 “命令 "中是这样的:
cmd /c C:\mypath\myprogram.bat "%1"
所以要替换掉它,我必须创建一个像这样的vbs:
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
我创建了RunApp来做这样的工作,也在我的生产环境中使用,希望对你有帮助。
file: config.arg*
:style:hidden
MyBatchFile.bat
arg1
arg2
并启动runapp.exe
代替。
我也遇到过同样的问题,但想通了:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)