要做一項工作,內容是將一個word中的圖表複製到多個(接近300個)word文檔的末尾,不想一個個CTRL C+CTRL V,就想到了用程式來實現 我第一個想到的使用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.一次顯示整個文件:cat filename
2.從鍵盤創建一個文件:cat > filename 只能創建新文件,不能編輯已有文件.
3.將幾個文件合併為一個文件:cat file1 file2 > 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(付費版本,土豪推薦)
鏈接: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少,也是需要註冊)
鏈接:https://pan.baidu.com/s/1pN1mG_wDjIFvQtg3tLc3lg 密碼:cbfo
這個在萬能的吾愛破解壇友的幫助下還是有道道哈哈哈,打開軟體後輸入傳送門:HJG4567-AQsmVAo-8