我需要一个批处理文件,它会在数百个.txt文件内容开头的新行中添加“写入”文本,而不删除任何现有文本。我在这里发现了一些对我不起作用的东西。有人有建议吗?
这是我正在使用的代码:
for /r %%a in (*.txt) do (
echo ---- %%a before ----
type "%%a"
echo --------------------
echo Write In > "%%a.tmp"
type "%%a" >> "%%a.tmp"
del "%%a"
move "%%a.tmp" "%%a"
echo ---- %%a after ----
type "%%a"
echo --------------------
)
pause
它没有做任何事情
答案 0 :(得分:1)
我很可能会这样做:
rem // Create temporary header file:
> "head.txt" echo Write In
rem // Iterate all text files in current directory:
for %%F in ("*.txt") do (
rem /* Combine header and currently iterated text file into a temporary file;
rem there cannot arise any file name conflicts (like temporary files becoming
rem iterated also unintendedly, or temporary files overwriting files to handle),
rem because the extension of the temporary files differ from the text files: */
copy /B "head.txt"+"%%~F" "%%~F.tmp"
rem // Overwrite original text file by temporary file, erase the latter:
move /Y "%%~F.tmp" "%%~F"
)
rem // Erase the temporary header file:
del "head.txt"
答案 1 :(得分:0)
我找到了一种不太干净的方法,并且需要一段时间来处理更大的文件,但它对我来说很有用:
@echo off
for /r "%~dp0" %%f in (*.txt) do (
echo Processing file %%f
>"%%~f.2" (
echo "Text to append here"
type "%%~f"
)
del "%%~f"
ren "%%~f.2" "%%~nxf"
)
pause
以递归方式循环遍历batch-files目录中的所有.txt
文件
创建一个名为oldName.txt.2
的新文件,并将其与要添加的文本及其余旧文件内容一起归档。
删除旧文件并将新文件重命名为旧文件的名称
需要在文件结尾添加.2
以确保循环不再处理它。
当然,您可以通过乘以回波线来添加多条线
您也可以在type
行之后添加回显线,将文本添加到文件末尾。
答案 2 :(得分:0)
您可以简单地使用Linux Sed
命令将标头插入文件中。
sed -i '1s/^/This is my header\n/' filename
e.g. sed -i '1s/^/Write In\n/' myfile.txt
这可以应用于目录下的多个文件:
用于.txt文件
for file in *.txt
do
sed -i '1s/^/This is my header\n/' $file
done
对于CSV文件
for file in *.csv
do
sed -i '1s/^/This is my header\n/' $file
done