批处理:从.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"。不起作用。

谢谢。

对不起。我忍不住想发布这个答案。。。

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

问题是在启用延迟扩展的情况下扩展引用%%Afor变量,这会消耗感叹号。

因此,只需禁用延迟扩展,代码就能正常工作。

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

最新更新