标题: [系统相关] 【已经解决】批处理如何获取Path系统变量中的指定路径(目录)? [打印本页]
作者: vikimono 时间: 2016-4-23 21:27 标题: 【已经解决】批处理如何获取Path系统变量中的指定路径(目录)?
本帖最后由 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_- @echo off
- set str=Oracle11g_
- set new="%path:;=" "%"
- (for %%a in (%new%) do (
- set mydir=%%~a
- ))|findstr /ic:"%str%"
- echo %mydir%
- pause
复制代码
实际上变量mydir为空的,set赋值在这里为什么会失效?
如果有有效,我还有一个问题,如何CD到这个目录呢?如果当前盘符与软件盘符一致可以直接进入,不在一个盘符如何判断软件目录所以盘符呢?
请指教,谢谢!
作者: codegay 时间: 2016-4-23 21:33
复制代码
作者: /zhqsystem/zhq 时间: 2016-4-24 01:33
回复 1# vikimono
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in ("%path%") do (set "name_b=%%i"
- for /l %%n in (1,1,8191)do (
- for /f "tokens=1,* delims=;" %%j in ("!name_b!;;;;;")do (set "name_b=%%k"
- echo,%%j
- )
- )
- )
- pause
复制代码
作者: Nsqs 时间: 2016-4-24 15:57
回复 3# /zhqsystem/zhq - @echo off
- setlocal enabledelayedexpansion
- set "s=%path%#"
- :re
- for /f "tokens=1,* delims=;" %%1 in ("!s!")do (
- set s=%%2
- set result=%%1
- echo !result:#=!
- )
- if "%s:~-1%"=="#" goto re
复制代码
作者: /zhqsystem/zhq 时间: 2016-4-24 19:17
回复 4# Nsqs
回错楼了?
作者: pcl_test 时间: 2016-4-25 20:44
- //&cls&cscript -nologo -e:jscript "%~f0"&pause&exit
- var wshell = new ActiveXObject('WScript.Shell');
- WSH.echo(wshell.ExpandEnvironmentStrings('%path%').match(/[^;]*Oracle11g_[^;]*/));
复制代码
作者: WHY 时间: 2016-4-25 22:30
- setlocal enabledelayedexpansion
- echo;!Path:;=^
-
- !>~tmp.$
- find /i "关键字" < ~tmp.$
复制代码
作者: WHY 时间: 2016-4-25 22:34
- [regex]::match($env:path, '[^;]*Oracle11g_[^;]*').Value
复制代码
作者: vikimono 时间: 2016-5-2 14:11
感谢各位,大开眼界啊。
我目前采用了读取注册表方法- for /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\Wow6432Node\ORACLE" ^| find /i "ORACLE_HOME"') do SET "dbHM=%%j"
- if "%dbHM%"=="" goto BSTOP
- %dbHM:~0,2%
- CD %dbHM%\BIN
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |