转义批处理变量中的所有字符
escape all characters in batch variable
大家好,我有以下批处理变量 %~4
,它是用户的用户名。目前,我遇到了一个问题,因为我有一个使用用户名 Scott123 注册的用户!这 !未正确读取。我试过像这样 "%~4"
转义它,这对大多数字符都有效,但对 !特点。有没有人为此提出解决方案?
您可以尝试 set username="%~4:!=^^!"
将任何 !
替换为转义感叹号(也许您需要先将 %~4
分配给另一个变量)。
您可能需要考虑替换批处理文件中的特殊 < > % | = , : & CON LPT1
和其他 keywords/symbols,以防止 "batch file injection" ;)
如果我没记错的话,只有 !
需要双插入符号作为转义符号(它通常用于表示延迟扩展变量)。百分号也比较特殊,需要再转义一个百分号%%
。如果您还需要转义插入符号,我想事情会变得棘手。
ss64.com 可能会帮助您全面了解所有特殊情况:https://ss64.com/nt/syntax-esc.html
set
的帮助中描述了变量中的字符串替换。在命令行 window 上执行 set /?
以阅读它。或者也尝试 ss64,可能是更详尽的阅读 (https://ss64.com/nt/set.html)。
如果在批处理文件中没有任何效果或需要付出很多努力,您需要事先在其他地方转义这些字符。更好的是,完全禁止将它们作为用户名输入。那么转义的需求就解除了。
我让它工作的方法之一是注释掉 SETLOCAL ENABLEDELAYEDEXPANSION 并将“”放在变量周围。
大家好,我有以下批处理变量 %~4
,它是用户的用户名。目前,我遇到了一个问题,因为我有一个使用用户名 Scott123 注册的用户!这 !未正确读取。我试过像这样 "%~4"
转义它,这对大多数字符都有效,但对 !特点。有没有人为此提出解决方案?
您可以尝试 set username="%~4:!=^^!"
将任何 !
替换为转义感叹号(也许您需要先将 %~4
分配给另一个变量)。
您可能需要考虑替换批处理文件中的特殊 < > % | = , : & CON LPT1
和其他 keywords/symbols,以防止 "batch file injection" ;)
如果我没记错的话,只有 !
需要双插入符号作为转义符号(它通常用于表示延迟扩展变量)。百分号也比较特殊,需要再转义一个百分号%%
。如果您还需要转义插入符号,我想事情会变得棘手。
ss64.com 可能会帮助您全面了解所有特殊情况:https://ss64.com/nt/syntax-esc.html
set
的帮助中描述了变量中的字符串替换。在命令行 window 上执行 set /?
以阅读它。或者也尝试 ss64,可能是更详尽的阅读 (https://ss64.com/nt/set.html)。
如果在批处理文件中没有任何效果或需要付出很多努力,您需要事先在其他地方转义这些字符。更好的是,完全禁止将它们作为用户名输入。那么转义的需求就解除了。
我让它工作的方法之一是注释掉 SETLOCAL ENABLEDELAYEDEXPANSION 并将“”放在变量周围。