我有一个文本文件,其中包含一些文本,我需要将该文本作为使用批处理脚本位于不同文件夹中的所有文件中的标题。
我们说Header.txt
是包含文字This is Heading
的文件,我希望此文字在文件夹C:\...\*.txt
的每个文本文件中作为标题。
例如Body.txt
是不同文件夹中的文件之一,文本为I am the body
。我希望Body.txt
中的文字为:
This is Heading I am the body
答案 0 :(得分: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
),然后它将temproary文件移动到原始文本文件上,因此它被替换。请注意,文件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
循环。