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

[文本处理] [已解决]批处理如何获取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读取指定组)也实现能获取到该路径,请教各位老师如何解决。
1

评分人数

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

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

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

TOP

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

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


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


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


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

TOP

  1. path|sed -r "s/^.*;?(D:\\My Program\\VC\\Tools\\[^;]*);?.*$/\1/"
复制代码
看得多说得多,远比不上写得多。

TOP

本帖最后由 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\\"
复制代码
1

评分人数

看得多说得多,远比不上写得多。

TOP

不明白。

如果已经知道了路径是 "D:\My Program\VC\Tools\",为什么还要去获取?
如果不知道具体路径,那么要获取的路径有什么关键字?

TOP

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

TOP

回复 4# weichenxiehou


   你好,测试环境请用xp或者win7,sed命令可是linux的啊。

TOP

回复 5# weichenxiehou


   谢谢,高手!!!

TOP

回复 8# douqu
    sed有移植到windows的版本。
看得多说得多,远比不上写得多。

TOP

回复 8# douqu


这里有windows版的
http://www.bathome.net/thread-16975-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表