标题: [文件操作] 批处理怎样获取运行中的进程的路径? [打印本页]
作者: ibm 时间: 2008-10-5 21:21 标题: 批处理怎样获取运行中的进程的路径?
如题所示,
已经进程的映像名,如何提取此进程的路径?
运行环境XP系统CMD。
作者: Batcher 时间: 2008-10-5 21:25
- wmic process where name="qq.exe" get executablepath /value
复制代码
作者: ibm 时间: 2008-10-5 21:28
我在google上怎么也找不到,谢谢!
作者: ibm 时间: 2008-10-5 22:39
不好意思,还有一个问题,
虽然路径找到了,但我只想要从盘符到可执行文件的上一级文件夹,并赋值到变量Var里,该怎么写?
作者: zqz0012005 时间: 2008-10-6 01:53
利用for提取- @echo off
- for /f "skip=1 delims=" %%a in ('wmic process where "name='qq.exe'" get ExecutablePath') do set "var=%%~dpa"
- set "var=%var:~,-1%"
- echo %var%
- echo.&pause
复制代码
作者: ibm 时间: 2008-10-6 12:17
没有简单点的代码吗?
还是要谢谢!
作者: ibm 时间: 2008-10-6 19:59 标题: 回复 5楼 的帖子
不成功啊,%var%中得到的是这段代码所在的批处理的路径,怎么回事啊?急!
作者: pusofalse 时间: 2008-10-6 20:08 标题: 回复 7楼 的帖子
仔细看好了:- C:\Documents and Settings\Administrator\??>type aa.bat
- @echo off
- for /f "skip=1 delims=" %%a in ('wmic process where "name='qq.exe'" get ExecutablePa
- h') do set "var=%%~dpa"
- set "var=%var:~,-1%"
- echo %var%
- echo.&pause
- C:\Documents and Settings\Administrator\??>aa.bat
- D:\Program Files\Tencent\QQ
-
-
- Press any key to continue . . .
复制代码
[ 本帖最后由 pusofalse 于 2008-10-6 20:10 编辑 ]
作者: raozhao2008 时间: 2008-10-6 20:09 标题: 回复 5楼 的帖子
运行得
'wmic' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
作者: Batcher 时间: 2008-10-6 20:35 标题: 回复 9楼 的帖子
你用的哪个版本的系统?
作者: zqz0012005 时间: 2008-10-6 20:37 标题: 回复 9楼 的帖子
Q: 为什么不行啊?
A: 去电线杆上找个老军医的手机,他是专治+包治这个的。如果治疗周期较长,建议列出你的测试环境、测试用例、出错信息,供大家帮助你解决问题。
作者: ibm 时间: 2008-10-6 20:45
我刚看到回帖时,测试过,没问题,但那时是在XP sp2测试的,
现在Vista下,测试不通过
我在命令行下的测试发上来,大家看看:
-
-
- C:\>for /f "skip=1 delims=" %a in ('wmic process where "name='qq.exe'" get Execu
- tablePath') do set "var=%~dpa"
- C:\>set "var=D:\Program Files\OICQ\QQ\"
- C:\>set "var=D:\Program Files\OICQ\QQ\"
- C:\>set "var=D:\Program Files\OICQ\QQ\"
- C:\>set "var=C:\"
- C:\>
-
复制代码
我开了三个QQ,所以会有三个路径,但不知道为什么倒数第二行会出现“set "var=C:\" ”,这个变成了最终的Var值,但这并不是我想要的,
还有,要是和系统有关系,我要在XP和Vista下都可以用的。
作者: zqz0012005 时间: 2008-10-6 20:56
单独运行一句,把结果贴出来看看
wmic process where "name='qq.exe'" get ExecutablePath
作者: ibm 时间: 2008-10-6 21:04 标题: 回复 13楼 的帖子
D:\Program Files\OICQ\QQ\QQ.exe
D:\Program Files\OICQ\QQ\QQ.exe
D:\Program Files\OICQ\QQ\QQ.exe
作者: zqz0012005 时间: 2008-10-6 21:31
应该没问题啊
在wmic前面加上@再试试
for /f "skip=1 delims=" %a in ('@wmic process where "name='qq.exe'" get ExecutablePath') do echo %a
作者: ibm 时间: 2008-10-6 22:04
谢谢版主,问题解决了,是因为For没有过虑空行,VAR的最后一个值是CMD的当前路径,
我已经找到解决办法了:
-
- @echo off
- set set "var="
- for /f "skip=1 delims=" %%a in ('wmic process where "name='qq.exe'" get ExecutablePath') do (
- if not defined var set "var=%%~dpa"
- )
- set "var=%var:~,-1%"
- echo %var%
- echo.&pause
复制代码
作者: zqz0012005 时间: 2008-10-6 22:13
XP下的for会自动忽略空行的。就算是for没有过滤空行,最后也应该是set "var=",而不会是set "var=C:\"
难道是Vista下的for结果不同?
而且你的if not defined var set "var=%%~dpa"也达不到过滤空行的目的
作者: zqz0012005 时间: 2008-10-7 19:24
楼主今天上线为什么不回复呢?
是Vista系统的测试一下直接在CMD中运行以下语句:- for /f "skip=1 delims=" %a in ('wmic process where "name='qq.exe'" get ExecutablePath') do set "var=%~dpa"
复制代码
我的XP SP3只有一行结果:set "var=E:\Program Files\Tencent\QQ\"
作者: 愚无尽 时间: 2008-10-7 22:35
哇 版主们水平都不错哦,都很热心,不错,又学习了
作者: ibm 时间: 2008-10-11 19:47 标题: 回复 18楼 的帖子
在CMD下执行你的代码后,再echo %var%,结果是:
C:\
我在进入CMD后执行了CD\,否则,echo %var%的结果是:
C:\users\Administrator\
看我的图片,你或许能明白我为什么要加“if not defined var set "var=%%~dpa" ”了。
我开了两个QQ,所以有两个路径。
作者: zqz0012005 时间: 2008-10-11 20:40
楼上的试试直接运行
for /f "skip=1 delims=" %a in ('wmic process where "name='qq.exe'" get ExecutablePath') do echo %~dpa
看看显示什么。难道Vista下的for命令结果真的不同?
作者: ibm 时间: 2008-10-11 20:56 标题: 回复 21楼 的帖子
贴图,不写字了,看着直观!
说明一下,我开了两个QQ,所以有两个路径。
作者: ibm 时间: 2008-10-12 22:37
看错了,又多发了一张图
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |