Batch file 如何在Windows批处理中转义特殊字符?
如何将字符串Batch file 如何在Windows批处理中转义特殊字符?,batch-file,Batch File,如何将字符串1234567890替换为!@$%^&*()在Windows批处理文件中 set temp_mm=1234567890 echo befor:%temp_mm% set temp_mm=%temp_mm:1=!% set temp_mm=%temp_mm:2=@% set temp_mm=%temp_mm:3=#% set temp_mm=%temp_mm:4=$% set temp_mm=%temp_mm:5=^%% set temp_mm=%temp_mm:6=^^% set
1234567890
替换为!@$%^&*()
在Windows批处理文件中
set temp_mm=1234567890
echo befor:%temp_mm%
set temp_mm=%temp_mm:1=!%
set temp_mm=%temp_mm:2=@%
set temp_mm=%temp_mm:3=#%
set temp_mm=%temp_mm:4=$%
set temp_mm=%temp_mm:5=^%%
set temp_mm=%temp_mm:6=^^%
set temp_mm=%temp_mm:7=^&%
set temp_mm=%temp_mm:8=^*%
set temp_mm=%temp_mm:9=^(%
set temp_mm=%temp_mm:0=^)%
echo after:%temp_mm%
@ECHO关闭
SETLOCAL
设置温度=123456789001234567890
之前的回音:%temp\u mm%
设置“temp\u mm=%temp\u mm:1=!%”
设置“temp\u mm=%temp\u mm:2=@%”
设置“temp_mm=%temp_mm:3=#%
设置“temp\u mm=%temp\u mm:4=$%”
设置“temp\u mm=%temp\u mm:6=^%
设置“temp\u mm=%temp\u mm:7=&%”
设置“temp\u mm=%temp\u mm:8=*%”
设置“temp\u mm=%temp\u mm:9=(%)
设置“temp\u mm=%temp\u mm:0=)%”
SETLOCAL enabledelayedexpansion
对于%%a IN(%),请设置“temp\u mm=!temp\u mm:5=%a!”
ENDLOCAL&设置“temp\U mm=%temp\U mm%”
在“%temp\u mm%”之后回显
设定温度_
后藤:EOF
您的帖子中似乎有非ANSI字符
就个人而言,我会使用sed
,因为实际使用这样转换的变量可能会有问题
替换构造以指定字符串为目标,并将其替换为第二个字符串。这对于大多数字符来说都是好的,但对于某些特殊字符(如%
)来说则是失败的,因为语法没有区分%
是替换字符(即使被正常的%
转义)还是替换字符串的结尾。“temp_mm=%temp_mm:a=%%”和“temp_mm=%temp_mm:a=%%”的语法不明确-是替换为“%”还是替换为
转义“%”
或替换为*nothing*,然后添加“%”、“转义-%”或“%%”
通过使用setlocal/endlocal
括号,您可以使用两阶段替换,第一阶段将替换字符串设置为%%
,因为这是%%a
的内容,但是初始解析已经完成,因此%%
不再是特殊字符。第二个解析阶段使用%
作为替换
然后,您只需将修改后的变量返回到原始上下文。为什么不检查?我已经尝试过了,它不起作用。请简要解释一下代码为什么起作用?