0

我有两个文件。

值.属性

user=username
password=Password1234!

我的批处理文件

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

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

谢谢你。

4

2 回答 2

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用于保护其他特殊字符,例如&or >

于 2018-12-11T14:34:32.100 回答
1

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

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

让我推荐使用带引号的set语法set "user=%%B"以避免特殊字符的麻烦。

于 2018-12-11T14:35:13.270 回答