Batch file 如何使用SET命令将%字符替换为其他字符

Batch file 如何使用SET命令将%字符替换为其他字符,batch-file,cmd,Batch File,Cmd,所以我知道如何用SET命令替换简单的字符串 例如: set /p a= set a=%a:<=^<% echo %a% set/p a= 设置a=%a:@ECHO关闭 SETLOCAL 设置“某物=%%he%%llo%%” 回显%something% 回音============ SETLOCAL ENABLEDELAYEDEXPANSION 设置“anotherthing=!something:%%=x!” endlocal&设置“另一个=%anotherthing%” 回显%s

所以我知道如何用SET命令替换简单的字符串

例如:

set /p a=
set a=%a:<=^<%
echo %a%
set/p a=
设置a=%a:
@ECHO关闭
SETLOCAL
设置“某物=%%he%%llo%%”
回显%something%
回音============
SETLOCAL ENABLEDELAYEDEXPANSION
设置“anotherthing=!something:%%=x!”
endlocal&设置“另一个=%anotherthing%”
回显%something%
回显%anotherthing%
后藤:EOF

像这样,你的意思是?

除了使用双引号来防止有毒字符外,你的方法没有任何错误

现在的主要问题是试图查看内容,因为您将
Echo
ing有毒字符。为了查看它的实际位置,我包括了两种方法,一种是
Set
命令,列出以
a
开头的所有变量,(另一种是
findstr
,只隔离名为
a
的变量),另一种是使用延迟扩展,在读取/解析命令行时防止变量被扩展。在最底部,我提供了一种使用
Echo
命令显示它的方法,而不使用延迟扩展或双引号,正如您可以看到的那样,要转义插入符号,
^
,在这种情况下,您需要使用两个以上的插入符号

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
设置“a=”
设置/P“a=”
Set“a=%a:变量替换的完整(已知)规则可在以下位置找到:

简言之: 百分比替换表达式中的搜索表达式不能以百分比开头。
延迟替换表达式中的搜索表达式不能以感叹号开头

但是可以用延迟表达式替换百分号

setlocal EnableDelayedExpansion
set /p var=
set "var=!var:%%=REPLACE!"
echo(!var!

此处的百分号本身必须加倍,因为它在第2阶段(百分数扩展)中会塌陷为一个百分数。

这可能是一个,也许你可以在不替换任何内容的情况下解决真正的问题。你应该描述你的问题,而不是假设的解决方案。我编辑了我的问题,以便更正确地解释