從 windows 上進行每日異動檔案備份

Windows Command 失敗的案例

有一台提供備份的 Windows 主機,主要提供的工作設想為:根據備份對象當天異動的所有檔案進行複製

  1. 在備份資料夾新增當天日期資料夾
  2. 搜尋備份對象所有當天異動檔案,並複製到當天資料夾內
一開始只打算使用 DOS Command 也就是最基礎的指令設計,摸索了一下,寫了下面這個批次檔:

決定使用 windows batch file 是錯誤的決定,因為來源檔案有重複檔名,因此需要加上一個流水碼避免覆蓋。如果使用 xcopy 指令搜尋符合日期檔案複製,那就無法進行檔名的變更,最後我又使用 PHP 處理。

PHP 程式運作流程

  1. 使用系統指令 DIR 產生所有檔案列表,建立成文字檔
  2. 建立當日備份日期目錄
  3. 解析 DIR 文字檔內容,搜尋符合日期檔案
  4. 將符合檔案加上流水碼複製到日期目錄中
1. 產生所有列表檔案以及生成文字檔

2. 建立當日備份日期目錄

3. 解析文字檔案,找到符合條件檔案

產生的檔案列表格式大致就像下面這樣,不同系統,不同指令參數會得到不同的格式。大致上需要處理的就是

  1. 以 z: 為判讀的「目錄」路徑
  2. 以日期格式開頭的檔案名稱
  3. 以及排除同樣是日期名稱開頭,但是檔名開頭為「 .  」 的目錄敘述

▼ 下面這張圖對於格式的敘述會比較清楚

程式技巧

  • exec() 執行系統指令,這裡使用在
    • 建立資料夾 mkdir
    • 顯示檔案清單 dir
  • dir 指令內的大於符號 > 功能是轉向,在此的作用是將畫面輸出到檔案,因此右邊就是檔案名稱
  • fgets() 一行一行的讀取文字檔案,方便後續資料分析
  • substr() 負責取出路徑及檔案名稱,使用負值是倒數 (從右數到左) 的字不取,-2 是過濾換行 \r\n
  • 預設 DOS 提示字元視窗字碼是 BIG5,所以一個中文字要算 2 個字數

▼完成後就像這樣子

待加強、開發

  • 取用檔案使用 WEB 介面 →  安裝 Apache
  • 將複製來源及備份檔案關聯紀錄,方便取用時確定對象及搜尋 → 安裝 MariaDB,
  • 針對以上需求開發網頁程式

444 total views, 1 views today

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。