[英]Windows Batch - Update the variable in the IF loop
我試圖弄清楚用戶計算機上安裝了什么版本的軟件。 版本是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
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
使用環境(值設置或值未設置)的電流值。
也許更簡單一些:
創建包含所有版本的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!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.