Batch file 带延迟扩展的转义感叹号
我有一个批处理文件,用于搜索一段文本并用另一段替换它。它是有效的,但是当创建“新”文件时,感叹号之后的任何内容都会被删除 那么原始文件呢Batch file 带延迟扩展的转义感叹号,batch-file,cmd,findstr,Batch File,Cmd,Findstr,我有一个批处理文件,用于搜索一段文本并用另一段替换它。它是有效的,但是当创建“新”文件时,感叹号之后的任何内容都会被删除 那么原始文件呢 Hello! I have some cheese 刚刚成为 Hello 尽管我试图替换的文本很好 我明白,由于我使用的是延迟扩展,我需要以某种方式用^^避开感叹号但无法确定在何处执行此操作。在回显中添加它只会回显^^字面意思 任何帮助都将不胜感激 set "rootname=Common Filename" set "replace="old">
Hello! I have some cheese
刚刚成为
Hello
尽管我试图替换的文本很好
我明白,由于我使用的是延迟扩展,我需要以某种方式用^^避开感叹号代码>但无法确定在何处执行此操作。在回显中添加它只会回显^^代码>字面意思
任何帮助都将不胜感激
set "rootname=Common Filename"
set "replace="old">"
set "replaced="new">"
set "source="%rootname%_unqiue_suffix.txt""
set "target=Fixed\%SOURCE%"
setlocal enableDelayedExpansion
(
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
set "line=%%b"
if defined line set "line=!line:%replace%=%replaced%!"
echo(!line!
)
) > %target%
endlocal
为避免感叹号丢失,请仅在确实需要时启用延迟扩展,并仅在禁用延迟扩展时扩展普通%
变量和元变量:
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
设置“rootname=公共文件名”
设置“replace=”old“>”
设置“已替换=“新建”>”
设置“source=%rootname%\u unqiue\u suffix.txt”
设置“目标=固定\%source%”
(
对于/F“tokens=1*delims=:”%%a in('findstr/N“^”“%source%”)do(
设置“行=%%b”
setlocal EnableDelayedExpansion
如果定义了行集“行=!行:%replace%=%replaced%!”
回声(!线!
端部
)
)>“%target%”
端部
如果变量replace
和replace
包含!
-符号,此代码仍然会导致问题,因为它们是百分比展开的。DOS中既没有启用延迟展开,也没有for/f
。抱歉。我不是编码员或程序员,所以有时会把事情弄糊涂。