批处理:从包含特殊字符的 .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"
以避免出现特殊字符的问题。
我有两个文件。
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"
以避免出现特殊字符的问题。