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