Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 有没有办法删除具有相同进程名称的条目?_Windows_Batch File_Cmd_Wmic_Taskmanager - Fatal编程技术网

Windows 有没有办法删除具有相同进程名称的条目?

Windows 有没有办法删除具有相同进程名称的条目?,windows,batch-file,cmd,wmic,taskmanager,Windows,Batch File,Cmd,Wmic,Taskmanager,我正在尝试获取前10个内存消耗进程,并使用本文提供的代码作为答案。它工作得很好,只是我不想让多个进程条目占用不同的内存大小,而且我无法对它进行排序,因为它的内存消耗是不同的。 代码是: @echo off setlocal EnableDelayedExpansion (for /F "skip=1 tokens=1,2" %%a in ('wmic process get name^,workingsetsize') do ( set "size= %%b" echo !si

我正在尝试获取前10个内存消耗进程,并使用本文提供的代码作为答案。它工作得很好,只是我不想让多个进程条目占用不同的内存大小,而且我无法对它进行排序,因为它的内存消耗是不同的。 代码是:

@echo off
setlocal EnableDelayedExpansion

(for /F "skip=1 tokens=1,2" %%a in ('wmic process get name^,workingsetsize') do (
set "size=         %%b"
echo !size:~-10!:%%a
)) > wmicc.txt
set i=0
for /F "skip=1 delims=" %%a in ('sort /R wmicc.txt') do (
echo %%a
set /A i+=1
if !i! equ 25 goto :end
)
:end
我可以得到如下输出:

96931840:iexplore.exe
82161664:explorer.exe
42319872:svchost.exe
31469568:dwm.exe
25690112:SearchIndexer.exe
17002496:taskhostex.exe
11007590:VCExpress.exe
8033894:avp.exe
7190528 :Skype.exe
7000416 :SkypeBrowserHost.exe
而不是现有代码的输出:

96931840:iexplore.exe
82161664:explorer.exe
42319872:svchost.exe
33656832:svchost.exe
31469568:dwm.exe
26943488:iexplore.exe
25690112:SearchIndexer.exe
18550784:svchost.exe
17002496:taskhostex.exe
16343040:svchost.exe
这将标记读入
%%p,q
的整行,因此
%%q
包含进程名称。然后,它检查变量
@processname
是否已定义,如果未定义,则生成报告行并设置
@processname
,以便在定义该变量时第一次提及将是最后一次提及

第一行用于将任何现有的
@*
变量设置为空;如果不存在
@*
变量,则
2^>nul
会抑制错误消息,插入符号会转义
,告诉
cmd
是要执行的命令的一部分,而不是
的一部分

[稍后]

我发明的
如果定义为“varname”
,那么它似乎实际上不起作用,尽管在我测试它时它似乎起作用。我已经用代码替换了这个指令,并将其标记出来

@echo off
setlocal EnableDelayedExpansion

set num=25

set /A skip=-num
for /F "skip=1 tokens=1,2" %%a in ('wmic process get name^,workingsetsize') do (
   set "size=         %%b"
   set "size=!size:~-10!"
   if not defined proc[%%a] (
      set "proc[%%a]=!size!"
      set "size[!size!:%%a]=1"
      set /A skip+=1
   ) else if %%b gtr !proc[%%a]! (
      set "size[!proc[%%a]!:%%a]="
      set "proc[%%a]=!size!"
      set "size[!size!:%%a]=1"
   )
)

if %skip% lss 1 (set "skip=") else set "skip=skip=%skip%"
for /F "%skip% tokens=2 delims=[]" %%a in ('set size[') do echo %%a
输出示例:

   5517312:NisSrv.exe
   5537792:HD-LogRotatorService.exe
   5939200:spoolsv.exe
   6062080:WUDFHost.exe
   6168576:igfxpers.exe
   6279168:conhost.exe
   6369280:wmpnetwk.exe
   6533120:hkcmd.exe
   6692864:igfxtray.exe
   8073216:notepad.exe
   8077312:WMIC.exe
   8105984:taskhost.exe
   9306112:lsass.exe
  11157504:winlogon.exe
  11767808:taskhostex.exe
  13402112:SkyDrive.exe
  16629760:TabTip.exe
  17121280:SearchIndexer.exe
  26120192:HD-Agent.exe
  32325632:csrss.exe
  36429824:svchost.exe
  43114496:dwm.exe
 101998592:explorer.exe
 110260224:MsMpEng.exe
 114425856:chrome.exe

@San852你确定,你只想忽略倍数而不是增加它们的大小吗?@Stephan是的,我确定。我更感兴趣的是进程名称,而添加的大小对我来说并不太重要。您在问题中发布的数据显示了数字和名称之间的空格。您在图像中发布的数据显示冒号。如果您的数据中有冒号,如图所示,则将
for/f“tokens=1*”%%p
更改为
for/f“tokens=1*delims=:“%%p
@Magoo是的,很抱歉,我在代码中显示了错误的输出(现已更正),我在这一行中添加冒号,它在上面的代码中。
echo!大小:~-10!:%a
。不幸的是,我仍然得到多个条目,无论是带冒号还是不带冒号,我遗漏了什么?修复了。哦,顺便说一句:最好是同时复制和粘贴代码和数据。我认为,在您报告的数据中,您应该在开头的短第一列上留有空格,而不是在冒号之前。
   5517312:NisSrv.exe
   5537792:HD-LogRotatorService.exe
   5939200:spoolsv.exe
   6062080:WUDFHost.exe
   6168576:igfxpers.exe
   6279168:conhost.exe
   6369280:wmpnetwk.exe
   6533120:hkcmd.exe
   6692864:igfxtray.exe
   8073216:notepad.exe
   8077312:WMIC.exe
   8105984:taskhost.exe
   9306112:lsass.exe
  11157504:winlogon.exe
  11767808:taskhostex.exe
  13402112:SkyDrive.exe
  16629760:TabTip.exe
  17121280:SearchIndexer.exe
  26120192:HD-Agent.exe
  32325632:csrss.exe
  36429824:svchost.exe
  43114496:dwm.exe
 101998592:explorer.exe
 110260224:MsMpEng.exe
 114425856:chrome.exe