我需要在系统中找到一个特定的文件位置(在我的例子中是 java)。为此,我将首先通过 %PATH% 变量和优秀的脚本从这里搜索:'Pretty print' windows %PATH% variable - how to split on ';' 在 CMD 外壳中
但是如果在路径中找不到命令(或者,找到了,但不适合 - 在我的情况下,我正在寻找 64 位环境中的 32 位 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%
但是使用 in 函数,它只是在 FOR 循环的第一次迭代中给出完整的路径变量。
任何人都可以指出我的方向有什么问题吗?