记录一次批量处理文档的过程

摘要:
要做一项工作,内容是将一个word中的图表复制到多个word文档的末尾,不想一个个CTRLC+CTRLV,就想到了用程序来实现我第一个想到的使用python来实现,由于技术太渣,尝试了多次,没能写出来,只记得有一个叫做win32com的模块,专门处理文档的。

要做一项工作,内容是将一个word中的图表复制到多个(接近300个)word文档的末尾,不想一个个CTRL C+CTRL V,就想到了用程序来实现

我第一个想到的使用python来实现,由于技术太渣,尝试了多次,没能写出来,只记得有一个叫做win32com的模块,专门处理文档的。这里先不说了

在查阅资料的过程中,偶然看见在linux中的cat命令似乎能做这件事,恰好我装了centos7,也在学习这Linux命令,于是转战linux。

对这个工作,我分三步进行:

1:使用cat命令将一个文档追加到另一个文档末尾

2:得到一个目录下的所有文件名(后面讲为什么)

3: 写shell脚本实现功能

一:关于cat命令

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。

1.命令格式:

cat[选项][文件]...

2.命令功能:

cat命令的功能:

1.一次显示整个文件:catfilename  

2.从键盘创建一个文件:cat>filename 只能创建新文件,不能编辑已有文件.

3.将几个文件合并为一个文件:catfile1file2>file

4.在一个文件后追加另一个文件:cat file1 >> file2

3.命令参数:

-A,--show-all等价于-vET

-b,--number-nonblank对非空输出行编号

-e等价于-vE

-E,--show-ends在每行结束处显示$

-n,--number对输出的所有行编号,由1开始对所有输出的行数编号

-s,--squeeze-blank有连续两行以上的空白行,就代换为一行的空白行

-t与-vT等价

-T,--show-tabs将跳格字符显示为^I

-u(被忽略)

-v,--show-nonprinting使用^和M-引用,除了LFD和TAB之外

这里给出几个实例:

1:把 file1 的文档内容加上行号后输入 file2 这个文档里

cat -n file1 > file2

注意这里是吧file1的内容输入到file2中,file2若存在,则清空内容,里面输入file1内容,若不存在则创建file2,输入file1内容

2:把 file1 和 file2 的文档内容加上行号(空白行不加)之后将内容追加到 file3 文档里:

cat -b file1 file2 >>file3

该操作不会改变file3中原有的内容,把file1和file2的内容追加到file3的末尾

3:创建一个名为a.txt的文件

cat >a.txt <<EOF
>EOF

输入第一行后,输入EOF,回车,就可以生成一个 a.txt 文件。其中EOF是告诉 bash 哪个符号代表文件结束。当然你也可以使用自己习惯的符号。

4: 利用cat清空文件内容

如果 b.txt 文件有很多内容,而你想要清空的话,同样可以使用上面提到的命令形式:

cat >b.txt <<EOF
>EOF

5: cat命令可以直接向文件中写入东西,并覆盖掉原本的东西

cat >c.txt  <<EOF
>2222
>3333
>EOF

利用cat命令处理的时候,尽量带上文件的格式,例如1.txt,1.doc

要是第一步,文件追加需要用到这个命令

cat file1 >> file2

二:获取一个目录下的文件名

获取目录下的文件名可以直接使用 ls 命令,但只是将名字打印出来,不能获得这个名字,也就是说如果想要在后面使用cat命令对这些文件进行处理的话,需要用一个变量来接收这些文件名,再对这个变量进行cat操作

下面介绍两种常用的方法来进行相关操作

1:使用${ }

${var##*/}

该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.txt
~$ echo ${var##*/}
file.txt

从运行结果可以看到,使用该命令,可以提取出我们需要的文件名file.txt。

若使用时在shell程序文件中,可以使用变量来保存这个结果,再加以利用,如file = ${var##*/}

${var##*.}

该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.txt
~$ echo ${var##*.}
txt

从运行结果可以看到,使用该命令,可以提取出我们需要的文件后缀。

如果文件的后缀不仅有一个,例如,file.tar.gz,命令${var##*.}仅能提取最后一个后缀,而我想提取tar.gz时该怎么办?那么就要用下面所说的${var#*.}命令了。

${var#*.}

该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.tar.gz
~$ echo ${var#*.}
tar.gz

从运行结果可以看到,使用该命令,可以提取出文件的多个后缀.

${var%/*}

该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.txt
~$ echo ${var%/*}
/dir1/dir2

使用该命令,可以提取出我们需要的文件所在的目录.

${var%%.*}

该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容

使用例子及结果如下:

~$ var = /dir1/dir2/file.txt
~$ echo ${var%%.*}
/dir/dir/file

当我们需要建立一个与文件名相同名字(没有后缀)的目录与对应的文件相对应时,就可以使用该命令来进行操作。例如,解压文件的情况就与此类似,我们压缩文件file.zip时,会在与file.zip同级目录下建立一个名为file的目录。

⑥总结${ }

${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。

看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。

#:表示从左边算起第一个

%:表示从右边算起第一个

##:表示从左边算起最后一个

%%:表示从右边算起最后一个

换句话来说,#总是表示左边算起,%总是表示右边算起。

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。

例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。

看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。

2:basename和dirname

${}并不是专门为提取文件名和目录名设计的命令,那么basename和dirname命令就是专门为做这一件事而已准备的了。

①basename

该命令的作用是从路径中提取出文件名,使用方法为:

basename NAME [SUFFIX]

1)从路径中提出出文件名(带后缀)

例子如下:

~$ var = /dir1/dir2/file.txt
~$ echo $(basename$var)
file.txt

2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名

例子如下:

~$ var = /dir1/dir2/file.txt
~$ echo $(basename$var.txt)
file

②dirname

该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME

使用例子如下:

~$ var = /dir1/dir2/file.txt
~$ dirname$var
/dir1/dir2

这样就提取出了file.txt文件所在的目录。

注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:

~$ var = /dir1/dir2/
~$ dirname$var
/dir1

它提取出了目录dir2所在的目录dir1

三:shell脚本的实现

为方便进行操作,我把shell脚本与待处理文件放在了同一文件夹下

vi Additional_document.sh

将下列代码输入:

#这里是待处理文件的位置
Folder_A="/home/liuyaanng/liu"   
for file_a in ${Folder_A}/*do  
    temp_file=`basename $file_a`  
    cat a.txt >> $temp_file
    echo 'success'  
done  

保存退出后,要赋予shell脚本可执行权限,由于脚本与待处理文件在一个文件夹下,所以该脚本同样会被cat命令作用,为避免有东西再写入该脚本,要修改访问权限为只读

chmod r+x Additional_document.sh

执行该程序即可

./Additional_document.sh

有几个需要注意的问题:

1:该脚本仅支持纯文本的追加,不支持诸如图片,表格等

2:若处理windows系统下的word文件,打开文件是乱码,原因可能是你的linu系统下未安装对应的字体(并非未安装中文,是诸如宋体,楷体)

3:txt格式与doc格式也可追加,但为避免出现格式问题,可提前进行转格式操作,再进行追加

转格式为:

unoconv -f doc a.txt

unoconv存在于很多发行版的软件仓库中,也可通过其网站下载安装。

以上,为在linux下的完整操作

在我查阅大量资料的时候,发现两款在Windows下专门做批量处理文档的神器

在下载的时候,某度的搜索结果捆绑了太多软件,一不小心来了个全家桶,所以我在这分享一下安全绿色无捆绑的资源(排除打广告嫌疑,只是推荐,逃ε=ε=ε=┏(゜ロ゜;)┛)

一:word文档批处理大师 Batchword(付费版本,土豪推荐)

记录一次批量处理文档的过程第1张

链接:https://pan.baidu.com/s/1KFcHojbwAaPkWZL_TEgBZw 密码:j7w1

这个我找了很久,找不到万能的注册机,破解版的也尝试了,暂时没有找到能用的,有资源的请默默留下链接(^人^)

word文档批量处理大师基本功能

1、批量运行word宏代码:

2、批量插入版权/随机文字、随机版权图片:

3、批量添加文字超链接、替换文档内容

4、批量格式设置:

5、页面设置、属性设置

6、替换/设置图片、超链接

7、word转图片或PDF

8、设置/清除文字页眉、图片页眉

9、设置/清除文字页脚、图片页脚

10、设置/清除文字水印、图片水印

11、批量打印

12、插入/合并文档

13、转换类型(可转换为doc、rtf、txt、xml、htm、html、mht、mhtml、dot、docx、dotx中的任一格式)

14、繁简转换

15、设置、修改密码

二:BatchDoc(功能较BatchWord少,也是需要注册)

记录一次批量处理文档的过程第2张

链接:https://pan.baidu.com/s/1pN1mG_wDjIFvQtg3tLc3lg&nbsp; 密码:cbfo

这个在万能的吾爱破解坛友的帮助下还是有道道哈哈哈,打开软件后输入传送门:HJG4567-AQsmVAo-8

免责声明:文章转载自《记录一次批量处理文档的过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MyBatis的使用企业微信第三方应用开发几个注意点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux上安装ZooKeeper并设置开机启动(CentOS7+ZooKeeper3.4.10)

1下载Zookeeper 2安装启动测试        2.1上载压缩文件并解压       2.2新建 zookeeper配置文件       2.3安装JDK       2.4启动zookeeper       2.5查看zookeeper的状态 3将ZooKeeper设置为开机启动(可选)       3.1在init.d目录下新建脚本文件    ...

Linux下的压缩和解压缩命令gzip/gunzip

作者:邓聪聪 Linux下的压缩和解压缩命令——gzip/gunzip yum -y install zip gzip (--安装压缩工具) gzip命令 gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。 gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又...

Potocol Buffer详解

protocol安装及使用 上一篇博文介绍了一个综合案例,这篇将详细介绍protocol buffer。 为什么使用protocol buffer? java默认序列化效率较低。 apache的thrift方案并无明显优势,但是使用成本较高,安装等较为麻烦。 虽然PB不支持map,但是我们的应用中map用的较少,即使使用了存储的数据量也较少,可以转化为l...

ranger文件管理器

我是一个 CLI 控,但一直苦于没有一个好用的文件管理器。虽然 vifm 的 vim 键绑定很合我的胃口,但它实在不好用。所以我一直没有停止过寻找类似软件的念头。直到尝试了 Ranger, 觉得很不错。功能很全,扩展/可配置性也不错,还有 vim 的键绑定、多列文件管理方式、支持多标签页。实时预览文本文件和目录,等等…… 一,安装: ranger 在 Ar...

RedHatlinux下NFS的配置

网络文件系统(NFS)的概念     网络文件系统(NFS)是一种在网络上的机器间共享文件的方法,文件就如同位于客户的本地硬盘驱动器上一样。Red Hat Linux 既可以是 NFS 服务器也可以是 NFS 客户,这意味着它可以把文件系统导出给其它系统,也可以挂载从其它机器上导入的文件系统。 NFS的安装     RedHad默认已经安装了NFS,如果没...

使用composer 实现自动加载

准备工作:提前安装好composer 1.创建项目目录OOP 2.OOP目录下新建composer.json文件,composer.json是一个空json文件,代码如下: { } 3.打开控制台,进入项目目录OOP,在OOP目录下运行composer命令: composer install 4.运行后自动生成composer文件目录,目录结...