找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: luckboy45

[系统相关] [已解决]批处理如何获取DLL路径?

[复制链接]
 楼主| 发表于 2024-11-2 19:25:22 | 显示全部楼层
本帖最后由 luckboy45 于 2024-11-2 21:32 编辑

回复 15# aloha20200628

感谢你的热心回复!

因为我电脑没有安装PS,且我有4台电脑均是XP系统,有专业版、家庭版、精简版,我写的程序需要适用于不同版本的系统,故我的操作思路是
@echo off
For /f "skip=1 delims=" %%a in ('WMIC Process WHERE "handle!=0 AND handle!=4" GET ExecutablePath^|more') do (
        For /f "tokens=2 delims=/" %%b in ('WMIC Path  Win32_PerfFormattedData_PerfProc_FullImage_Costly where "name like "%%~na%%"" GET Name') do echo %%b>>2.txt
)
goto :eof


2.txt   的内容生成如下:
C:\WINDOWS\system32\ntdll.dll  

C:\WINDOWS\system32\csrss.exe     

C:\WINDOWS\system32\ntdll.dll     

C:\WINDOWS\system32\CSRSRV.dll   

C:\WINDOWS\system32\basesrv.dll   

C:\WINDOWS\system32\winsrv.dll   

C:\WINDOWS\system32\GDI32.dll     

C:\WINDOWS\system32\KERNEL32.dll  

C:\WINDOWS\system32\USER32.dll   

C:\WINDOWS\system32\LPK.DLL      

C:\WINDOWS\system32\USP10.dll     

C:\WINDOWS\system32\ADVAPI32.dll  

C:\WINDOWS\system32\RPCRT4.dll   

C:\WINDOWS\system32\Secur32.dll   

C:\WINDOWS\system32\sxs.dll      

C:\WINDOWS\system32\winlogon.exe                                                                                   

C:\WINDOWS\system32\ntdll.dll                                                                                      

C:\WINDOWS\system32\kernel32.dll                                                                                   

C:\WINDOWS\system32\ADVAPI32.dll                                                                                   

C:\WINDOWS\system32\RPCRT4.dll                                                                                    

C:\WINDOWS\system32\Secur32.dll                                                                                    

C:\WINDOWS\system32\AUTHZ.dll                                                                                      

C:\WINDOWS\system32\msvcrt.dll                                                                                    

C:\WINDOWS\system32\CRYPT32.dll                                                                                    

C:\WINDOWS\system32\MSASN1.dll                                                                                    

C:\WINDOWS\system32\USER32.dll                                                                                    

C:\WINDOWS\system32\GDI32.dll                                                                                      

C:\WINDOWS\system32\NDdeApi.dll                                                                                    

C:\WINDOWS\system32\PROFMAP.dll                                                                                    

C:\WINDOWS\system32\NETAPI32.dll                                                                                   

C:\WINDOWS\system32\USERENV.dll                                                                                    

C:\WINDOWS\system32\PSAPI.DLL  

如何过滤重复行???代码最好不依赖外部工具,我尝试用下面代码过滤重复行,但效果不佳,请问怎么解决?

for /f "delims=" %%i in (2.txt) do (if not defined %%i set %%i=s & echo %%i>>b.txt)

接着再用wmic datafile where "name='!a:\=\\!'" get manufacturer /value
来判断过滤掉微软签名的,最终过滤出可疑DLL。
发表于 2024-11-2 21:46:43 | 显示全部楼层
回复 16# luckboy45


"效果不佳"的意思是代码得到了正确的结果但是速度太慢?还是代码得到了错误的结果?
发表于 2024-11-2 22:49:16 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-11-3 11:13 编辑

回复 16# luckboy45

以下去重的代码针对16楼的示例文件 2.txt(数据行均为全路径文件名),第2行代码专为删除 2.txt 中的空行和行尾空格...

  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "tokens=* delims= " %%a in (2.txt) do echo,%%~dpnxa)>0.0
  3. (for /f "delims=" %%a in ('sort 0.0') do (
  4.    if /i "%%a" neq "!a!" if "!a!" neq "" echo,!a!)&set "b=!a!"&set "a=%%a")>2.new.txt
  5. if /i "!b!" neq "!a!" echo,!a!>>2.new.txt
  6. del/q "0.0"&endlocal&pause&exit/b
复制代码
以下代码未用 sort.exe 完成,但仍须第2行代码专为删除 2.txt 中的空行和行尾空格...

  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "tokens=* delims= " %%a in (2.txt) do echo,%%~dpnxa)>0.0
  3. (for /f "delims=" %%a in (0.0) do if not defined _%%a set "_%%a=1"&echo,%%a)>2.new.txt
  4. del/q "0.0"&endlocal&pause&exit/b
复制代码
 楼主| 发表于 2024-11-3 08:16:49 | 显示全部楼层
回复 17# Batcher

我指的效果不佳是,因为我上面代码生成的2.TXT内每行末尾都有空格符号,而且有些下面有空行,内容如下,节选部分

  1. C:\WINDOWS\system32\cryptdll.dll                                                                                             

  2. C:\WINDOWS\system32\sensapi.dll                                                                                               

  3. C:\WINDOWS\system32\DNSAPI.dll                                                                                                

  4. C:\Program Files\Bonjour\mdnsNSP.dll                                                                                          

  5. C:\WINDOWS\system32\rasadhlp.dll                                                                                             

  6. C:\WINDOWS\system32\rsaenh.dll                                                                                                

  7. D:\常用工具\UnLocker185\UnlockerCOM.dll                                                                                       

  8. C:\WINDOWS\system32\syncui.dll                                                                                                

  9. C:\Program Files\Common Files\Autodesk Shared\dwf Common\DWFShellExtension.dll                                                

  10. C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCP71.dll                                                         

  11. C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCR71.dll                                                         

  12. C:\WINDOWS\system32\MSISIP.DLL                                                                                                

  13. C:\WINDOWS\system32\wshext.dll   
  14.                                                                                              
  15. C:\WINDOWS\system32\ntdll.dll  

  16. C:\WINDOWS\system32\csrss.exe     

  17. C:\WINDOWS\system32\ntdll.dll     

  18. C:\WINDOWS\system32\CSRSRV.dll   

  19. C:\WINDOWS\system32\basesrv.dll   

  20. C:\WINDOWS\system32\winsrv.dll   

  21. C:\WINDOWS\system32\GDI32.dll     

  22. C:\WINDOWS\system32\KERNEL32.dll  

  23. C:\WINDOWS\system32\USER32.dll   

  24. C:\WINDOWS\system32\LPK.DLL      

  25. C:\WINDOWS\system32\USP10.dll     

  26. C:\WINDOWS\system32\ADVAPI32.dll  

  27. C:\WINDOWS\system32\RPCRT4.dll   

  28. C:\WINDOWS\system32\Secur32.dll   

  29. C:\WINDOWS\system32\sxs.dll      

  30. C:\WINDOWS\system32\winlogon.exe                                                                                   

  31. C:\WINDOWS\system32\ntdll.dll                                                                                      

  32. C:\WINDOWS\system32\kernel32.dll                                                                                   

  33. C:\WINDOWS\system32\ADVAPI32.dll                                                                                   

  34. C:\WINDOWS\system32\RPCRT4.dll                                                                                    

  35. C:\WINDOWS\system32\Secur32.dll                                                                                    

  36. C:\WINDOWS\system32\AUTHZ.dll        

  37. C:\WINDOWS\system32\svchost.exe                                                                                    

  38. C:\WINDOWS\system32\ntdll.dll      

  39. C:\Documents and Settings\All Users\Application Data\Thunder Network\KanKan\Pusher\xappdrv.1.0.0.87.dll                                                                           

  40. C:\WINDOWS\system32\kernel32.dll                                                                                   

  41. C:\WINDOWS\system32\ADVAPI32.dll                                                                                   
复制代码
我需要过滤掉重复的行,因为那会影响到后续代码执行效率。
 楼主| 发表于 2024-11-3 08:23:47 | 显示全部楼层
本帖最后由 luckboy45 于 2024-11-3 08:27 编辑

回复 18# aloha20200628

感谢你热情的帮助,测试了18楼代码,使用sort的那段,无法过滤干净,效果如下,很多重复的没有被过滤,大概是因为大小写的缘故。

C:\Documents
C:\Program
C:\WINDOWS\AppPatch\AcAdProc.dll
C:\WINDOWS\AppPatch\AcGenral.dll
C:\WINDOWS\explorer.exe
c:\WINDOWS\pchealth\helpctr\binaries\pchsvc.dll
C:\WINDOWS\system32\AcSignIcon.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
c:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\activeds.dll
C:\WINDOWS\system32\actxprxy.dll
C:\WINDOWS\system32\adsldpc.dll
c:\WINDOWS\system32\adsldpc.dll
C:\WINDOWS\system32\adsldpc.dll
c:\WINDOWS\system32\adsldpc.dll


而使用第二段代码,过滤的是干净了,但把
C:\Program Files\Bonjour\mdnsNSP.dll

C:\Program Files\Common Files\Autodesk Shared\dwf Common\DWFShellExtension.dll                                                

C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCP71.dll                                                         

C:\Program Files\Common Files\Autodesk Shared\dwf Common\MSVCR71.dll
C:\Documents and Settings\All Users\Application Data\Thunder Network\KanKan\Pusher\xappdrv.1.0.0.87.dll


经过过滤后变成了
C:\Program
C:\Documents

其实应该是过滤掉空行和行尾的空格即可,麻烦再帮完善下,谢谢!~
发表于 2024-11-3 10:30:22 | 显示全部楼层
回复 20# luckboy45

18代码已被订正,用19楼节选示例测试已通过...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:01 , Processed in 0.019153 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表