我有一个如下所示的 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 (
进一步阅读
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 对于/f- 循环命令以执行另一个命令的结果。
- 对于/f- 循环命令:针对一组文件 - 有条件地对每个项目执行命令。
- 类型- 显示一个或多个文本文件的内容。