我想合并一些文本文件,但要有标题(编辑:文件名)。理想情况下,类似
* a filename
contents of file
...
* another filename
contents of file
...
etc...
我在 Windows 上(不是 DOS),但可以访问 powershell、pandoc、emacs、cygwin 或您推荐的任何其他程序。(显然我是尝试 org-mode 的新手。)
我可以轻松地将它们全部放在一个文件夹中。但我想避免输入每个文件的名称。如果建议使用 bat 文件,我从未使用过,但愿意学习。
答案1
我确信还有更聪明的方法,但这里有一个将合并所有文件的 powershell 脚本:
$files = (dir *.txt)
$outfile = "out.txt"
$files | %{
$_.FullName | Add-Content $outfile
Get-Content $_.FullName | Add-Content $outfile
}
它有效率吗? 不是太好……但在紧急情况下还是有用的。
答案2
受到 Mitch 脚本结构的启发,我编写了一个针对基于 Unix 环境(例如 GNU/Linux 和 OS X)的版本:
find -regex '.*\.\(docx?\|org\|rtf\|te?xt\)$' | while read file
do
echo "* $file" >> target-file.org
cat "$file" | pandoc -t org >> target-file.org
done
(如果您不想安装pandoc
,只需删除管道和命令| pandoc -t org
。)
该脚本将查找当前目录及其子目录中所有具有所述文件扩展名的文件(.docx
,等等)。
例如,如果列表包含fileA.text
并且fileB.rtf
位于子目录中subd/
,targetfile.org
将收到如下行:
* ./subd/fileA.text
<fileA's contents converted to an org file by pandoc>
* ./subd/fileB.rtf
<fileB's contents converted to an org file by pandoc>
我认为这将为target-file.org
Emacs 内部的改进留下一个相当好的状态,而脚本不会太复杂。(特别是如果你包括这个pandoc
步骤。)