用于解析 build.properties 文件的 bat 脚本

用于解析 build.properties 文件的 bat 脚本

我有一个如下所示的 build.properties 文件:

ELECTRON_WIN_VERSION_NUMBER=1.7.0
ELECTRON_WIN_BUILD_NUMBER=11
ELECTRON_MAC_VERSION_NUMBER=1.7.0
ELECTRON_MAC_BUILD_NUMBER=11

我有一个如下所示的 runme.bat 脚本:

For /F "tokens=1* delims==" %%A IN ("build.properties") DO (
    IF "%%A"=="ELECTRON_WIN_VERSION_NUMBER" set ELECTRON_WIN_VERSION_NUMBER=%%B
    IF "%%A"=="ELECTRON_WIN_BUILD_NUMBER" set ELECTRON_WIN_BUILD_NUMBER=%%B
)

echo "%ELECTRON_WIN_VERSION_NUMBER%"
echo "%ELECTRON_WIN_BUILD_NUMBER%"

运行时它会输出以下内容:

""
""

我做错了什么,它没有输出:

"1.7.0"
"11"

答案1

我究竟做错了什么?

您的for命令正在解析字符串"build.properties"而不是文件的内容build.properties

删除引号。

更正的批处理文件(test.cmd):

@echo off
For /F "tokens=1* delims==" %%A IN (build.properties) DO (
    IF "%%A"=="ELECTRON_WIN_VERSION_NUMBER" set ELECTRON_WIN_VERSION_NUMBER=%%B
    IF "%%A"=="ELECTRON_WIN_BUILD_NUMBER" set ELECTRON_WIN_BUILD_NUMBER=%%B
)

echo "%ELECTRON_WIN_VERSION_NUMBER%"
echo "%ELECTRON_WIN_BUILD_NUMBER%"

输出:

> test
"1.7.0"
"11"
>

文件名中有空格怎么办?

在这种情况下,您可以使用type返回要解析的文件内容for

For /F "tokens=1* delims==" %%A IN ('type "build space.properties"') DO (

笔记:

  • 单引号'用于指示要处理命令。
  • 双引号"用于分隔包含空格的文件名。

您还可以使用以下for选项usebackq

usebackq     Use the alternate quoting style:                        
                   - Use double quotes for long file names in "filenameset".
                   - Use single quotes for 'Text string to process'
                   - Use back quotes for `command_to_process`

那么for命令就变成:

For /F "usebackq tokens=1* delims==" %%A IN ("build space.properties") DO (

进一步阅读

相关内容