Batch file 在两个文件之间交换信息的批处理文件

Batch file 在两个文件之间交换信息的批处理文件,batch-file,Batch File,我需要一个批处理文件的帮助来完成(我想很简单)从两个“标记”之间的主文件中读取信息并用该主文件中的信息覆盖其他文件中的当前信息的任务 以下是我的情况作为一个简单的例子: 我有一个名为“template.htmltplt”的文件,如果您愿意,它是我的主文件。然后我有一堆其他的“.html”文件 我希望批处理文件: 浏览所有的html文件 删除和 将template.htmltplt中和标记之间的内容复制到其他html文件中的正确位置 这可能吗?如果可能,怎么可能 我没有蝙蝠脚本的知识,所以很好的注

我需要一个批处理文件的帮助来完成(我想很简单)从两个“标记”之间的主文件中读取信息并用该主文件中的信息覆盖其他文件中的当前信息的任务

以下是我的情况作为一个简单的例子: 我有一个名为“template.htmltplt”的文件,如果您愿意,它是我的主文件。然后我有一堆其他的“.html”文件

我希望批处理文件:

  • 浏览所有的html文件
  • 删除
  • 将template.htmltplt中
    标记之间的内容复制到其他html文件中的正确位置 这可能吗?如果可能,怎么可能

    我没有蝙蝠脚本的知识,所以很好的注释代码将是可怕的

    提前感谢那些愿意帮助的人

    问候,,
    Reinhardt

    批处理文件不能这样做。使用visual basic或pearl实现类似的功能。批处理文件可以做的最接近于这样的事情是将一个文件的输出用作另一个文件的输入,但这是特定的等待可以得到的。 Lottopix.has>prevwinum.cgi

    @ECHO Off
    SETLOCAL
    设置“sourcedir=U:\sourcedir”
    设置“destdir=U:\destdir”
    设置“startstring=”
    设置“endstring=”
    ::制作一个临时文件
    :maketemp
    设置“tempfile=%temp%\%random%”
    如果存在“%tempfile%*”(转到maketemp)ELSE(ECHO.>%tempfile%a)
    (
    设置“块=”
    对于/f“tokens=1*delims=:”%%a IN('findstr/n/r“^”q23715314.txt)DO(
    如果“%%b”==%endstring%”设置“块=”
    如果已定义块回显(%%b
    如果“%%b”==%startstring%”设置块=Y
    )
    )>%tempfile%r
    对于/f“delims=“%%t IN('dir/b/a-d%sourcedir%\*.html'),请执行以下操作:(
    设置“块=”
    对于/f“tokens=1*delims=:”%%a IN('findstr/n/r“^”“%sourcedir%\%%t“)DO(
    如果“%%b”==%endstring%”设置“块=”
    如果未定义块回显(%%b
    如果“%%b”==%startstring%”设置块=Y并键入“%tempfile%r”
    )
    )>%destdir%\%%~nt.html
    删除“%tempfile%*”
    后藤:EOF
    
    不难

    我使用了一个名为
    q23715314.txt
    的文件来进行测试,该文件包含以下数据:

    drop <this> line
    <!--Stuff-Start-->
    Insert this
    and this
    
        and even <this> line after an empty line
    <!--Stuff-End-->
    omit this
    leave this out
    
    drop行
    插入这个
    还有这个
    甚至一行接一行的空行
    省略这个
    别提这个
    
    和test.html文件:

    leave <this> line
    
    empty line retained
    <!--Stuff-Start-->
    Replace this
    replace this too
        and substitute for <this> line
    <!--Stuff-End-->
    keep this
    retain this too
    
    leave <this> line
    
    empty line retained
    <!--Stuff-Start-->
    Insert this
    and this
    
        and even <this> line after an empty line
    <!--Stuff-End-->
    keep this
    retain this too
    
    左行
    保留空行
    替换这个
    把这个也换掉
    并代替直线
    留着这个
    也保留这个
    
    生成的新.html文件:

    leave <this> line
    
    empty line retained
    <!--Stuff-Start-->
    Replace this
    replace this too
        and substitute for <this> line
    <!--Stuff-End-->
    keep this
    retain this too
    
    leave <this> line
    
    empty line retained
    <!--Stuff-Start-->
    Insert this
    and this
    
        and even <this> line after an empty line
    <!--Stuff-End-->
    keep this
    retain this too
    
    左行
    保留空行
    插入这个
    还有这个
    甚至一行接一行的空行
    留着这个
    也保留这个
    
    当然,您需要设置自己的文件名和目录名,我强烈建议不要尝试对源和目标使用相同的目录。这根本不起作用。任何以一个或多个冒号开头的
    .html
    源代码行都会去掉这些冒号,而不是太多的
    .html
    行科隆,但需要说的是

    它是如何工作的——一块一块

    第一部分似乎很明显,所涉及的目录和目标字符串都已定义

    接下来是一个create-a-tempfile例程。只需生成一个随机文件名,然后查看目录
    %temp%
    中是否存在匹配的文件名。我个人将
    temp
    设置为
    c:\temp
    ,但代码设计为使用默认值。因此,如果随机数生成器选择18749,则代码看起来是f或者临时目录中的任何文件
    18749…
    。如果存在这样的文件,则选择另一个随机数。如果它没有在临时目录中创建名为
    18749a
    的文件。这只是一个占位符

    下一步是将所需的行提取到临时文件中。
    (代码块)>filename
    语法将任何数据
    回送到
    filename
    中的新文件,该文件应包含临时目录中有效文件的完整文件名;例如
    c:\temp\18749r

    块中的代码首先将
    设置为空,然后逐行读取文件
    q23715314.txt
    ,通过在每行前面加上
    number:
    对其进行编号。这确保了空行被处理为
    13:
    ,否则将被跳过。
    q23715314.txt
    不重要-它可能是一个错误包含所需模板数据的任何文件。我只需使用
    qSOquestionnumber.extension
    ,就可以将数据保存在与我编写的批处理文件相关的文件中(称为
    qSOquestionnumber.bat
    )-因此,在出现问题时,使用
    file1
    file2
    的许多问题都可以很容易地单独检索。如果您想拥有固定的文件名,临时文件可以是您喜欢的任何有效文件名。但是,请注意,包含空格和一些其他符号的文件名需要
    “引号”

    由于for按原样处理每一行
    number:linefromfile
    ,因此使用
    tokens=1*delims=:
    将数字分配给
    %%a
    linefromfile
    分配给
    %%b

    块处理只是将从文件读取的行与定义的开始/结束字符串相匹配。
    block
    最初是
    “设置”
    为空的,因此它是未定义的。当
    startstring
    匹配时,
    block
    被分配一个值。我使用了
    Y
    ,但任何值都可以

    for
    从文件中读取下一个字符串时,它发现
    现在已定义,因此它
    es%%b回显到文件
    c:\temp\18749r
    。这将持续到
    已设置时找到
    结束字符串
    再次清空;因此它是未定义的,并且不再有
    echo
    ing到
    c:\temp\18749r

    第二个块的内部for类似,但相反。它从外部循环中选择的文件复制每一行,直到