2016-07-15 92 views
1

我想要构建一个批处理以查看进程,为其运行的每个进程获取位置并将其放入像 这样的变量中:ex是进程x1正在运行poof magic%var1%具有程序x1的位置... 但是它应该为每个进程执行此操作.. 我知道的是如何做到这一点只是针对一个进程而不是所有进程要知道进程的名称:批处理获取正在运行的所有进程的位置

wmic process where "name='aa.exe'" get ExecutablePath >dumpxkss.tmp 
    more +1 dumpxkss.tmp >dumpxkss1.tmp 
    for /f "delims=" %%x in (dumpxkss.tmp) do set Build=%%x 
    set build1=%Build:~0,-8% 

但在这种情况下,如果有更多的aa.exe处理它赢得吨工作..

所以我想得到每一个过程的路径,不管名称... 请帮忙??

+0

你的意思是你想让你的计算机上运行的所有进程都具有它们的路径和t继承命令行? – Hackoo

+0

是的,这就是我的意思 – wkup

+0

检查我的答案! – Hackoo

回答

0

很明显:在您的for循环中,您只设置一个变量 - 并将其重新设置并为文本文件的每一行重新设置一次。所以你的set build1只能使用最后一个值,所有以前的值被覆盖。你只需要扩大你的for循环:

setlocal enabledelayedexpansion 
wmic process where "name='aa.exe'" get ExecutablePath >dumpxkss.tmp 
more +1 dumpxkss.tmp >dumpxkss1.tmp 
for /f "delims=" %%x in (dumpxkss.tmp) do (
    set Build=%%x 
    set build1=!Build:~0,-8! 
    echo !build1! 
) 

也了解delayed expansion

您可以缩短你的代码:

setlocal enabledelayedexpansion 
for /f "skip=1 tokens=*" %%x in ('wmic process where "name='aa.exe'" get ExecutablePath') do (
    set Build=%%x 
    echo !Build:~0,-8! 
) 
+0

nononono,你看,没有解决问题..我想这个命令运行每一个现有的进程不仅为aa.exe – wkup

+0

然后只是删除'where'name ='aa.exe'“'(虽然我' m不知道,'%Build:〜0,-8%'应该表示......) – Stephan

+0

是的,如果我删除了其中的“name ='aa.exe'”并以管理员身份运行它,那么工作就好了。非常感谢 !!! – wkup

0

给这个批处理文件一试:

@echo off 
set LogFile=Running_Process.txt 
If Exist %LogFile% Del %LogFile% 
WMIC /APPEND:%LogFile% PROCESS GET Caption,CommandLine>Nul 
start "" %LogFile% 
+0

非常感谢您的工作,但我不想登录他们..我想要获取每个正在运行的进程的每个位置在一个变量中 – wkup

相关问题