如何在一个CMD命令中调用其他多个CMD命令
- 可以使用 start 或者 call,不同之处在于:
**一是调用范围不同:**CALL主要用来进行批处理的内部调用如CALL:PEND和一些DOS命令的调用如CALL SET TEST=2,但也可以调用其他可执行文件,而START则不能进行内部调用,但其可以执行基本上所有的外部程序,还可以执行SHELL,如打开文件夹START "" "%WINDIR%",安装网络打印机START "" "\IP\Printer",同时需要注意有无START调用外部程序的区别;
**二是调用方式不同:**CALL实际上调用,所以在CALL另一个批处理时是在同一窗体进程里执行,而START是执行,所以在执行另外一个批处理时是在不同的窗体进程里执行,也就是说在新的进程里执行,虽然START可以加入B参数,但其结果却完全不同.如我们使用CALL SET TEST=2和START /B SET TEST=2看似执行的结果相同,但是我们发现后者有两个进程,而且在窗体里要执行两次EXIT才能退出,所以当我们使用START来执行一个批处理后最好在被调用的批处理中也加一个EXIT,否则无法退出被调用的批处理的DOS窗体,但是使用CALL调用时如果在被调用的批处理中存在EXIT则会直接结束原始和别调用的批处理程序,这是一个非常严重的问题,建议在被调用的程序中使用goto:eof来取代EXIT;.
**三是调用结果不同:**CALL调用不仅可以把参数或变量传给被调用的批处理,而且被调用的批处理也可以设置参数或变量以便回传,而START只能把参数或变量传给被调用的批处理,却不能回传参数或变量,这一点实际上是第二点的延伸.至于此我们还必须注意使用CALL调用其他批处理中我们使用GOTO的时候建议使用不同的节来跳转,否则可能跳转到原批处理中而不能完整的执行被调用的批处理.
简单来说使用 start ,被调用的命令在不同的进程中执行,使用 call ,被调用的命令在同一进程中执行。
参考
关于进程相关
- 通过 tasklist|findstr "java" 可以找到进程名为
java.exe
的所有进程,如下
D:\Users\dev>tasklist|findstr "java"
java.exe 174592 Console 1 133,140 K
java.exe 173624 Console 1 130,752 K
java.exe 175448 Console 1 131,960 K
java.exe 170280 Console 1 122,628 K
java.exe 179032 Console 1 137,132 K
java.exe 176544 Console 1 133,040 K
java.exe 174636 Console 1 133,004 K
- 通过
taskill /F /im java.exe
可以批量杀死 进程名为java.exe
的所有进程,如下
D:\Users\dev>taskkill /F /im java.exe
成功: 已终止进程 "java.exe",其 PID 为 174592。
成功: 已终止进程 "java.exe",其 PID 为 173624。
成功: 已终止进程 "java.exe",其 PID 为 175448。
成功: 已终止进程 "java.exe",其 PID 为 170280。
成功: 已终止进程 "java.exe",其 PID 为 179032。
成功: 已终止进程 "java.exe",其 PID 为 176544。
成功: 已终止进程 "java.exe",其 PID 为 174636。
- 通过 netstat -aon|findstr "20011" 可以找到占用端口号 20011 的进程id,如下
D:\Users\dev>netstat -aon|findstr "20011"
TCP 0.0.0.0:20011 0.0.0.0:0 LISTENING 164280
- 通过 tskill 164280 可以杀死该进程
参考
来源:oschina
链接:https://my.oschina.net/u/100592/blog/783843