这是Windows中的批处理文件。
这是我的.bat文件
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
"C:\ThirdParty.exe"
除了.bat文件在“ThirdParty”应用程序运行的整个时间内打开命令窗口之外,这个工作正常。 我需要命令窗口关闭。
我会使用应用程序的快捷方式,但我必须能够首先运行此复制命令(它实际上会更改用于应用程序的数据库和服务器)。
ThirdParty应用程序不允许用户更改db或应用程序服务器的源。
我们这样做是为了允许用户从测试环境更改为生产环境。
答案 0 :(得分:42)
使用start
对我有用:
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
编辑:好的,仔细观察,start
似乎将第一个参数解释为引用的新窗口标题。因此,如果您需要引用ThirdParty.exe的路径,您还必须提供标题字符串。
示例:
:: Title not needed:
start C:\ThirdParty.exe
:: Title needed
start "Third Party App" "C:\Program Files\Vendor\ThirdParty.exe"
答案 1 :(得分:20)
使用以下代码创建.vbs
文件:
CreateObject(“Wscript.Shell”)。运行“your_batch.bat”,0,True
此.vbs
将隐藏your_batch.bat
。
对我来说很好。
答案 2 :(得分:9)
试试这个:
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
exit
答案 3 :(得分:7)
很棒的提示。它适用于运行java程序的批处理文件。
start javaw -classpath "%CP%" main.Main
答案 4 :(得分:6)
使用start
可以正常工作,除非您使用的是脚本语言。幸运的是,Python有一条出路 - 只需使用pythonw.exe
代替python.exe
:
:: Title not needed:
start pythonw.exe application.py
如果您需要引号,请执行以下操作:
:: Title needed
start "Great Python App" pythonw.exe "C:\Program Files\Vendor\App\application.py"
答案 5 :(得分:3)
我还没有真正找到一种很好的方法来做到这一点,所以我只使用一个名为hstart的实用工具来为我做。如果有一种更简洁的方法,那就太好了。
答案 6 :(得分:3)
您可能有兴趣尝试运行.bat
/ .cmd
脚本的silentbatch程序,完全禁止创建命令提示符窗口(因此您不会看到它)出现然后消失),并可选择将输出记录到指定的文件。
答案 7 :(得分:3)
您可以创建一个强制隐藏窗口的VBS脚本。
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("""C:\Program Files (x86)\McKesson\HRS
Distributed\SwE.bat""", 0)
set WshShell = Nothing
然后,不是执行批处理文件,而是执行脚本。
答案 8 :(得分:2)
使用Batch2Exe http://www.f2ko.de/programs.php?lang=en&pid=b2e将批处理文件编译为可执行文件。 使用“隐形窗口”选项。
答案 9 :(得分:1)
请使用此,以上不起作用。我已在Window server 2003中测试过。
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
Start /I "" "C:\ThirdParty.exe"
exit
答案 10 :(得分:1)
在不同的用户下运行它。假设这是一个Windows框,请为计划任务创建一个用户帐户。以该用户身份运行它。命令提示符仅显示当前登录的用户。
答案 11 :(得分:1)
要使执行.exe文件的.bat文件的命令窗口尽快退出,请在您尝试执行的文件之前使用行@start
。这是一个例子:
(insert other code here)
@start executable.exe
(insert other code here)
您不必使用@start executable.exe
的其他代码。
答案 12 :(得分:1)
或者您可以使用:
Start /d "the directory of the executable" /b "the name of the executable" "parameters of the executable" %1
(%1是一个文件传递给你的可执行文件,例如notepad.exe foo.txt,这里%1是“foo.txt”。
start命令的/ b参数执行此操作: “在不打开新的命令提示符窗口的情况下启动应用程序。除非应用程序启用CTRL + C处理,否则将忽略CTRL + C处理。使用CTRL + BREAK中断应用程序。” 这正是我们想要的。
答案 13 :(得分:1)
我用它从c#开始一个cmd文件:
Process proc = new Process();
proc.StartInfo.WorkingDirectory = "myWorkingDirectory";
proc.StartInfo.FileName = "myFileName.cmd";
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
答案 14 :(得分:0)
使用Windows API,我们可以启动新进程,控制台应用程序,并隐藏其“黑色”窗口。这可以在创建过程时完成,并且完全避免显示“黑色”窗口。
在CreateProcess函数中,dwCreationFlags
参数可以具有CREATE_NO_WINDOW标志:
The process is a console application that is being run
without a console window. Therefore, the console handle
for the application is not set. This flag is ignored if
the application is not a console application
这里是使用此方法和hide-win32-console-window executable到source code的链接。
hide-win32-console-window
与Jamesdlin's silentbatch program相似。
有一个开放的问题:当程序的窗口不存在时该怎么处理输出?如果发生异常怎么办?丢弃输出不是一个好的解决方案。 hide-win32-console-window
使用匿名管道将程序的输出重定向到当前目录中创建的文件。
batchscript_starter.exe 完整/路径/到/应用程序 [要传递的参数]
batchscript_starter.exe c:\Python27\python.exe -c "import time; print('prog start'); time.sleep(3.0); print('prog end');"
在名为python.2019-05-13-13-32-39.log
的工作目录中创建输出文件,并使用python命令的输出:
prog start
prog end
batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C dir .
在名为cmd.2019-05-13-13-37-28.log
的工作目录中创建输出文件,并从CMD中输出:
Volume in drive Z is Storage
Volume Serial Number is XXXX-YYYY
Directory of hide_console_project\hide-win32-console-window
2019-05-13 13:37 <DIR> .
2019-05-13 13:37 <DIR> ..
2019-05-13 04:41 17,274 batchscript_starter.cpp
2018-04-10 01:08 46,227 batchscript_starter.ico
2019-05-12 11:27 7,042 batchscript_starter.rc
2019-05-12 11:27 1,451 batchscript_starter.sln
2019-05-12 21:51 8,943 batchscript_starter.vcxproj
2019-05-12 21:51 1,664 batchscript_starter.vcxproj.filters
2019-05-13 03:38 1,736 batchscript_starter.vcxproj.user
2019-05-13 13:37 0 cmd.2019-05-13-13-37-28.log
2019-05-13 04:34 1,518 LICENSE
2019-05-13 13:32 22 python.2019-05-13-13-32-39.log
2019-05-13 04:55 82 README.md
2019-05-13 04:44 1,562 Resource.h
2018-04-10 01:08 46,227 small.ico
2019-05-13 04:44 630 targetver.h
2019-05-13 04:57 <DIR> x64
14 File(s) 134,378 bytes
3 Dir(s) ???,???,692,992 bytes free
Target
字段:
C:\batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C C:\start_wiki.bat
在Start in
字段中指定的目录将保存输出文件。
答案 15 :(得分:0)
所以下面的 vbscript 将以隐藏模式启动 cmd/bat 文件。
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
'MsgBox(strFolder)
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & strFolder & "\a.bat" & Chr(34), 0
Set WshShell = Nothing
现在,只有应用程序窗口可见,而不是 cmd.exe 窗口