找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31484|回复: 8

[系统相关] 【已经解决】批处理如何获取Path系统变量中的指定路径(目录)?

[复制链接]
发表于 2016-4-23 21:27:10 | 显示全部楼层 |阅读模式
本帖最后由 vikimono 于 2016-5-2 14:15 编辑

我想实现的是读取环境变量中%PATH%的目录来确定某个软件运行目录

以下是我测试电脑上的%PATH%

D:\Test\Oracle\Oracle11gClient_4\Bin;D:\Test\Oracle\Oracle11g_4\Bin;D:\Test\Oracle\Oracle11g_4\Bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\

我想获取 D:\Test\Oracle\Oracle11g_4\Bin,因为习惯问题有时候会在C,D,E,F都有可能,又国Oracle版本问题有时会是D:\Test\Oracle\Oracle11g_2\Bin,所以特征字符串可以是Oracle11g_
  1. @echo off
  2. set str=Oracle11g_
  3. set new="%path:;=" "%"
  4. (for %%a in (%new%) do (
  5. set mydir=%%~a
  6. ))|findstr /ic:"%str%"
  7. echo %mydir%
  8. pause
复制代码
实际上变量mydir为空的,set赋值在这里为什么会失效?
如果有有效,我还有一个问题,如何CD到这个目录呢?如果当前盘符与软件盘符一致可以直接进入,不在一个盘符如何判断软件目录所以盘符呢?

请指教,谢谢!

评分

参与人数 1PB -2 收起 理由
pcl_test -2 勿发笼统无意义的标题

查看全部评分

发表于 2016-4-23 21:33:05 | 显示全部楼层
  1. cd /d
复制代码
发表于 2016-4-24 01:33:27 | 显示全部楼层
回复 1# vikimono
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ("%path%") do (set "name_b=%%i"
  3. for /l %%n in (1,1,8191)do (
  4.   for /f "tokens=1,* delims=;" %%j in ("!name_b!;;;;;")do (set "name_b=%%k"
  5.    echo,%%j
  6.   )
  7. )
  8. )
  9. pause
复制代码
发表于 2016-4-24 15:57:16 | 显示全部楼层
回复 3# /zhqsystem/zhq
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "s=%path%#"
  4. :re
  5. for /f "tokens=1,* delims=;" %%1 in ("!s!")do (
  6.         set s=%%2
  7.         set result=%%1
  8.         echo !result:#=!
  9. )
  10. if "%s:~-1%"=="#"  goto re
复制代码
发表于 2016-4-24 19:17:28 | 显示全部楼层
回复 4# Nsqs
回错楼了?
发表于 2016-4-25 20:44:21 | 显示全部楼层
  1. //&cls&cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var wshell = new ActiveXObject('WScript.Shell');
  3. WSH.echo(wshell.ExpandEnvironmentStrings('%path%').match(/[^;]*Oracle11g_[^;]*/));
复制代码
发表于 2016-4-25 22:30:59 | 显示全部楼层
  1. setlocal enabledelayedexpansion
  2. echo;!Path:;=^

  3. !>~tmp.$
  4. find /i "关键字" < ~tmp.$
复制代码
发表于 2016-4-25 22:34:56 | 显示全部楼层
  1. [regex]::match($env:path, '[^;]*Oracle11g_[^;]*').Value
复制代码
 楼主| 发表于 2016-5-2 14:11:59 | 显示全部楼层
感谢各位,大开眼界啊。
我目前采用了读取注册表方法
  1. for /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\Wow6432Node\ORACLE" ^| find /i "ORACLE_HOME"') do SET "dbHM=%%j"
  2. if "%dbHM%"=="" goto BSTOP
  3. %dbHM:~0,2%
  4. CD %dbHM%\BIN
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 20:03 , Processed in 0.019547 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表