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

时间:2018-12-11 13:59:05

标签: batch-file properties delayedvariableexpansion

我有两个文件。

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 = ^^ %% B”。不工作。

谢谢。

2 个答案:

答案 0 :(得分:3)

不好意思。我忍不住要发布这个答案的诱惑...

假设您有一个数字变量,可能具有值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周围的引号用于保护其他特殊字符,例如&>

答案 1 :(得分:1)

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

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

为了避免特殊字符带来的麻烦,我建议使用引用的set语法set "user=%%B"