【问题标题】:.bat batch file how to get environment variable from string?.bat 批处理文件如何从字符串中获取环境变量?
【发布时间】:2021-02-17 15:53:01
【问题描述】:

我将一个变量的名称保存为一个字符串(它将从一个 CONFIG 文件中读取)。我想评估这个环境变量,例如将它的值打印到控制台。我不确定如何执行此操作。

我当前的脚本:

@echo off

set env_var=VIVADO_BAT_PATH_2018_3

set str=set vivado_bat_path=%env_var%
%str%
echo "bat path:  %vivado_bat_path%"

set str=set vivado_bat_path=%%env_var%%
%str%
echo "bat path:  %vivado_bat_path%"

它的当前输出:

"bat path:  VIVADO_BAT_PATH_2018_3"
"bat path:  %env_var%"

期望的输出:

"bat path:  C:/Xilinx/Vivado/2018.3/bin/vivado.bat" (or whatever value the env var is set to)

我知道我可以使用echo %VIVADO_BAT_PATH_2018_3% 获得所需的输出,但我将VIVADO_BAT_PATH_2018_3 作为变量读取,那么我将如何执行此操作?

【问题讨论】:

  • 如果你想要当前执行的bat文件的路径可以使用%~f0
  • call echo %%%env_var%%%?

标签: batch-file environment-variables


【解决方案1】:

要获取变量的值,“通常”的方式是使用delayed expansion
但是您也可以强制进行第二次解析(“扩展扩展变量”)。 您可以使用call 命令(在第二个单独进程中执行以下命令)来执行此操作。要将文字% 传递给第二个进程,请使用另一个% 对其进行转义,这解释了奇怪的三重%

@echo off
setlocal enabledelayedexpansion

set "string=varname"
set "varname=some text"

echo with delayed expansion:    %string% = !%string%!
call echo without delayed expansion: %string% = %%%string%%%

【讨论】:

    【解决方案2】:
    @ECHO OFF
    SETLOCAL
    set "VIVADO_BAT_PATH_2018_3=I Want This String"
    set env_var=VIVADO_BAT_PATH_2018_3
    
    set str=set vivado_bat_path=%env_var%
    %str%
    echo "bat path:  %vivado_bat_path%"
    
    set str=set vivado_bat_path=%%env_var%%
    %str%
    echo "bat path:  %vivado_bat_path%"
    
    set "bingo=Not Found"
    for /f "tokens=1*delims==" %%a in ('set %env_var% 2^>nul') do if /i "%%a"=="%env_var%" set "bingo=%%b"
    echo I found "%bingo%"
    
    GOTO :EOF
    

    除了您的代码之外,这应该会扩展您的变量。

    我强制使用 VIVADO_BAT_PATH_2018_3 的值,因为它在我的系统上不存在。

    if /i 确保如果存在名为 VIVADO_BAT_PATH_2018_3_old 的环境变量,则只报告准确命名为 VIVADO_BAT_PATH_2018_3 的变量。

    如果VIVADO_BAT_PATH_2018_3 不存在,2^>nul 会抑制错误消息。 ^ 转义 >,告诉批处理 >set 命令的一部分,而不是 for 命令的一部分。 bingo 设置在for 之前,以确保bingo 的任何现有值都不会被误认为是所需值,而bingo 应该在批处理运行时已经设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多