我想做什么: 1.运行bat文件并将其PID保存在txt文件中。 2.运行另一个从txt文件读取先前存储的PID的bat。 3.第二个蝙蝠使用来自txt的读取PID来终止进程。
我有什么:在第一个主要球棒:
FOR /F %%T IN ('Wmic process where^(Name^="cmd.exe"^)get ProcessId^|more +1') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo %ProcessId%>>ID_MAIN_BAT.txt
这很好用,我得到带有PID的txt文件。
我有什么:在第二个主要球棒:
FOR /F "eol=; tokens=2,3* delims=, " %i in (ID_MAIN_BAT.txt) do SET /P ID=%i%
taskkill /PID %ID%
结果: 第二个蝙蝠成功地用存储的PID杀死第一个蝙蝠。 有人可以帮帮我吗?
完整的第二档:
我不知道,有些事情是错的,它有效。我把我的整个第二页代码放在这里:
@echo off
if not "%1" == "max" start /MAX cmd /c %0 max
title AutoDestroy
color cf
echo.
start "" /min winamp Countdown.mp3
DEL /F Figura1.jpg >nul
TIMEOUT /T 3
taskkill /IM winamp.exe
DEL /F Countdown.mp3 >nul
DEL /F Countdown.bat >nul
DEL /F MainBat.bat >nul
DEL /F AutoDestroy.bat >nul
for /f "delims=" %%a in (ID_MAIN_BAT.txt) do taskkill /PID %%a
答案 0 :(得分:2)
我发现了为什么你的建议没有成功。 在我的主蝙蝠中我有第一行: 如果不是"%1" ==" max" start / MAX cmd / c%0 max&退出/ B. 这是为了在全屏模式下操作蝙蝠,但它有一个主要的不便:
如果删除&退出/ B从最后打开2(2)个相同的bat文件。 这样做我意识到在输出文件中写入的PID属于由&和关闭的第一个procces。退出/ B命令,以及为什么cmd无法杀死该进程,因为它已被&退出/ B.
如果我不再放第一行(使用全屏选项)并且如果我将bat文件转换为exe我可以使用TASKKILL / IM MAIN_BAT.exe 和它的工作
没有你无法得到它,伙计们,非常感谢你!
答案 1 :(得分:1)
第一个BAT:使用Wmic
@echo off & cls
for /f %%a in ('Wmic process where ^(Name^="cmd.exe"^) get ProcessId ^| findstr /r [0-9]') do (
set "$PID=%%a"
goto:next)
:next
>ID_MAIN_BAT.txt echo %$PID%
另一种强化方式是在你的第一个BAT中使用Title来获得带有Tasklist的PID(所以如果你打开另一个CMD就没有混淆):
第一个BAT:使用Tasklist
@echo off
title=Test
for /f "tokens=2 delims=," %%a in ('tasklist /v /fo csv ^| findstr /i "Test"') do set "$PID=%%a"
>ID_MAIN_BAT.txt echo %$PID%
第二个BAT:
for /f "delims=" %%a in (ID_MAIN_BAT.txt) do taskkill /PID %%a