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 批替换为特殊字符不起作用_Batch File_Cmd - Fatal编程技术网

Batch file 批替换为特殊字符不起作用

Batch file 批替换为特殊字符不起作用,batch-file,cmd,Batch File,Cmd,我正在尝试将双引号的简单批量替换为单引号。 teststring最多只能包含特殊字符:“” 我无法替换那里的双引号,因为批处理只存在于Syntaxerror中。你知道为什么,或者如何克服这个问题吗 SET TEST="<LF>","<HT>" SET modified=%TEST:"='% <-- Syntaxerror ECHO %modified% SET TEST=“”,“” SET modified=%TEST:“=”%%这对我有效 SET TEST="

我正在尝试将双引号的简单批量替换为单引号。 teststring最多只能包含特殊字符:
“”
我无法替换那里的双引号,因为批处理只存在于
Syntaxerror
中。你知道为什么,或者如何克服这个问题吗

SET TEST="<LF>","<HT>"
SET modified=%TEST:"='%  <-- Syntaxerror
ECHO %modified%
SET TEST=“”,“”
SET modified=%TEST:“=”%%这对我有效

SET TEST="LF","HT"
echo %TEST%
SET modified=%TEST:"='%
ECHO %modified%
问题在于您的
Echo

使用延迟扩展时被解释为输入/输出管道:

setlocal enabledelayedexpansion
SET TEST="<LF>","<HT>"
SET modified=!TEST:"='!  <-- Syntaxerror
ECHO !modified!

但是,
ECHO
仍然会有问题。

虽然延迟扩展是一件好事,但没有必要回答这个问题。有时setlocal不可用。我遇到了一个问题

在windows shell中,引号的字符串匹配适用于最外层的匹配对(在大多数情况下,但不是全部),而不是最内层的匹配对

SET TEST="<LF>","<HT>"
echo %TEST%
SET "modified=%TEST:"='%"
echo.|set /p "___=%modified%"
SET TEST=“”,“”
回显百分比测试%
SET“modified=%TEST:=”%
回显。|设置/p“_u=%modified%”

解决方法:如果echo无法打印某些内容,则可以设置。想想看。

你搞错我了。teststring是我要替换的固定(!)字符串。我无法更改teststring,因此无法删除<>字符。这很好,而且可能是最好的,因为我只需对现有文件进行微小的修改。我说得对吗?我必须始终使用
!修改改为
%modified%
使用此变量的位置?或者我可以将其“转换”回一个变量,该变量可以再次与
%
一起使用,这样我就不必更改其他代码了吗?是的,必须在启用延迟扩展时进行(即从该
setlocal
直到其匹配
endlocal
或执行结束)。否则,您只能获得
!修改而不是值。它仍然是一个正常变量。唯一改变的是当它扩展到其值时的语义。延迟扩展的工作原理与其他编程语言中变量的工作原理更为相似。如果你使用
%modified%
它会工作,但只要你在里面有
之类的东西,除非你正确引用,否则它会把事情搞砸。和
echo
不能被引用。我喜欢你的答案,但你也需要转义要替换的字符,以便正确打印字符串:
set modified=!测试:^&=^^^&。不过我在试着用安培符号逃跑
SET TEST="<LF>","<HT>"
echo %TEST%
SET "modified=%TEST:"='%"
echo.|set /p "___=%modified%"