0
我需要在系統中找到特定的文件位置(在我的情況下是java)。爲此,我會首先通過%PATH%變量搜索,並從這裏出色的腳本搜索:'Pretty print' windows %PATH% variable - how to split on ';' in CMD shell找到路徑中的文件,如果不存在,一些已知位置
但是,如果在路徑中找不到命令在64位環境下安裝java,通常是64位java),我也有一組位置可以查看(即程序文件名中的(x86))。
爲了使它更具可用性,我想在bat中調用一個函數來完成它,但這裏是我失敗的地方。
這個地步,我有:
::@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循環的第一次迭代中給出完整路徑變量。
任何人都可以指向一個方向什麼是錯的?
超級!您的解決方案適用於查找Java - 謝謝! – Erik