我想弄清楚用户计算机上安装了哪个版本的软件。版本是5.0,4.0,3.0。版本 5.0是最新的。
setlocal enabledelayexpansion
。!variable!
来改变IF循环中变量VERSION
的值。 我无法完成这项工作。你能帮忙吗?非常感谢你。
这是我的剧本:
:: Find the version installed in the user's computer
:: valid versions are 5.0, 4.0, 3.0
setlocal enabledelayedexpansion
ECHO OFF
SET "error_code=0"
:: Latest Software version
SET VERSION=5.0
echo checking SOFTWARE Version: %VERSION%
:: build a path and check if it exists
SET "PATH=%PROGRAMFILES%\MYSOFT\%VERSION%"
call:CHECK_IF_VALID "%PATH%"
if %error_code% == 1 (
:: check v.4
SET VERSION=4.0
echo checking SOFTWARE Version: !VERSION!
SET "PATH=%PROGRAMFILES%\MYSOFT\%VERSION%"
call:CHECK_IF_VALID "%PATH%"
if %error_code% == 1 (
:: check v.3
SET VERSION=3.0
echo checking SOFTWARE Version: !VERSION!
SET "PATH=%PROGRAMFILES%\MYSOFT\%VERSION%"
call:CHECK_IF_VALID "%PATH%"
if %error_code% == 1 (
echo.&pause&goto:eof
)
)
)
:: Function to check if path exists
:CHECK_IF_VALID
if not exist %1 (
echo version not found...
set "error_code=1"
) else echo. Version found...
echo.
goto:eof
EXIT
答案 0 :(得分:1)
path
指的是Windows在此目录中找不到的可执行文件时搜索的路径序列。改变它不是一个好主意。一点也不好。
::
是一个损坏的标签,并且(括号中的命令序列)或code blocks
不允许使用标签 - 而是使用rem
。
每当您需要访问该代码块中!var!
的修改值时,您需要在code block
内使用var
。 %var%
访问var
的原始值(遇到代码块时)
因此,
set "versionfound="
for %%v in (5.0 4.0 3.0) do if not defined versionfound (
if exist "%PROGRAMFILES%\MYSOFT\%%v" set "versionfound=%%v"
)
if defined versionfound (echo %versionfound% found) else (echo not found)
应检测版本。它依次将三种可能性替换为字符串,并检测该版本是否存在。如果是,则将versionfound
设置为找到的版本(已初始化为 nothing ),然后跳过检查,因为if defined
使用当前值环境(未设置值集或值)。
答案 1 :(得分:0)
也许更简单:
使用所有版本创建list
,并在测试loop
的所有版本上创建path
。
@echo off
set "$version=3.0 4.0 5.0"
SET "$PATH=%PROGRAMFILES%\MYSOFT\"
::Checking if a version is installed
for %%a in (%$version%) do (
echo Checking Version : %%a
if exist "%$PATH%%%a" (
echo VERSION IS : %%a
goto:eof
)
)
echo No version Found !!
如果可以在同一台机器上安装各种版本,那么我们最后一个:
@echo off
set "$version=3.0 4.0 5.0"
SET "$PATH=%PROGRAMFILES%\MYSOFT\"
set "$LastVersion=none"
setlocal enabledelayedexpansion
::Checking if a version is installed
for %%a in (%$version%) do (
echo Checking Version : %%a
if exist "%$PATH%%%a" (
echo VERSION %%a is installed
set $LastVersion=%%a
)
)
Echo Last Version Installed : !$LastVersion!