簡體   English   中英

Windows Batch-更新IF循環中的變量

[英]Windows Batch - Update the variable in the IF loop

我試圖弄清楚用戶計算機上安裝了什么版本的軟件。 版本是5.0、4.0、3.0。 最新的版本是5.0

  • 我想檢查用戶是否按此順序安裝了這些版本中的任何一個。
  • 我編寫了如下腳本:我還在頂部添加了setlocal enabledelayexpansion
  • 我在這里(在stackoverlow上)了解到,我需要使用!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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM