一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼

鹹魚Linux運維發表於2023-03-08

前言

說實話在寫這篇文章的時候,鹹魚不禁又想起了那件男默女淚的往事
 
我喜歡做筆記,我覺得好記性不如爛筆頭,所以在我的學生以及職業生涯階段,我用過四款筆記應用——Onenote、語雀、印象筆記、Typora
 
其中我個人覺得體驗最好的非 Typora 莫屬了
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
在 2022 年的時候,由於 Typora 收費,我就尋思網上找個破解版的用用(白嫖這一塊嗷
 
沒想到一頓操作下來,我誤刪了現在的軟體,更加令人崩潰的是,我當時 Typora 檔案是存放在程式的目錄之下!!!
 
如下圖所示:
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
我是完全無視掉下面那個 DO NOT ADD FILES HERE
 
於是當我意識到我辛辛苦苦寫下的筆記全部都沒有了的時候,那一瞬間我崩潰了
 
趕緊上某魚看看有沒有幫忙恢復資料的服務,儘管到最後資料是恢復了,但內容全是亂碼(再度崩潰)
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
經過這麼一件慘案,鹹魚痛定思痛,於是決定寫一個定期自動備份檔案的 Windows 指令碼
 
在寫這個指令碼之前,我們先來學習一下指令碼當中用到的命令
 
xcopy
 
微軟官方介紹:https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/xcopy
 
Copies files and directories, including subdirectories
 
可以看到,xcopy 用於複製檔案和目錄,包括子目錄
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
引數如下:
 
引數
說明
/W
顯示以下訊息,並在開始複製檔案之前等待響應:按任意鍵開始複製檔案 ()
/p
提示確認是否要建立每個目標檔案。
/c
忽略錯誤。
/v
在寫入目標檔案時驗證每個檔案,以確保目標檔案與原始檔相同。
/q
禁止顯示 xcopy 訊息。
/f
複製時顯示源和目標檔名。
/l
生成要複製的檔案列表,但不主動複製檔案。
/G
當 目標 不支援加密時,建立解密的目標檔案。
/d [:MM-DD-YYYY]
僅複製指定日期或之後更改的原始檔。如果未包含 MM-DD-YYYY 值,xcopy則 複製比現有目標檔案更新的所有原始檔。此命令列選項允許更新已更改的檔案。
/U
從僅存在於目標上的源複製檔案。
/i
如果 source 為目錄或包含萬用字元且目標不存在, xcopy 則假定 destination 指定目錄名稱並建立新目錄。然後, xcopy 將所有指定的檔案複製到新目錄中。預設情況下, xcopy 會提示指定目標是檔案還是目錄。
/s
複製目錄和子目錄,除非它們為空。如果省略 /s,可在 xcopy 單個目錄中工作。
/e
複製所有子目錄,即使它們為空。將 /e 與 /s 和 /t 命令列選項一起使用。
/t
複製子目錄結構 (,即樹) ,而不復制檔案。若要複製空目錄,必須包含 /e 命令列選項。
/k
複製檔案並保留 目標 檔案上的只讀屬性(如果 原始檔 上存在)。預設情況下, xcopy 刪除只讀屬性。
/r
複製只讀檔案。
/h
複製具有隱藏和系統檔案屬性的檔案。預設情況下, xcopy 不會複製隱藏的檔案或系統檔案
/a
僅複製設定了存檔檔案屬性的 原始檔 。/a 不會修改原始檔的存檔檔案屬性。
/m
複製設定了存檔檔案屬性的 原始檔 。與 /a 不同, /m 關閉源中指定的檔案中的存檔檔案屬性。
/n
使用 NTFS 短檔案或目錄名稱建立副本。 將檔案或目錄從 NTFS 卷複製到 FAT 卷時,或者當 FAT 檔案系統命名約定 (目標檔案系統上需要 8.3 個字元) 時,需要 /n。destinatio*檔案系統可以是 FAT 或 NTFS。
/o
複製檔案所有權和自由訪問控制列表 (DACL) 資訊。
/x
複製檔案稽核設定和系統訪問控制列表 (SACL) 資訊 (暗示 /o) 。
/Y
取消提示,確認是否要覆蓋現有目標檔案。
/-Y
提示確認是否要覆蓋現有目標檔案。
/z
在可重啟模式下透過網路複製。
/b
複製符號連結而不是檔案。此引數是在 Windows Vista® 中引入的。
/j
在不緩衝的情況下複製檔案。建議用於非常大的檔案。此引數已新增到 Windows Server 2008 R2 中。
/compress
在檔案傳輸過程中請求網路壓縮。
/?
在命令提示符下顯示幫助。
 
關於 xcopy 的一些使用指南
 
  • 使用 /z
加上 /z參數列示可以在重啟的模式下透過網路進行復制
 
如果你在複製階段,網路斷開了,則連線會在重新建立連線之後恢復,加了/z引數還能夠顯示每個檔案完成複製操作的百分比
 
  • 複製加密檔案
 
如果在複製加密檔案過程中碰到不支援 EFS 的 volume,會報錯
 
你需要先將檔案解密,然後複製,之後再重新加密;又或者可以將加密檔案複製到支援 EFS 的 volume
 
  • 追加檔案
 
如果想要追加檔案,把 Destination 指定成單個檔案,但 source 是指定多個檔案(使用萬用字元 or file1+file2+file3 格式)
 
  • Destination 預設值
如果省略 Destination,xcopy 則會將檔案複製到當前目錄
 
  • 提示指定 Destination 是檔案還是目錄
 
如果你的 Destination 不包含現有的目錄,而且沒有以反斜槓結尾,系統就會提示你
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
 
 
如果希望將一個或多個檔案複製到某個檔案,請按 F;如果希望將一個或多個檔案複製到目錄,請按 D
 
如果你不想這條提示出現,可以加上 /i 引數禁止顯示此訊息
 
如果 source 是多個檔案或目錄,則會導致 xcopy 假定目標為目錄
 

正文

 

 
在瞭解了 xcopy 之後,就正式開始指令碼的編寫吧! 首先我們需要知道你筆記的路徑 我筆記的路徑是存放在D:\studynote下 而我筆記上面的圖片的存放路徑卻是在C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images下 其次定義變數
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
其中%date:~0,4%%date:~5,2%%date:~8,2%表示加上當前日期 具體原理如下: 在 Windows cmd 命令列視窗執行date命令後這個環境變數的值為
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
%date:~0,4% 表示從左向右指標向右偏0位,然後從指標偏移到的位置開始提取4位字元(結果是 2023,即年份) %date:~5,2% 表示指標從左向右偏移5位,然後從偏移處開始提取2位字元(結果是03,月份) %date:~8,2% 表示指標從左向右偏移8位,然後從偏移處開始提取2位字元(結果是07,日份) 接下來我們使用 xcopy 命令
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
點選儲存,字尾名改成 bat,然後執行,就可以看到備份成功了!
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
那有小夥伴可能會說,現在只是實現了備份功能,定期備份怎麼實現呢 這裡我們用 Windows 的任務計劃來實現 開啟任務計劃程式,選擇右上角的建立基本任務
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
設定備份時間為每個月的週一早上九點
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
選擇執行指令碼
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
 
一次慘痛教訓讓我寫了個Windows定期備份檔案指令碼
 
 
這樣一個定時備份的程式就完成了!

感謝閱讀,喜歡作者就動動小手[一鍵三連],這是我寫作最大的動力
 
 

相關文章