Board logo

标题: [文本处理] [已解决]批处理如何获取path环境变量中的某个路径? [打印本页]

作者: douqu    时间: 2012-11-28 19:09     标题: [已解决]批处理如何获取path环境变量中的某个路径?

如标题所言,我现想获取变量中的某个路径,例如本机path路径值为:
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\My Program\SVN\b
in;D:\My Program\VC\Tools\WinNT;D:\My Program\VC\MSDev98\Bin;D:\My Program\VC\To
ols;D:\My Program\VC98\bin

我想获取其中的 "D:\My Program\VC\Tools\"  而去掉其他的路径。
当然用for命令参数delims分号分隔然后再tokens,最后拓展变量可以得到,但是我想在不同的机器上(其他机器可能path变量的排列和本机不一致,所以不能直接用tokens读取指定组)也实现能获取到该路径,请教各位老师如何解决。
作者: tmplinshi    时间: 2012-11-28 20:15

本帖最后由 tmplinshi 于 2012-11-28 23:42 编辑

如果路径下有一个 a.exe:
  1. @echo off
  2. for %%a in ("a.exe") do echo %%~dp$path:a
  3. pause
复制代码

作者: douqu    时间: 2012-11-28 20:37

回复 2# tmplinshi
首先感谢版主的回复,可能是我表述不清楚,你的解答并不是我想要的结果。

其实我的意思就是要从path这个命令或者%path%这个环境变量中提取出其中的任意一组指定条件的路径。


我尝试过用findstr命令,但由于其对空格和/的处理我不理解,无法做到.


也想过用for /f 把%path%环境变量按分号为分隔符输出到一个临时文件中,然后find.此条可行.但是在输出文件的时有些许问题.


其主要作用是,比如我我安装某个软件时添加了一个path值,如果卸载的话,就直接读取path这个环境变量的中路径,然后执行卸载。
作者: weichenxiehou    时间: 2012-11-28 21:48

  1. path|sed -r "s/^.*;?(D:\\My Program\\VC\\Tools\\[^;]*);?.*$/\1/"
复制代码

作者: weichenxiehou    时间: 2012-11-28 21:56

本帖最后由 weichenxiehou 于 2012-11-28 22:01 编辑

用findstr照样可以啊。。
  1. @echo off
  2. set new="%path:;=" "%"
  3. (for %%a in (%new%) do (
  4.   echo,%%~a
  5. ))|findstr /ic:"D:\\My Program\\VC\\Tools\\"
复制代码

作者: tmplinshi    时间: 2012-11-28 23:37

不明白。

如果已经知道了路径是 "D:\My Program\VC\Tools\",为什么还要去获取?
如果不知道具体路径,那么要获取的路径有什么关键字?
作者: apang    时间: 2012-11-28 23:40

直接判断?
  1. if /i "%path:D:\My Program\VC\Tools\=%" neq "%path%" echo D:\My Program\VC\Tools\
复制代码

作者: douqu    时间: 2012-11-29 10:13

回复 4# weichenxiehou


   你好,测试环境请用xp或者win7,sed命令可是linux的啊。
作者: douqu    时间: 2012-11-29 10:17

回复 5# weichenxiehou


   谢谢,高手!!!
作者: weichenxiehou    时间: 2012-11-29 12:00

回复 8# douqu
    sed有移植到windows的版本。
作者: Batcher    时间: 2012-11-29 22:04

回复 8# douqu


这里有windows版的
http://www.bathome.net/thread-16975-1-1.html




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2