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

[文本处理] [已解决]批处理获进程获路径,判断进程名称并写文本?

  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=360tray.exe IAAnotif.exe"
  3. >tem.txt echo [Common]
  4. set n=0
  5. for /f "delims=" %%i in ('reg QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" ^|findstr /i "%str:.=\.%"') do (
  6. set str=%%i
  7. set "str=!str:*REG_SZ=!"
  8. for %%a in (!str!) do if "%%~xa" == ".exe" set "ph=%%~dpa"
  9. set "_!n!=!ph!"&set /a "n+=1"
  10. )
  11. >>tem.txt echo Count=%n%
  12. set/an-=1
  13. (for /l %%i in (0 1 %n%) do (
  14. echo [%%i]&echo 路径=!_%%i!&echo 类型=1&echo 访问=15
  15. ))>>tem.txt
  16. pause
复制代码
这是曾经热心朋友帮我写的批处理,结果是这样的
  1. [Common]
  2. Count=2
  3. [0]
  4. 路径=C:\Program Files\360\360Safe\safemon\
  5. 类型=1
  6. 访问=15
  7. [1]
  8. 路径=C:\Users\jing\Desktop\Manager\
  9. 类型=1
  10. 访问=15
复制代码
后来发现,有缺陷,某些情况下获取不到路径,或者是因为不在启动项里获取不到路径!

现在请这的热心朋友们帮忙完善一下,问题如下:
1.修改从启动项获取路径为进程获取路径!
2.判断进程名称、写入匹配文件名 !
如:进程名为 IAAnotif.exe                    获取的路径为 C:\Users\jing\Desktop\Manager\                                                                  
需要匹配的文件名为 migrStatus.exe    则修改成C:\Users\jing\Desktop\Manager\migrStatus.exe
3.如果只想要进程所在的文件夹怎么写?
如:进程名为QQ.exe
我不需要匹配文件名,只要他所在的文件夹。
如: C:\Program Files\Tencent\QQ\Bin
4.如果进程所在的路径不是想要的路径该怎么写?
如:还是QQ。exe
进程在C:\Program Files\Tencent\QQ\Bin   我想要的路径不是Bin  而是Misc文件夹 ,后面也不匹配文件名,该怎么写?如果需要匹配又该怎么写?

以上进程不会有重复,不会有重复问题!先谢谢大家的帮忙

[ 本帖最后由 lxf0356 于 2010-5-25 18:08 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

1,匹配完整路径
  1. @echo off&setlocal enabledelayedexpansion&set n=0
  2. for %%a in (360tray IAAnotif) do (
  3. for /f "skip=1 delims=" %%b in ('wmic process where caption^="%%a.exe" get executablepath') do set "#!n!=%%b"
  4. set/a n+=1)
  5. (echo.[Common]&echo.Count=%n%
  6. for /f "tokens=1* delims==#" %%a in ('set #') do echo.[%%a]&echo.路径=%%b&echo.类型=1&echo.访问=15)>1.txt
复制代码
2,匹配所在目录:
  1. @echo off&setlocal enabledelayedexpansion&set n=0
  2. for %%a in (360tray IAAnotif) do (
  3. for /f "skip=1 delims=" %%b in ('wmic process where caption^="%%a.exe" get executablepath') do set "#!n!=%%b"
  4. set/a n+=1)
  5. (echo.[Common]&echo.Count=%n%
  6. for /f "tokens=1* delims==#" %%a in ('set #') do echo.[%%a]&echo.路径=%%~dpb&echo.类型=1&echo.访问=15)>1.txt
复制代码
3,匹配同一层的子目录:
  1. @echo off&setlocal enabledelayedexpansion&set n=0&set r="%cd%"
  2. for %%a in (360tray IAAnotif) do (
  3. for /f "skip=1 delims=" %%b in ('wmic process where caption^="%%a.exe" get executablepath') do set "#!n!=%%b"
  4. set/a n+=1)
  5. (echo.[Common]&echo.Count=%n%
  6. for /f "tokens=1* delims==#" %%a in ('set #') do (
  7. echo.[%%a]
  8. call:n "%%~dpb"
  9. echo.路径=!s!&echo.类型=1&echo.访问=15))>1.txt
  10. exit
  11. :n
  12. cd/d %1&cd ..&set "s=!cd!\子目录"&cd/d %r%
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-21 18:38 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  1. @echo off
  2. wmic process where name='qq.exe' get ExecutablePath >2.txt
  3. ping www.baidu.com >nul -w 2
  4. for /f "skip=1" %%i in (2.txt) do echo 文件%%i
  5. for /f "skip=1" %%i in (2.txt) do echo 所在目录为%%~pi
  6. pause
复制代码

[ 本帖最后由 changzhi 于 2010-5-22 11:38 编辑 ]

TOP

原帖由 hanyeguxing 于 2010-5-21 18:18 发表
1,匹配完整路径@echo off&setlocal enabledelayedexpansion&set n=0
for %%a in (360tray IAAnotif) do (
for /f "skip=1 delims=" %%b in ('wmic process where caption^="%%a.exe" get executablepath') do set ...


可能是我描述的不够清楚、一个批处理能处理这些问题吗?或者是其中的几个问题也行!

还有个问题
引用:
原帖由 sgaizxt001 于 2010-5-22 00:16 发表
2.需要一个你的进程名和你想修改成啥样路径名的对应的文本
4.跟2一样,需要一个如何匹配的文本

不是要和文本匹配,我是要换个文件名
如:进程名是hh.exe    路径是:d:\1111\       我要换成和它同目录的其他文件的文件名     如d:\1111\ gg.txt

[ 本帖最后由 lxf0356 于 2010-5-22 08:20 编辑 ]

TOP

2.需要一个你的进程名和你想修改成啥样路径名的对应的文本
4.跟2一样,需要一个如何匹配的文本
努力学习,努力挣分

TOP

原帖由 sgaizxt001 于 2010-5-22 00:16 发表
2.需要一个你的进程名和你想修改成啥样路径名的对应的文本
4.跟2一样,需要一个如何匹配的文本

不是要和文本匹配,我是要换个文件名
如:进程名是hh.exe    路径是:d:\1111\       我要换成和它同目录的其他文件的文件名     如d:\1111\ gg.txt

TOP

1,2楼的代码是仿照楼主在1楼提供的示例输出要求去写的。
2,如果只是想去匹配某一个进程的,则可以:
  1. @echo off&setlocal enabledelayedexpansion
  2. set r="%cd%"
  3. for /f "skip=1 delims=" %%a in ('wmic process where caption^="qq.exe" get executablepath') do (
  4. echo.准确匹配程序名的大小写:%%~nxa
  5. echo.完整路径:%%a
  6. echo.所在目录:%%~dpa
  7. echo.同目录其他文件:%%~dpabugreport.exe
  8. call:n "%%~dpa"
  9. echo.父目录:!s!
  10. echo.匹配父目录文件:!s!QQUninst
  11. echo.匹配父目录中的Misc目录:!s!Misc
  12. echo.匹配帐户目录:!s!Users
  13. for /d %%b in ("!s!Users\*") do if /i not "%%~nb"=="All Users" set n=!n!,%%~nb
  14. echo.号码:!n:~1!
  15. )
  16. pause&exit
  17. :n
  18. cd/d %1&cd ..&set "s=!cd!\"&cd/d %r%
复制代码

  1. @echo off&setlocal enabledelayedexpansion
  2. ::此方法仅用于2009或2010版qq
  3. for /f "skip=1 delims=" %%a in ('wmic process where caption^="qq.exe" get executablepath') do (
  4. echo.准确匹配程序名的大小写:%%~nxa
  5. echo.完整路径:%%a
  6. echo.所在目录:%%~dpa
  7. echo.同目录其他文件:%%~dpabugreport.exe
  8. set a=%%a&set s=!a:~0,-13!
  9. echo.父目录:!s!
  10. echo.匹配父目录文件:!s!QQUninst
  11. echo.匹配父目录中的Misc目录:!s!Misc
  12. echo.匹配帐户目录:!s!Users
  13. for /d %%b in ("!s!Users\*") do if /i not "%%~nb"=="All Users" set n=!n!,%%~nb
  14. echo.号码:!n:~1!
  15. )
  16. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-22 13:21 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2010-5-22 13:15 发表
1,2楼的代码是仿照楼主在1楼提供的示例输出要求去写的。
2,如果只是想去匹配某一个进程的,则可以:@echo off&setlocal enabledelayedexpansion
set r="%cd%"
for /f "skip=1 delims=" %%a in ('wmic process w ...

是不是我的问题太多了,大家不好解决啊!我想匹配多个进程!

现在不考虑问题3.和4.   

问题1:已经解决了!
问题2:获取多个进程,判断,换同目录下其他文件名。
如: 进程名1:   bathome.exe      在  d:\tools目录下       在同目录下有个文件  tem.txt
         进程名2:verybat.exe        在  e:\blank目录下       在同目录下有个文件  ping.txt

用一个批处理写出来的格式应该是这样的:
[Common]
Count=2
[0]
路径=d:\tools\tem.txt
类型=1
访问=15
[1]
路径=e:\blank\ping.txt
类型=1
访问=15

TOP

  1. @echo off&setlocal enabledelayedexpansion&set n=0
  2. set @0=tem.txt
  3. set @1=ping.txt
  4. for %%a in (bathome verybat) do (
  5. for /f "skip=1 delims=" %%b in ('wmic process where caption^="%%a.exe" get executablepath') do set "#!n!=%%b"
  6. set/a n+=1)
  7. (echo.[Common]&echo.Count=%n%
  8. for /f "tokens=1* delims==#" %%a in ('set #') do echo.[%%a]&echo.路径=%%~dpb!@%%a!&echo.类型=1&echo.访问=15)>1.txt
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-22 18:16 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2010-5-22 18:15 发表
@echo off&setlocal enabledelayedexpansion&set n=0
set @0=tem.txt
set @1=ping.txt
for %%a in (bathome verybat) do (
for /f "skip=1 delims=" %%b in ('wmic process where caption^="%%a.exe" get execut ...


谢谢“寒夜孤星”大哥
问题1、2解决了!非常感谢!非常感谢!
刚才刚发现问题3,也解决了

问题4.如果进程所在的路径不是想要的路径该怎么写?
如:还是QQ。exe
进程在C:\Program Files\Tencent\QQ\Bin   我想要的路径不是Bin  而是Misc文件夹
能不能加入刚才的批处理里面

[ 本帖最后由 lxf0356 于 2010-5-22 18:58 编辑 ]

TOP

我觉得你可以这样做,在获取完路径之后把路径设为变量,然后用cd跳转,

TOP

返回列表