システム内の特定のファイルの場所 (私の場合は Java) を見つける必要があります。そのために、最初に %PATH% 変数を検索し、ここから優れたスクリプトを検索します: 'Pretty print' windows %PATH% variable - how to split on ';' CMD シェルで
しかし、コマンドがパスに見つからない場合 (または、見つかったが適切ではない - 私の場合、64 ビット環境で 32 ビット Java インストールを探しており、通常は 64 ビット Java がパスにあります) 探す場所のセットがあります同様に(つまり、プログラムファイル名の(x86))。
より使いやすくするために、バットで関数を呼び出してやりたいのですが、ここで失敗します。
これまでのところ、私は持っています:
::@echo off
setlocal DisableDelayedExpansion
set FILENAME=java
set CMDLINE=-version -d32
set JAVAPATH="C:\Program Files (x86)\Java\jre7\bin;C:\Program Files\Java\jre7\bin"
call :Checkpath "%path%"
if "%JAVALOC%!="" goto :EOF
call :Checkpath %JAVAPATH%
goto :EOF
:Checkpath
REM THIS following line seems to be the problem
set var="%~1"
set "var=%var:"=""%"
set "var=%var:^=^^%"
set "var=%var:&=^&%"
set "var=%var:|=^|%"
set "var=%var:<=^<%"
set "var=%var:>=^>%"
set "var=%var:;=^;^;%"
set var=%var:""="%
set "var=%var:"=""Q%"
set "var=%var:;;="S"S%"
set "var=%var:^;^;=;%"
set "var=%var:""="%"
setlocal EnableDelayedExpansion
set "var=!var:"Q=!"
for %%a in ("!var:"S"S=";"!") do (
if "!!"=="" endlocal
if %%a neq "" echo %%~a\%FILENAME% %CMDLINE%
if %ERRORLEVEL%==1 (
SET JAVALOC=%%a
)
)
:EOF
echo %JAVALOC%
機能しません-関数を呼び出さないと、パスを次のように渡すスクリプトですべてがうまくいきます
set var=%path%
しかし、関数内で使用すると、FOR ループの最初の反復でフルパス変数が与えられるだけです。
誰かが間違っている方向に私を向けることができますか?