Loops win cmd:批量字符串替换删除“删除”&引用;
我编写了一个脚本,在没有任何更深入的cmd知识的情况下,在目录中的指定文件中搜索特定字符串,并用另一个字符串替换它。(至少应该) 就像Loops win cmd:批量字符串替换删除“删除”&引用;,loops,batch-file,for-loop,cmd,str-replace,Loops,Batch File,For Loop,Cmd,Str Replace,我编写了一个脚本,在没有任何更深入的cmd知识的情况下,在目录中的指定文件中搜索特定字符串,并用另一个字符串替换它。(至少应该) 就像 set "search=readed" set "replace=read" set "myfiles=.\*.tex" for %%f in (%myfiles%) do ( set /p val=<%%f echo "fullname: %%f" for /f "delims=" %%i in ('type %%f ^&a
set "search=readed"
set "replace=read"
set "myfiles=.\*.tex"
for %%f in (%myfiles%) do (
set /p val=<%%f
echo "fullname: %%f"
for /f "delims=" %%i in ('type %%f ^& break ^> %%f ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>%%f echo(!line:%search%=%replace%!)
endlocal
)
)
pause
之后:
% TEX root = TechRep.tex
我可以请你帮忙吗?谢谢 有两个问题:
限制引起的。你可以用旧的来解决这个问题
echo
命令中错误的右括号)
引起的。echo中的左括号(
在同一行被忽略,并且与右括号不匹配。相反,右括号与do
循环的开头匹配。下一行包含endlocal
命令,位于循环外部。这似乎会导致问题,因为循环内部有一个setlocal,外部有一个endlocal;b由于某种奇怪的机制,这不知何故导致感叹号被删除。从回显线路中删除)
,此问题就会消失删除
echo
命令末尾的右括号。尽管它看起来很像,但它与同一行中的左括号不匹配!相反,它与do
关键字后面的左括号匹配。这似乎很好。谢谢!如果您正在编辑一个纯批处理的文件,这会让您兴奋不已(对于挑战),然后击倒自己。但是如果你只是想完成一项任务,那么我强烈建议你做其他事情。纯批处理对于文本文件编辑来说很糟糕,因为它速度慢,而且健壮的解决方案需要晦涩、非直观的语法和技术。我建议:对于%%F in(*.tex)请调用jrepl“readed”“read”/F“%%F”/o-
嗨!它没有给我带来任何特别的快乐。我只需要这些东西来工作,不管机器和它的配置如何。用我几乎知道的东西。不,你不能改变echo(
到回显
,因为脚本随后将写入回显处于关闭状态。
如果遇到一行只包含空格,则会删除第2行及以后的感叹号,因为启用了延迟展开,%%I
将用感叹号展开表达式(延迟展开发生在变量展开之后)。我可能会在删除空格后幸存下来。括号结尾已清除。@dbenham很好。我已从我的答案中删除了错误的陈述。
% TEX root = TechRep.tex