我有一个很长的test.properties文件,其中包含以下内容:
property1=cheese
property2=apple
property3=bread
# many more properties
我可以通过将工作目录更改为包含test.properties的工作目录并运行以下命令,从命令行中读取这些属性:
> FOR /F "tokens=1,2 delims==" %A IN (test.properties) DO
IF "%A"=="property1" SET firstitem=%B
> FOR /F "tokens=1,2 delims==" %A IN (test.properties) DO
IF "%A"=="property2" SET seconditem=%B
> echo %firstitem%
cheese
> echo %seconditem%
apple
但是,当我尝试将此代码放在存储在同一目录中的批处理文件中时,它会失败,我无法解决原因:
FOR /F "tokens=1,2 delims==" %A IN ("%~dp0\test.properties") DO
(IF "%A"=="property1" SET firstitem=%B)
FOR /F "tokens=1,2 delims==" %A IN ("%~dp0\test.properties") DO
(IF "%A"=="property2" SET seconditem=%B)
从命令行运行批处理文件给我这个:
> "C:\folder\testbatch.bat"
~dp0\test.properties") DO IF "B was unexpected at this time.
如何使用批处理文件读取属性,以便将它们存储在可以在脚本其余部分中使用的变量中?
编辑:问题解决了;下面的工作代码。FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%~dp0\test.properties") DO
(IF "%%A"=="property1" SET firstitem=%%B)
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%~dp0\test.properties") DO
(IF "%%A"=="property2" SET seconditem=%%B)
答案 0 :(得分:1)
这里有两个问题:
usebackq
修饰符来获得更通用的解决方案。但是,由于您正在谈论存储在同一目录中的批处理文件",您可以完全删除路径前缀%~dp0
。更正版本:
@ECHO OFF
FOR /F "tokens=1,2 delims==" %%A IN (test.properties) DO (
IF "%%A"=="property1" SET firstitem=%%B
)
FOR /F "tokens=1,2 delims==" %%A IN (test.properties) DO (
IF "%%A"=="property2" SET seconditem=%%B
)
ECHO %firstitem%
ECHO %seconditem%
返回:
cheese
apple
答案 1 :(得分:1)
"如何使用批处理文件读取属性,以便这样做 它们存储在可以在其余部分中使用的变量中 ?脚本"
如果您愿意使用文件中的字符串,那么这在您的案例中非常简单:
FOR /F "usebackq tokens=*" %%A IN ("%~dp0\test.properties") DO set %%A
echo property2 is %property2%
注意:如果您的路径或文件名包含空格,则需要引号。告诉for
不要将其视为包含usebackq