- ベストアンサー
PATHから特定の文字列を抜く方法
- バッチファイルでPATHから特定の文字列を抜く方法について教えてください。
- コマンドプロンプトのコマンドを使用して、特定の文字列を変数に格納する方法を知りたいです。
- Oracleのインストールパスを抜き出す方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No3の方のように環境変数を調べることで目的を果たせるならその方が良いと思います。 PATHを調べるのであれば、もっと簡単に書けます。 @echo off set X="%PATH:;=";"%" for %%X in (%X%) do call :sub %%X goto :EOF :sub set X=%~1 if "%X:oracle=%" neq "%X%" echo %X%
その他の回答 (3)
- kakedashidashi
- ベストアンサー率67% (21/31)
No.2です。 もしOracleのホームディレクトリを調べるという目的であれば、レジストリに格納されているので以下のほうが簡単だと思います。PATH変数自体を確認することが目的ならNGですが。 for /f "tokens=*" %i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE" /s ^| findstr ORACLE_HOME ^| findstr /v ORACLE_HOME_NAME') do @set PATH_OUTPUT=%i echo %PATH_OUTPUT% ※レジストリ名はサーバのものなのでちょっと違うかも。環境に合わせてください。
お礼
レジストリを調べるという手もありましたね。 盲点でした。 ありがとうございます。
- kakedashidashi
- ベストアンサー率67% (21/31)
Windowsのバッチで文字列操作って難しいんですよね。 @echo off REM 検索したいパスのキーワードをセット set PATH_KEYWORD=oracle REM 改行を変数化(^は改行コードをエスケープしているのでこのあとは2行空ける) set LF=^ REM PATH変数のデリミタを改行コードに置換 set PATH_LF=%PATH:;=!LF!% REM 環境変数遅延展開をセット setlocal enabledelayedexpansion REM メイン処理:パスからキーワード検索してPATH_OUTPUT変数にセット for /F "delims=" %%i in ("%PATH_LF%") do echo %%i | findstr %PATH_KEYWORD% > NUL && set PATH_OUTPUT=%%i REM "bin"を削除 set PATH_OUTPUT=%PATH_OUTPUT:bin=% REM 出力してみる echo %PATH_OUTPUT% pause
お礼
>Windowsのバッチで文字列操作って難しいんですよね。 この言葉すごくずしーんってきました。 プログラム初心者にはなかなかきつかったです。 ご丁寧にありがとうございました。
- Yune-Kichi
- ベストアンサー率74% (465/626)
---- ここから ---- @ECHO OFF SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION SET TempPath=%PATH% :LOOP IF "!TempPath!"=="" GOTO FIN FOR /F "tokens=1,* delims=;" %%A IN ("!TempPath!") DO @( SET TempPath=%%B ECHO %%A | FINDSTR /I /C:"Oracle" > NUL IF !ERRORLEVEL! EQU 0 ( SET OracleBinPath=%%A GOTO FIN ) ) GOTO LOOP :FIN IF NOT DEFINED OracleBinPath ( ECHO NOT FOUND. EXIT /B ) FOR /D %%A IN ("!OracleBinPath!.") DO @SET OraclePath=%%~dpA IF NOT DEFINED OraclePath ( SET OraclePath=!OracleBinPath! ) ---- ここまで ---- FOR /Fによる行単位の解析をループさせ,環境変数の遅延評価を使ってPATHを一つずつ調べていっています。 文字列の部分一致はIFではできないようなので,FINDSTRした後にERRORLEVELの遅延評価を使って確認しています。 最後に,%PATH%にはbinが付いているので,FOR /Dとループ変数の修飾子を使って,binディレクトリを取り除いています。 こんな感じでしょうか。
お礼
一番にご回答いただき、しかもとても丁寧に記載いただきありがとうございました。 こちらを採用させていただきました。 そのまま使用できて助かりました。
お礼
ありがとうございます。 無事できました! こんなに短いプログラムでできるなんて感動です。