記錄一次批量處理文檔的過程

来源:https://www.cnblogs.com/liuyaanng/archive/2018/07/29/9387541.html
-Advertisement-
Play Games

要做一項工作,內容是將一個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&nbsp; 密碼:cbfo

這個在萬能的吾愛破解壇友的幫助下還是有道道哈哈哈,打開軟體後輸入傳送門:HJG4567-AQsmVAo-8

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先先介紹一下這個項目,該項目實現了文本寫入及讀取,日誌寫入指定文件夾或預設文件夾,日誌數量控制,單個日誌大小控制,通過約定的參數讓用戶可以用更少的代碼解決問題。 1.讀取文本文件方法 使用:JIYUWU.TXT.TXTHelper.ReadToString(“文件物理路徑”) 1 public s ...
  • 一個典型的ASP.NET Core應用程式會包含Program與Startup兩個文件。Program類中有應用程式的入口方法Main,其中的處理邏輯通常是創建一個WebHostBuilder,再生成WebHost,最後啟動之。 而在創建WebHostBuilder時又會常常會指定一個Startup ...
  • 1.資料庫截取字元串:toFixed():四捨五入substring(cp_introduce,0,11) cp_introduce前臺截取: field: 'an_content', title: '問題內容', formatter: function (value) { if (value.le ...
  • .NET Core TDD 前傳: 編寫易於測試的代碼 -- 構建對象 ...
  • 在屏幕解析度大小不一的情況下,應用程式的圖標有些電腦顯示合適,有些電腦顯示在圖標中間出現過多空白邊距; 處理方式: 1、在vs中打開ico圖片 2、在圖標空白處右鍵添加新圖像類型 3、選擇自己需要的尺寸 4、選擇自己的圖像複製 5、黏貼在之前新建的圖像中 完成。 ...
  • Startup.cs下ConfigureServices代碼 這裡主要在DocInclusionPredicate控制輸出那些api。 Startup.cs下Configure代碼 給Controllers或Action添加[ApiExplorerSettings(GroupName= "ApiGr ...
  • 今天在測試一下上傳文件的時候發現iis和配置存在上傳文件大小限制(IIS預設大小30M,最大運行為2g:2147483647),百度了一部分資料有些發佈到IIS好使,但是在VS調試中不好使。於是自己不斷努力還是找到了問題點。不是說網上的不對,只不過是有些情況下忽略了一些步驟。我就總結了一下我本次的步 ...
  • 一臺客戶端發現無法進入域用戶,於是登入了本地管理員退域 重新加域時發現無法加入,檢查發現是可以ping通的,輸入域、添加之後也會提示輸入賬號密碼驗證加域,輸完密碼之後提示“找不到網路名”,DNS指向正確 最後嘗試了重啟域控伺服器,之後成功加域。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...