Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何在Windows批处理中转义特殊字符?_Batch File - Fatal编程技术网

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
的内容,但是初始解析已经完成,因此
%%
不再是特殊字符。第二个解析阶段使用
%
作为替换


然后,您只需将修改后的变量返回到原始上下文。

为什么不检查?我已经尝试过了,它不起作用。请简要解释一下代码为什么起作用?