我有两个文件。
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”。不工作。
谢谢。
答案 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"
。