【问题标题】:Read values from tokens in external file in batch script从批处理脚本中的外部文件中的标记读取值
【发布时间】:2021-08-02 13:16:21
【问题描述】:

我有以下文件,它定义了一个项目的版本号,我在很多地方都在使用它,比如 CMake 文件、python 脚本和其他配置。我唯一的难题是如何在 Windows 的批处理文件中读取它?语法似乎有点奇怪,我现在已经挣扎了几个小时,仍然无法弄清楚。

版本.txt:

VERSION_MAJOR 09
VERSION_MINOR 02
VERSION_PATCH 21
VERSION_SUFFIX rc

我想要做的是在我的 bat 脚本中使用上述变量的值,如下所示:

BatchScript.bat

VERSION_MAJOR = @VERSION_MARJO_FROM_FILE (e.g 09)
VERSION_MINOR = @VERSION_MARJO_FROM_FILE (e.g 02)

【问题讨论】:

  • SET 命令用于为变量赋值。带有/F 选项的FOR 命令用于读取文件。请向我们展示您尝试使用的代码的minimal reproducible example
  • BatchScript.bat 中使用命令行for /F "usebackq tokens=1*" %%I in ("Version.txt") do set "%%I=%%J",在该行之后定义环境变量VERSION_MAJOR,字符串值为09VERSION_MINOR,字符串值为02 和@ 987654334@ 字符串值为21VERSION_SUFFIX 字符串值为rc。在命令提示符窗口for /? 中运行以获取有关此命令的帮助。字符串比较可以通过if 使用运算符== 来完成。另请参阅Symbol equivalent to NEQ, LSS, GTR, etc. in Windows batch files
  • 当然也可以使用for /F "usebackq tokens=1*" %%I in ("Version.txt") do set "%%I_FROM_FILE=%%J"来定义四个以_FROM_FILE结尾的环境变量。但更好的是使用for /F "usebackq tokens=1*" %%I in ("Version.txt") do set "FILE_%%I=%%J" 来定义四个环境变量,并在它们的名称开头使用FILE_。你知道为什么如果你添加到批处理文件作为下一行set FILE_ 输出所有名称以FILE_ 开头的环境变量及其当前值会更好。

标签: windows batch-file cmd tokenize


【解决方案1】:

我找到了方法。

for /f "tokens=1* delims= " %%i in (version.txt) do (
  if %%i==VERSION_MAJOR call set version_major%%=%%j
  if %%i==VERSION_MINOR call set version_minor%%=%%j
  if %%i==VERSION_PATCH call set version_patch%%
  if %%i==VERSION_SUFFIX call set version_suffix%%
)

【讨论】:

  • 正如 Mofi 在上面的代码 cmets 中向您展示的那样,您不需要使用 IF 命令来执行您需要执行的操作。你也不需要CALL 命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
相关资源
最近更新 更多