我有一段代码;
:check
for /f "tokens=1* delims==" %%A in ('"wmic process get description, commandline /format:list"') do (
if "%%A"=="CommandLine" (
set "cmd=%%B"
) else if "%%A"=="Description" (
set "desc=%%B"
setlocal enableDelayedExpansion
set "desc=!desc:~0,-1!"
set "cmd=!cmd:~0,-1!"
if /i !desc! == %1 (
echo !cmd! >>C:\test.txt
)
endlocal
)
)
goto:eof
这非常有效(这实际上是一个从批处理文件调用的函数,例如
call:check processname1.exe
call:check processname2.exe
call:check processname3.exe
etc...
我想做的(如果可能的话)是,除了回显到文件之外,我希望能够创建 2 个变量。就像是;
processname1.exe processname3.exe <-- (for each process 'checked' if it IS running, append its name to this variable)
commandlinepath1 commandlinepath2 <-- (for each process 'checked' if it IS running, append its path to this variable)
如果这是可能的,然后我可以稍后在我的脚本中调用这些变量,我希望能够 tskill 正在运行的进程(如果可以制作上面的变量就足够简单了),然后再重新打开这些进程(使用原始路径中的命令行参数。这就是我迷路的地方。
我上面的代码(写入文件)。会给出类似的结果;
"C:\somefolder\someexe.exe" -some_parameter
"C:\some therfolder\someotherexe.exe"
"C:\another older\anotherexe.exe" param1 param2
但是我需要做的是获取该文件的每一行(或变量,如果可能的话),然后运行它们(如果我将每一行复制到 windows 的 RUN 命令中,它可以工作,但通过 CMD 执行它不会) .
我尝试使用 for 循环打开文件,它确实如此,除了脚本等待进程完成之前继续(并且这些进程不会结束,因为它们是应用程序)。如果我尝试使用 START .. 那么它会加载一个新的 CMD 窗口??
我需要做的(如果有更好的选择)是
- 对于一组预先确定的进程,检查它们是否正在运行
- 杀死那些(如果不是,忽略它)
- 删除一些文件(我可以这样做,杀死进程的原因是它们保持文件打开,防止删除)
- 重新打开所有最初运行的程序
谢谢..