标题: [文本处理] [已解决]批处理获进程获路径,判断进程名称并写文本? [打印本页]
作者: lxf0356 时间: 2010-5-21 17:14 标题: [已解决]批处理获进程获路径,判断进程名称并写文本?
- @echo off&setlocal enabledelayedexpansion
- set "str=360tray.exe IAAnotif.exe"
- >tem.txt echo [Common]
- set n=0
- for /f "delims=" %%i in ('reg QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" ^|findstr /i "%str:.=\.%"') do (
- set str=%%i
- set "str=!str:*REG_SZ=!"
- for %%a in (!str!) do if "%%~xa" == ".exe" set "ph=%%~dpa"
- set "_!n!=!ph!"&set /a "n+=1"
- )
- >>tem.txt echo Count=%n%
- set/an-=1
- (for /l %%i in (0 1 %n%) do (
- echo [%%i]&echo 路径=!_%%i!&echo 类型=1&echo 访问=15
- ))>>tem.txt
- pause
复制代码
这是曾经热心朋友帮我写的批处理,结果是这样的- [Common]
- Count=2
- [0]
- 路径=C:\Program Files\360\360Safe\safemon\
- 类型=1
- 访问=15
- [1]
- 路径=C:\Users\jing\Desktop\Manager\
- 类型=1
- 访问=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 编辑 ]
作者: 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 "#!n!=%%b"
- set/a n+=1)
- (echo.[Common]&echo.Count=%n%
- for /f "tokens=1* delims==#" %%a in ('set #') do echo.[%%a]&echo.路径=%%b&echo.类型=1&echo.访问=15)>1.txt
复制代码
2,匹配所在目录:- @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 "#!n!=%%b"
- set/a n+=1)
- (echo.[Common]&echo.Count=%n%
- for /f "tokens=1* delims==#" %%a in ('set #') do echo.[%%a]&echo.路径=%%~dpb&echo.类型=1&echo.访问=15)>1.txt
复制代码
3,匹配同一层的子目录:- @echo off&setlocal enabledelayedexpansion&set n=0&set r="%cd%"
- for %%a in (360tray IAAnotif) do (
- for /f "skip=1 delims=" %%b in ('wmic process where caption^="%%a.exe" get executablepath') do set "#!n!=%%b"
- set/a n+=1)
- (echo.[Common]&echo.Count=%n%
- for /f "tokens=1* delims==#" %%a in ('set #') do (
- echo.[%%a]
- call:n "%%~dpb"
- echo.路径=!s!&echo.类型=1&echo.访问=15))>1.txt
- exit
- :n
- cd/d %1&cd ..&set "s=!cd!\子目录"&cd/d %r%
复制代码
[ 本帖最后由 hanyeguxing 于 2010-5-21 18:38 编辑 ]
作者: changzhi 时间: 2010-5-21 20:43
- @echo off
- wmic process where name='qq.exe' get ExecutablePath >2.txt
- ping www.baidu.com >nul -w 2
- for /f "skip=1" %%i in (2.txt) do echo 文件%%i
- for /f "skip=1" %%i in (2.txt) do echo 所在目录为%%~pi
- pause
复制代码
[ 本帖最后由 changzhi 于 2010-5-22 11:38 编辑 ]
作者: lxf0356 时间: 2010-5-21 20:58
原帖由 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 编辑 ]
作者: sgaizxt001 时间: 2010-5-22 00:16
2.需要一个你的进程名和你想修改成啥样路径名的对应的文本
4.跟2一样,需要一个如何匹配的文本
作者: lxf0356 时间: 2010-5-22 08:16
原帖由 sgaizxt001 于 2010-5-22 00:16 发表
2.需要一个你的进程名和你想修改成啥样路径名的对应的文本
4.跟2一样,需要一个如何匹配的文本
不是要和文本匹配,我是要换个文件名
如:进程名是hh.exe 路径是:d:\1111\ 我要换成和它同目录的其他文件的文件名 如d:\1111\ gg.txt
作者: 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 where caption^="qq.exe" get executablepath') do (
- echo.准确匹配程序名的大小写:%%~nxa
- echo.完整路径:%%a
- echo.所在目录:%%~dpa
- echo.同目录其他文件:%%~dpabugreport.exe
- call:n "%%~dpa"
- echo.父目录:!s!
- echo.匹配父目录文件:!s!QQUninst
- echo.匹配父目录中的Misc目录:!s!Misc
- echo.匹配帐户目录:!s!Users
- for /d %%b in ("!s!Users\*") do if /i not "%%~nb"=="All Users" set n=!n!,%%~nb
- echo.号码:!n:~1!
- )
- pause&exit
- :n
- cd/d %1&cd ..&set "s=!cd!\"&cd/d %r%
复制代码
或- @echo off&setlocal enabledelayedexpansion
- ::此方法仅用于2009或2010版qq
- for /f "skip=1 delims=" %%a in ('wmic process where caption^="qq.exe" get executablepath') do (
- echo.准确匹配程序名的大小写:%%~nxa
- echo.完整路径:%%a
- echo.所在目录:%%~dpa
- echo.同目录其他文件:%%~dpabugreport.exe
- set a=%%a&set s=!a:~0,-13!
- echo.父目录:!s!
- echo.匹配父目录文件:!s!QQUninst
- echo.匹配父目录中的Misc目录:!s!Misc
- echo.匹配帐户目录:!s!Users
- for /d %%b in ("!s!Users\*") do if /i not "%%~nb"=="All Users" set n=!n!,%%~nb
- echo.号码:!n:~1!
- )
- pause
复制代码
[ 本帖最后由 hanyeguxing 于 2010-5-22 13:21 编辑 ]
作者: lxf0356 时间: 2010-5-22 18:04
原帖由 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
作者: 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 executablepath') do set "#!n!=%%b"
- set/a n+=1)
- (echo.[Common]&echo.Count=%n%
- 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 编辑 ]
作者: lxf0356 时间: 2010-5-22 18:53
原帖由 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 编辑 ]
作者: changzhi 时间: 2010-5-23 11:58
我觉得你可以这样做,在获取完路径之后把路径设为变量,然后用cd跳转,
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |