Windows批处理 调用程序后 不等待子进程 父进程继续执行命令

从DOS过来的老鸟应该都知道批处理,这个功能在WINDOWS中仍然保留着。批处理 说白了就是把一系列DOS命令写在一个文本文件里,然后把这个文件命名为XXX.bat(WINXP以后的系统也可以命名为*.cmd),然后运行它就可 以一次执行一系列命令和程序了,当然也包括WINDOWS下的程序。

昨天处理一个问题时需要写一个批处理,批处理的前面运行了几个DOS命令,最后调用一 个WINDOWS程序。可问题是,调用的WINDOWS程序打开后,CMD命令提示符窗口不会关闭,而是要等待这个WINDOWS程序关闭后它才会关闭。 回想以前DOS下的批处理,都是执行一个程序,然后等待这个程序执行完毕后才会执行下一个程序,因为DOS是单任务操作系统嘛。但WINDOWS里有没有 什么方法让批处理调用程序后不用等待程序结束而继续执行后面的命令呢?网上搜了一下,也没找出个结果。自己又研究了半天,终于解决了。解决的关键就是使用 了一个不太常用的命令:start

一开始我的批处理是这么写的(“/”和后面的内容是注释):

@echo off                /这是不让CMD窗口中显示运行的什么命令
DOS命令                   /这是一系列DOS命令,用DOS命令代替
abc                      /最后要调用的WINDOWS程序文件名为abc.exe
echo "ok"                /输出“OK”
ping /n 5 127.1 >nul           /延时 5S
exit 

问题就是这么写死活都无法在运行abc.exe之后自动关闭CMD窗口。后来我终于想起来WINDOWS的命令提符中有一个start命令,心想使用它也许批处理就不会等待abc.exe执行完毕了。于是把批处理改为:

@echo off           /这是不让CMD窗口中显示运行的什么命令
DOS命令             /这是一系列DOS命令,用DOS命令代替
start abc           /最后要调用的WINDOWS程序文件名为abc.exe
echo "ok"           /输出“OK”
ping /n 5 127.1 >nul       /延时 5S
exit 

果然,abc.exe运行之后,这个批处理就继续执行后面的exit命令,从而自己退出了。原来,使用start调用的程序,批处理是不会等待程序运行结束的。遇到与我相同问题的朋友,不妨一试。

参考:http://www.cnblogs.com/yukaizhao/archive/2010/07/03/1770659.html

时间: 2024-10-10 16:32:44

Windows批处理 调用程序后 不等待子进程 父进程继续执行命令的相关文章

JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令

通过 java.lang.Runtime 类可以方便的调用操作系统命令,或者一个可执行程序,下面的小例子我在windows和linux分别测试过,都通过.基本原理是,首先通过 Runtime.getRuntime() 返回与当前 Java 应用程序相关的运行时对象,然后调用run.exec(cmd)  另启一个进程来执行命令(cmd为要执行的命令). 一.运行一个可执行程序 执行一个.exe的文件,或通过已安装的软件打开一个特定格式的文件,如word.chm或mp3等等. 1. 在window下

windows下是不是只有全局安装npm的模块包才能执行命令行工具?

问题 回答1 回答2 问题链接:https://segmentfault.com/q/1010000005077484

C#程序调用cmd执行命令(转)

C#通过程序来调用cmd命令的操作 string str = Console.ReadLine(); System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动 p.StartInfo.RedirectStandardInput = true

父进程和子进程

父进程 在计算机领域,父进程(英语:Parent Process)指已创建一个或多个子进程的进程. UNIX 在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程. 操作系统内核以进程标识符(Process Identifier,即PID)来识别进程.进程0是系统

进程控制(九)---调用fork() 两次来避免僵尸进程的产生

在 APUE 第三版的第182页的实例提到了下面这段话: 这句话第一遍看都不知道什么意思,去网上找资料,看到一篇博客,帮助我理解了这句话的含义.这句话的意思可以做以下理解: 现在想要通过一个进程创建一个进程,然后让这两个进程各自独立地完成各自的任务(通常我们都是这样做的),如果现在只调用 fork() 一次,让父子进程分别完成各自的任务,假设父进程处理程序的时间要比子进程处理程序的时间要长,那么 子进程 必然先于 父进程 退出,子进程必然有一段时间会处于僵尸状态. 为了解决这个问题(也就是说不让

UNIX网络编程卷1 服务器程序设计范式5 预先派生子进程,由父进程向子进程传递套接字描述符

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.只让你进程调用 accept,然后把所接受的已连接套接字"传递"给某个子进程. 这样做就不用因为所有子进程都调用 accept 而需提供上锁保护 2.父进程必须跟踪子进程的忙闲状态,以便给空闲子进程传递新的套接字 typedef struct { pid_t child_pid; /* 子进程的进程 ID */ int child_pipefd; /* 父进程中连接到该子进程

windows下调用外部exe程序 SHELLEXECUTEINFO

本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: 1 typedef struct _SHELLEXECUTEINFO { 2 DWORD cbSize; 3 ULONG fMask; 4 HWND hwnd; 5 LPCTSTR lpVerb; 6 LPCTSTR lpFile; 7 LPCTSTR lpParameters; 8 LPCTSTR lpD

发布程序后的NSLog批处理

NSLog在开发中是必须使用到的,但是其本身是特别耗费性能的,所以在产品发布后是一定要去掉的. 在大的开发项目中一个个处理NSLog是相当困难的,所以可以考虑在pch文件中进行宏定义,如: #define MyLog(...) NSLog(__VA_ARGS__) 待程序发布时可以将后面的NSLog(__VA_ARGS__)注释掉.也可以使用条件判断,避免反复注释: #ifdef DEBUG #define MyLog(...) NSLog(__VA_ARGS__) #else #define

C#程序调用cmd.exe执行命令

代码部分 using System.Diagnostics; public class CmdHelper { private static string CmdPath = @"C:\Windows\System32\cmd.exe"; /// <summary> /// 执行cmd命令 /// 多命令请使用批处理命令连接符: /// <![CDATA[ /// &:同时执行两个命令 /// |:将上一个命令的输出,作为下一个命令的输入 /// &&