目前我的批处理文件是这样的:
myprogram.exe param1
程序启动,但 DOS 窗口保持打开状态。我怎样才能关闭它?
使用start命令,防止批处理文件等待程序。只要记住在“开始”之后要运行的程序前面加上一个空的双引号即可。 例如,如果您想从批处理命令运行 Visual Studio 2012:
Start "" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"
注意开始后的双引号。
可以使用exit关键字。这是我的一个批处理文件中的示例:
start myProgram.exe param1
exit
看START命令,可以这样做:
START rest-of-your-program-name
例如,这个批处理文件将等到记事本退出:
@echo off
notepad c:\test.txt
然而,这不会:
@echo off
start notepad c:\test.txt
来自我的自己的问题:
start /b myProgram.exe params...
如果您从现有的 DOS 会话启动程序,则有效。
如果没有,调用一个vb脚本
wscript.exe invis.vbs myProgram.exe %*
Windows Script Host Run() 方法需要:
这里是 invis.vbs:
set args = WScript.Arguments
num = args.Count
if num = 0 then
WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
WScript.Quit 1
end if
sargs = ""
if num > 1 then
sargs = " "
for k = 1 to num - 1
anArg = args.Item(k)
sargs = sargs & anArg & " "
next
end if
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
当我尝试从批处理文件运行 java 类时,这是唯一对我有用的东西:
start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm
您可以根据需要为您的项目自定义
start
命令,遵循正确的语法:
Syntax
START "title" [/Dpath] [options] "command" [parameters]
Key:
title : Text for the CMD window title bar (required)
path : Starting directory
command : The command, batch file or executable program to run
parameters : The parameters passed to the command
Options:
/MIN : Minimized
/MAX : Maximized
/WAIT : Start application and wait for it to terminate
/LOW : Use IDLE priority class
/NORMAL : Use NORMAL priority class
/HIGH : Use HIGH priority class
/REALTIME : Use REALTIME priority class
/B : Start application without creating a new window. In this case
^C will be ignored - leaving ^Break as the only way to
interrupt the application
/I : Ignore any changes to the current environment.
Options for 16-bit WINDOWS programs only
/SEPARATE Start in separate memory space (more robust)
/SHARED Start in shared memory space (default)
你应该试试这个。它在没有窗口的情况下启动程序。它实际上闪烁了一秒钟,但很快就消失了。
start "name" /B myprogram.exe param1
如何解决“空间问题”和本地依赖:
@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe
cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe
exit
这个问题已经有很多答案了,但是我发布这个是为了强调一些重要的事情:
Start "C:\Program Files\someprog.exe"
以上内容可能会在某些 Windows 版本中引起问题,因为
Start
实际上期望第一组引号是 Windows 标题。所以最好先双引号评论,或空白评论:
Start "" "C:\Program Files\someprog.exe"
或
Start "Window Title" "C:\Program Files\someprog.exe"
我从 GUI 执行此操作的解决方案:
创建要运行的程序的快捷方式;
编辑快捷方式的属性;
将
TARGET
字段更改为%COMSPEC% /C "START "" "PROGRAMNAME""
;将
RUN
字段更改为最小化。准备好!看你喜不喜欢……
PS:最后两个引号之间可以插入程序参数;
PROGRAMNAME
字符串可以是文件名、相对路径或绝对路径——如果您输入绝对路径并删除驱动器号和分号,那么无论主机分配给什么字母,它都可以在拇指驱动器中使用它...(另外,如果您将快捷方式放在同一文件夹中,并在 PROGRAMNAME
中的程序文件名之前加上 %CD%
变量,路径将始终匹配;同样的技巧可以在 START IN
字段中使用)。
如果您希望按计划或始终运行此批处理文件;您可以使用 Windows 计划工具,它在启动批处理文件时不会在窗口中打开。
打开
Task Scheduler
:
'cmd'
taskschd.msc
->输入在右侧,单击
Create Basic Task
并按照菜单进行操作。
希望这有帮助。
这是我的首选解决方案。它取自对类似问题的answer。
使用VBS脚本调用批处理文件:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing
将上面的行复制到编辑器并使用 .VBS 扩展名保存文件。