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

[系统相关] 【已经解决】批处理如何获取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_
  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到这个目录呢?如果当前盘符与软件盘符一致可以直接进入,不在一个盘符如何判断软件目录所以盘符呢?

请指教,谢谢!
1

评分人数

    • pcl_test: 勿发笼统无意义的标题PB -2

  1. cd /d
复制代码
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 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
复制代码
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

回复 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
复制代码

TOP

回复 4# Nsqs
回错楼了?
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

  1. //&cls&cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var wshell = new ActiveXObject('WScript.Shell');
  3. WSH.echo(wshell.ExpandEnvironmentStrings('%path%').match(/[^;]*Oracle11g_[^;]*/));
复制代码

TOP

  1. setlocal enabledelayedexpansion
  2. echo;!Path:;=^
  3. !>~tmp.$
  4. find /i "关键字" < ~tmp.$
复制代码

TOP

  1. [regex]::match($env:path, '[^;]*Oracle11g_[^;]*').Value
复制代码

TOP

感谢各位,大开眼界啊。
我目前采用了读取注册表方法
  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
复制代码

TOP

返回列表