Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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
Html 批处理文件,以跨多个文件夹从多个文件中删除特定字符串_Html_Windows_Batch File_Dos_Mhtml - Fatal编程技术网

Html 批处理文件,以跨多个文件夹从多个文件中删除特定字符串

Html 批处理文件,以跨多个文件夹从多个文件中删除特定字符串,html,windows,batch-file,dos,mhtml,Html,Windows,Batch File,Dos,Mhtml,我有一个包含许多子文件夹的文件夹,每个子文件夹包含几十个不同长度的.mht文件。我需要帮助创建一个批处理脚本以筛选出此特定字符串: "</BODY></HTML>" “” 在将文件添加回末尾之前,我可以将的行添加到文件中。这就是我到目前为止所做的: setlocal enabledelayedexpansion for /r %%a in (*.mht) do ( for /f "skip=11" %%b in (%%a) do (if %%b=="<

我有一个包含许多子文件夹的文件夹,每个子文件夹包含几十个不同长度的
.mht
文件。我需要帮助创建一个批处理脚本以筛选出此特定字符串:

"</BODY></HTML>"
“”
在将文件添加回末尾之前,我可以将的行添加到文件中。这就是我到目前为止所做的:

setlocal enabledelayedexpansion

for /r %%a in (*.mht) do (
    for /f "skip=11" %%b in (%%a) do (if %%b=="</BODY></HTML>" del %%b)
    echo "stuff to add">>%%a
    echo "</BODY></HTML>">>%%a
)
setlocal enabledelayedexpansion
对于(*.mht)do中的/r%%a(
对于(%%a)do中的/f“skip=11”%%b(如果%%b==”del%%b)
回显“要添加的内容”>%%a
回显'>>%%a
)
有没有办法修复我当前的脚本,或者你们中的任何人知道更简单的方法

注意:我尝试将除不需要的字符串以外的所有内容复制到临时文件中,但前11行包含特殊字符,例如:
|,:

更新 我添加了一个新的脚本,它将在行中用所需的代码替换搜索词。脚本可以处理特殊字符


局限性
  • 前导右括号
    ]
    字符将从行首开始修剪。这不是问题,因为HTML中不应该有以该字符开头的行(如果需要,可以修复)
  • 百分比符号
    %
    字符不能用于搜索词或替换词
  • 笔记
  • 行不能包含奇数个双引号
    ,因此我将双引号
    加倍以确保为偶数。这意味着,如果在任一字符串中有引号,它们也必须加倍
  • 要使用脚本,只需将搜索项替换项替换为下一行代码中所需的内容即可

    设置“\u=%\ u:
    搜索术语
    =
    替换术语
    %”

  • 新Script.bat
    起初的 这应该是你想要的。不需要延迟扩展。应该支持所有特殊字符

    局限性
  • 前导右括号
    ]
    字符将被修剪。这不是问题,因为HTML中不应该有以右括号字符开头的行。(如果需要,这可以修复)。
  • 百分比符号
    %
    字符不能用于搜索词或替换词
  • 笔记
  • 行不能包含奇数个双引号
    ,因此我将双引号加倍
    ,以确保为偶数。这意味着,如果字符串中有要匹配的引号,那么它们也必须加倍(不适用于您的场景)
  • 延迟扩展不能用于此行中('echo”%xLine%%“^ | find/i“')中的/f%%S(
  • 否则
    感叹号将导致问题 Script.bat
    @echo关闭
    setLocalEnableExtensions
    对于(*.mht)中的/r%%F,如果存在请执行“%%~fF”(
    rem限制-将修剪任何前导的[右括号]字符。
    对于/f“tokens=1,*delims=]”中的%%K('type“%%~fF”^ | find/n/v”“)do(
    设置“xLine=“%%L”
    电话:比赛
    echo(%%L>>“%%~dpF\new_%%~nF%%~xF”
    )
    rem del“%%~fF”
    rem ren“%%~dpF\new_%%~nF%%~xF”“%%~nxF”
    )
    转到终点
    :匹配
    setlocal EnableExtensions DisableDelayedExpansion
    rem将双引号加倍,以确保双引号的数量为偶数。
    设置“xLine=%xLine:=”%
    对于('echo“%xLine%”中的/f%%S^ | find/i“”)执行以下操作(
    rem在此处添加要注入的代码。复制下面的模板回显。
    rem注意特殊字符需要转义。
    echo注入代码>>“%%~dpF\new_%%~nF%%~xF”
    )
    端部
    后藤:eof
    :结束
    端部
    暂停>nul
    
    这将把新文件输出到
    new.mht
    如果要用新文件替换旧文件,只需从
    del
    ren
    命令之前删除
    rem
    命令。

    更新 我已经添加了一个新的脚本,它将用所需的代码替换搜索词。该脚本可以处理特殊字符


    局限性
  • 前导右括号
    ]
    字符将从行首开始修剪。这不是问题,因为HTML中不应该有以该字符开头的行。(如果需要,可以修复)
  • 百分比符号
    %
    字符不能用于搜索词或替换词
  • 笔记
  • 行不能包含奇数个双引号
    ,因此我将双引号
    加倍以确保为偶数。这意味着,如果在任一字符串中有引号,它们也必须加倍
  • 要使用脚本,只需将搜索项替换项替换为下一行代码中所需的内容即可

    设置“\u=%\ u:
    搜索术语
    =
    替换术语
    %”

  • 新Script.bat
    起初的 这应该是你想要的。不需要延迟扩展。应该支持所有特殊字符

    局限性
  • 前导右括号
    ]
    字符将被修剪。这不是问题,因为HTML中不应该有以右括号字符开头的行。(如果需要,这可以修复)。
  • 百分比符号
    %
    字符不能用于搜索词或替换词
  • 笔记
  • 行不能包含奇数个双引号
    ,因此我将双引号
    加倍以确保为偶数。这意味着如果您在行中有引号
    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    
    :: Limitations
    :: 1. Any leading close bracket ] characters will be trimmed due to delims=].
    
    for /r %%F in (html.txt) do if exist "%%~fF" (
        for /f "tokens=1,* delims=]" %%K in ('type "%%~fF" ^| find /n /v ""') do (
            set "_=%%L"
            call :Expand_
        )
    )
    goto End
    
    
    :Expand_
    :: NULL is a blank line or line with only a close bracket ].
    if not defined _ echo. & goto :eof
    :: Ensure even number of double quotation marks.
    set "_=%_:"=""%"
    :: Inject the code.
    set "_=%_:</body>=<code>To Inject</code></body>%"
    :: Escape batch special characters.
    set "_=%_:^=^^%"
    set "_=%_:<=^<%"
    set "_=%_:>=^>%"
    set "_=%_:&=^&%"
    set "_=%_:|=^|%"
    :: Revert quotations.
    set "_=%_:""="%"
    :: Display
    echo(%_%
    goto :eof
    
    
    :End
    endlocal
    pause >nul
    
    @echo off
    setlocal EnableExtensions
    
    for /r %%F in (*.mht) do if exist "%%~fF" (
        rem Limitation - Any leading close bracket ] characters will be trimmed.
        for /f "tokens=1,* delims=]" %%K in ('type "%%~fF" ^| find /n /v ""') do (
            set "xLine="%%L""
            call :Match
            echo(%%L>>"%%~dpF\new_%%~nF%%~xF"
        )
        rem del "%%~fF"
        rem ren "%%~dpF\new_%%~nF%%~xF" "%%~nxF"
    )
    goto End
    
    
    :Match
    setlocal EnableExtensions DisableDelayedExpansion
    rem Double the double quotations to ensure even number of double quotations.
    set "xLine=%xLine:"=""%"
    for /f %%S in ('echo "%xLine%"^| find /i "</body>"') do (
        rem Add your code to inject here.  Copy the template echo below.
        rem Note that special characters need to be escaped.
        echo Inject Code>>"%%~dpF\new_%%~nF%%~xF"
    )
    endlocal
    goto :eof
    
    
    :End
    endlocal
    pause >nul