如何从带有bat的文件中读取和操作变量?

时间:2015-11-27 13:29:03

标签: batch-file

我想做什么: 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

2 个答案:

答案 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