Windows cmd .bat - 启动与父进程同时运行的子进程,并在父进程关闭时关闭

标签 windows batch-file cmd child-process

所以这可能是不可能的,但我还是会问

我有一个日志 .bat 脚本,旨在收集应用程序的信息和使用时间。所以我想要的是一个批处理文件,它要求用户提供一些基本信息,启动一个子进程或 .bat 文件,允许用户输入更多信息,而父进程启动并等待 Windows 应用程序(例如记事本)。 EXE文件)。然后,我希望在用户关闭 notepad.exe 后父进程和子进程退出。

总的来说,这就是我到目前为止所拥有的;

@echo off

set someinfo=
set /p someinfo="Enter Some Info Please: "
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b)

:: Starting time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log 

:: This would be the child process for additional input 
start "Additional info" addinfo.bat 

::This is the software I want to start
start /Wait "" "C:\Program Files (x86)\notepad.exe"


:: Once user exits software write log string and exit .bat file
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b) 

:: Ending time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log 

问题是当子进程启动“addinfo.bat”时,父进程会等待子进程完成,然后再继续执行下一行代码(start/Wait """C:\Program Files (x86)\notepad .exe”)

是否可以同时运行子进程并继续父进程?此外,有没有办法在退出父进程之前强制子进程关闭,也许是“killpid”之类的东西?

最佳答案

这将从您的子进程获取PID,并在父进程完成时杀死它:

@echo off

set someinfo=
set /p someinfo="Enter Some Info Please: "
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b)

:: Starting time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log 

:: This would be the child process for additional input 
start "Additional info" adinfo.bat

::This is the software I want to start
start /Wait "" "notepad.exe"

:: Once user exits software write log string and exit .bat file
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%b/%%a/%%c)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b) 

:: Ending time and info
echo %someinfo%,%mytime%,%mydate% >> C:\Temp\MSuser.log

for /f "tokens=2 delims=," %%a in ('tasklist /v /fo csv ^| findstr /i "Additional info"') do set "$PID=%%a"
taskkill /PID %$PID%

关于Windows cmd .bat - 启动与父进程同时运行的子进程,并在父进程关闭时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24215237/

相关文章:

c++ - 从 cmd 和 Codeblocks 执行时输出不同

powershell - 如何在win10命令提示符下使用ffmpeg连接来自不同子目录的视频文件?

python cmd模块捕获异常后返回提示

ADB 看不到但可从 Windows XP 访问的 Android 设备

windows - 在 EC2 用户数据中调用 PowerShell 脚本不起作用

batch-file - ffmpeg concat + 处理时发现无效数据 + 检查有效 avi 文件

batch-file - Filewatcher 用于解压缩、运行和移动批处理文件中的文件

c++ - 多线程访问冲突读取位置C++

windows - 为什么我在 Windows 上运行 Perl one liner 时出现“找不到字符串终止符 "'”错误

linux - 使用批处理文件从 Windows 系统登录 Linux 服务器