2016-11-11 137 views
0

我有一个文本文件,里面有一些文本,我需要这个文本作为标题在所有文件中使用批处理脚本在不同的文件夹中。如何将文件作为标题添加到文件夹中的多个文件中?

让我们假设Header.txt是带有文本This is Heading的文件,我希望将此文本作为文件夹C:\...\*.txt的每个文本文件中的标题。

例如Body.txt是文本为I am the body的不同文件夹中的文件之一。我想在Body.txt的文本设置为:

This is Heading 
I am the body 

回答

1

试试这个(适应的文件名和路径相应):

for %%F in ("C:\...\*.txt") do (
    > "%%~F.tmp" type "Header.txt" 
    >> "%%~F.tmp" type "%%~F" 
    move /Y "%%~F.tmp" "%%~F" 
) 

这结合了Header.txt和处理的内容在临时文件(例如,文本文件是Body.txt,所以临时文件是Body.txt.tmp)中的文本文件,然后它将临时文件移动到原始文本f ile,因此它被替换。请注意,文件Header.txt中的标题必须以分行符终止;否则,文本文件的标题和第一行就会合并成一行文本。


为了检查文件是否已经被插入的头,你可以首次行重定向到一个变量,并将它们与头文件的第一行比较,这样的:

< "Header.txt" set /P HEAD="" 
for %%F in ("C:\...\*.txt") do (
    < "%%~F" set /P LINE="" 
    setlocal EnableDelayedExpansion 
    if not "!LINE!"=="!HEAD!" (
     endlocal 
     > "%%~F.tmp" type "Header.txt" 
     >> "%%~F.tmp" type "%%~F" 
     move /Y "%%~F.tmp" "%%~F" 
    ) else endlocal 
) 

每个单独的文件在这里单独检查。为此,您需要delayed expansion,因为您正在写入和读取代码块中的相同变量,即for循环。

+0

非常感谢...其工作... :) 我需要一个额外的功能。请帮助我.. 一旦批处理文件运行并且任务已成功完成,再次如果用户尝试运行相同的批处理文件,它应该限制用户添加文本(我的意思是头文件)到文件和应该通过像“头文件已包含在文件中的错误信息,不要运行批处理文件”。 .....在此先感谢..... –

+0

我还需要添加页脚末尾的行。页脚内容将在单独的文件中。 –

+0

执行'move'命令后,插入行>> >>“%%〜F”键入“Footer.txt”...... – aschipfl

相关问题