[英]Can I run a windows batch file with hidden cmd window but see the programs started by the batch?
我想以隐藏的方式启动批处理文件。 本讨论非常清楚地描述了如何完成:使用CreateProcess
API函数。 使用此方法,我的启动批处理脚本不可见。
问题是,批处理内部调用的程序(exes)也是隐藏的!
我的目标是隐藏已启动的批处理窗口,但显示批处理内部调用的应用程序的窗口。
可能吗? 如果是这样,怎么样? 我可以使用CreateProcess
函数,还是需要另一个函数?
下一个评论的批处理脚本显示了可见的可行方法
cliParser.bat
只列出所有提供的参数; cliParseArg.bat
不相同,并设置errorlevel
到参数计数(从零开始所以从来returs 0
通过) exit /b %i%
; calc
和notepad
可执行文件; cliParser.exe
是用C++
重写的cliParser.bat
; 从一个不可见的命令行窗口。 给出了如何以异步方式和同步方式运行的示例(即等到被调用的应用程序结束)。
@ECHO OFF
SETLOCAL EnableExtensions
rem STDOUT output is invisible if this script runs in a hidden window
wmic OS get LocalDateTime
rem another batch script asynchronously => visible
start "batch asyn" cmd /K ""D:\bat\cliParser.bat" par1 %* "par 3""
rem errorlevel clear: by virtue of Dave Benham in reply to http://superuser.com/a/649329/376602
(call )
rem another batch script synchronously => visible
start "batch synchr" /WAIT cmd /K "("D:\bat\cliParseArg.bat" par1 %* "par 3"&pause&exit /B %%%%errorlevel%%%%)"
rem `pause` command in above line is merely for debugging purposes to ensure that window is visible
echo cliParseArg.bat parameter count=%errorlevel%
echo(
rem a GUI application asynchronously => visible
start "" calc.exe
rem a GUI application synchronously => visible
notepad.exe
rem a console application asynchronously => visible
start "CApp asyn" cmd /K ""D:\bat\cliParser.exe" rap1 %* "rap 3""
rem a console application synchronously => visible
start "CApp synchr" /WAIT cmd /K "("D:\bat\cliParser.exe" arg1 %* "arg 3"&exit /B)"
rem STDOUT output is invisible if this script runs in a hidden window
cmd /C wmic OS get LocalDateTime
首先从可见cmd
窗口调用然后在隐藏窗口中调用::
==> D:\bat\SO\37181230.bat "xx yy"
LocalDateTime
20160512195221.499000+120
cliParseArg.bat parameter count=4
LocalDateTime
20160512195244.958000+120
==> Wscript D:\VB_scripts\runhidden.vbs "D:\bat\SO\37181230.bat" "A1 B2"
==>
runhidden.vbs
改编自Rob van der Woude的剧本
strArguments = strArguments & " " & WScript.Arguments(i)
行已更改为 strArguments = strArguments & " """ & WScript.Arguments(i) & """"
这应该可以解决问题,在批处理文件中使用此代码来启动EXE。
@echo off
title GEO-START v2
REM #############################################################
REM ## GEO-START ## starts any file any location with variables. ##
REM #############################################################
REM ##
REM "start-and-wait-yes-no" variable, Y is yes, N is no.
REM ##
REM "var" variable, "/silent" or "/y". ## The /y variable is grait for "ms self extracting cabinet files" CAB.exe.
REM ##
REM "silent" variable, 0 will set the "var" variable to true and trys to run hidden.
REM "silent" variable, 1 will set the "var" variable to false.
REM ##
REM "GEO-START" variable, the name and location of the file you want to start.
REM ################################################
set Y=true
set N=Wscript.Quit
REM ##############
REM #####################
REM ## variables to set ##
set start-and-wait-yes-no=%Y%
set var=/silent
set silent=1
set GEO-START=Winamp3 v9.1.exe
echo Set WshShell = WScript.CreateObject("WScript.Shell") > GEO-START.vbs && echo WSHShell.Run chr(34) + "%GEO-START%" + chr(34) + " %var%",%silent%,%start-and-wait-yes-no% >> GEO-START.vbs && cscript GEO-START.vbs && del GEO-START.vbs
Exit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.