Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops win cmd:批量字符串替换删除“删除”&引用;_Loops_Batch File_For Loop_Cmd_Str Replace - Fatal编程技术网

Loops win 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

我编写了一个脚本,在没有任何更深入的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 ^& break ^> %%f ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>%%f echo(!line:%search%=%replace%!)
        endlocal


  )
)
pause
之后:

% TEX root = TechRep.tex

我可以请你帮忙吗?谢谢

有两个问题:

  • 跳过空白行。这是由/f命令中的
    限制引起的。你可以用旧的来解决这个问题

  • 删除感叹号。这是由
    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