批处理:从包含特殊字符的 .properties 文件中读取值

Batch: Reading values from .properties file that contain special characters

我有两个文件。

values.properties

user=username
password=Password1234!

mybatch.bat

SETLOCAL EnableDelayedExpansion
For /F "tokens=1,2 delims==" %%A IN (path/values.properties) DO (
    IF "%%A"=="user" set user=%%B
    IF "%%A"=="password" set password=%%B
    )

在批处理文件中,密码值为:

Password1234

所以基本上,“!”消失。我想让 "password" 存储任何值,无论包含什么特殊字符。我怎样才能做到这一点?我试图逃避“!”添加 "password=^^%%B"。不工作。

谢谢。

对不起。我无法抗拒 post 这个答案的诱惑...

假设您有一个数值变量,其值可能为 10、25 和 50,并且您想将其添加到总变量中。你可以这样做:

if %num% equ 10 set /A total+=10
if %num% equ 25 set /A total+=25
if %num% equ 50 set /A total+=50

...或者您可以这样做:

set /A total+=num

你更喜欢哪一个?


您的代码的问题是您启用延迟扩展此刻分配已完成。只需删除它,如果需要,稍后再启用它:

SETLOCAL
For /F "delims=" %%A IN (path/values.properties) DO set "%%A"

SETLOCAL EnableDelayedExpansion
echo Password=!password!

此答案的第一部分解释了代码中的其他更改。 %%A 周围的引号用于保护其他特殊字符,如 &>.

问题是您在启用 delayed expansion 的同时扩展了 for 变量引用 %%A,这消耗了感叹号。

因此,只需禁用延迟扩展,您的代码就可以工作了。

我建议使用引用的 set 语法 set "user=%%B" 以避免出现特殊字符的问题。