DIY愛好者 -- 好工具自己做之批處理的極限應用(2)
第一篇的那個批處理只是大致介紹了一些批處理的基本運用:@echo off、重定向等等只是點,可能剛開始看有點累,多看多實踐就好了。推薦一個學習方法:將部分關鍵代碼刪除,看看程序會出現什麼錯誤,然後就能比較快地理解程序運行的原理。好了今天就先給出一個新的代碼(比較頭大的,我也整了好久了,才憋出這個程序,做夢的時候都在想,但還是可能會有點問題,所以這只是個測試版本,大家如果發先程序有問題的話請跟貼告訴我,這個測試2版本是我目前為止未發現BUG的版本,但沒辦法保證有什麼我沒想到的問題,所以歡迎大家指出^^)
注意:下面的測試版本可能無法在英文版的xp上運行,我的測試環境:簡體中文xp+sp2環境下測試通過!不過由於程序的工作原理涉及windows的bug,所以我不能保證能100%能使用,不過我電腦是屬於主流配置,而且補丁也打得很勤快,所以我想大多數用戶還是能夠使用的,如果有不能用的話,請告訴我你的電腦的配置情況。
==========================代碼開始=================================複製內容到剪貼板
代碼:
@echo off
rem Written by heroest
rem Feb 17th,2006
setlocal
color 0b
echo ========================================================
echo.
echo Windows檔案保護專家 測試版2
echo.
echo.
echo 說明:本程序可以有效的保護重要的檔案不被刪除或洩露。
echo 版權沒有,歡迎盜版!
echo =========================================================
:start
echo.
echo 建立檔案保護檔案夾 c:\FileLocker
if not exist c:\FileLocker..\nul md c:\FileLocker..\
echo 歡迎使用windwos保護專家 v1.0,請選擇選項(1,2,3,q);
echo 1.讀取加密的文檔
echo 2.存儲保密文檔
echo 3.建立秘密存儲文檔
echo q.推出
set /p choice=
if {%choice%}=={} goto start
if /i %choice%==1 goto djm
if /i %choice%==2 goto cjm
if /i %choice%==3 goto jjm
if /i %choice%==q goto quit
goto start
rem========================加入秘密檔案夾==========================
:jjm
echo.
echo 請輸入密碼:
set /p pass2c=
if {%pass2c%}=={} goto jjm
echo 開始根據密碼建立保密檔案夾......
md "c:\FileLocker..\%pass2c%..\"
echo 成功建立了保護檔案夾!
echo.
goto start
rem=======================「加入」部分結束=========================
rem
rem======================存儲資料部分==============================
:cjm
echo.
echo 請輸入密碼:
set /p pass=
if {%pass%}=={} goto cjm
if exist c:\FileLocker..\%pass%..\nul goto noerror
echo 發生錯誤,未發現已建立加密保護檔案夾!
goto start
:noerror
md "%userprofile%\桌面\Ready2Lock"
echo 請將你需要保護的檔案複製到桌面上的Ready2Lock檔案夾內(被保存的檔案不能含有檔案夾)
echo 將檔案放入Ready2Lock後按任意鍵開始保護檔案.......
pause > nul
echo 開始保護到C:\FileLocker檔案夾內.........
copy "%userprofile%\桌面\Ready2Lock\*.*" "c:\FileLocker..\%pass%..\"
echo 保護完成,刪除原檔案........
del "%userprofile%\桌面\Ready2Lock\*.*"
rd "%userprofile%\桌面\Ready2Lock"
echo 所有保護完成!
ping 127.0.0.1 -n 3 >nul
cls
goto start
rem ==========================存儲部分結束=======================
rem
rem===========================讀取資料部分=======================
:djm
echo.
echo 請輸入密碼:
set /p pass2=
if {%pass2%}=={} goto djm
if not exist c:\FileLocker..\%pass2%..\nul echo 發生錯誤或不存在保護文檔 & goto djm
echo 開始讀取被保護的資料.......
md "%userprofile%\桌面\Unlocked"
copy "c:\FileLocker..\%pass2%..\*.*" "%userprofile%\桌面\Unlocked"
echo 已經解密到桌面上的Unlocked檔案夾內.........
ping 127.0.0.1 -n 3 >nul
goto start
rem ========================結束=============================
rem =========================退出============================
:quit
echo 感謝使用Windows檔案保護專家 v1.0!
echo 按任意鍵退出本程序.
pause > nul
exit
===========================代碼結束=============================
好了,現在穿插點小內容,有關這個程序的思路:大家都知道"\"這個符號在windows中是用來表示路徑的分隔符,如:"c:\windows"就表示c盤下的windows檔案夾。那麼大家想過沒有,如果一個檔案夾的名字裡包含這個符號,那會怎麼樣呢?系統會出錯,所以在windows下建立的檔案夾是沒辦法帶有"\",但是在CMD裡用MD命令建立檔案夾是沒任何限制的,所以假設我們想在c盤下建立個特殊的檔案夾,比方說:md c:\windows..\注意得在"\"前加兩個".",回到windows中,會發現c盤裡有個顯示名字為"windows."的檔案夾,但是打開之後卻會跳入c:\windows的系統目錄裡(如果windows不存在的話,電腦就會顯示沒辦法找到檔案夾)。所以我們的檔案放這裡面是最安全的。但是我們該怎麼放進去呢?還得回到dos下,使用copy命令複製進去: 「copy c:\test.txt c:\windows..\」就完成了。但是隨之又有個問題,別人只要用一個"copy c:\windows..\*.* c:\"就可以把這個檔案夾內的東西都複製出來了。所以我們的程序為了防止這一點,根據用戶輸入的密碼在這個特殊檔案夾內再建立個檔案夾,檔案夾的名字就是根據用戶的密碼所生成的,所以偷竊者想偷檔案的話除非知道這個根據用戶密碼所生成的特殊檔案夾的名字才能使用copy命令複製出來,否則dir,del,move等命令都是沒辦法威脅到被保護的檔案。唯一能威脅到檔案的方法,目前為止我能想到的也只有格式化硬碟了(只是我個人意見,也許還有別的方法我不知道,所以如果大家發現別的方法請務必告訴我,我好改進程序性能)
好了,大家都知道基本原理了,現在開始對程序的代碼進行分析。
開頭的一些什麼title,color等命令昨天已經說過了,今天就不重複了,如果不會的朋友可以查看本系列的第一篇文章。
好了先出現第一句新命令是if 開頭的那一句,if exist.......do.....表示一旦存在某個檔案(要有詳細路徑),do表示任意一個命令,if還有很多用法,想瞭解的朋友大家可以在dos輸入"if/?"查詢所有用法,這一句是判斷是否存在FileLocker..\這個特殊檔案夾,但是if exist只判斷檔案的存在否,不判斷檔案夾,所以我們在FileLocker..\這個檔案夾後加個nul,就能讓if exist這個命令來判斷是否存在檔案夾了。後面接著的代碼就是昨天說的能獲取用戶輸入的代碼。然後今天又加了點代碼是對用戶輸入的不同資料進行判斷來進行不同的動作,就是使用goto命令跳到每個動作的代碼。「if /i a===b 」這是if命令的另一個用法:對於資料的判斷,當滿足2個資料一樣時執行一條dos命令。進入動作的代碼了,首先是加入檔案夾這個動作,原理其實很簡單:獲取用戶輸入的密碼,將密碼的資料當作秘密檔案夾的名字,然後為了安全起見,我在FileLocker..\這個檔案夾裡又根據用戶密碼建立了個特殊檔案夾,就是密碼後面加上"..\"再次建立特殊檔案夾,徹底保護檔案。
「檔案夾建立」這個動作完成後來到「存儲資料這個部分」,首先得先判斷用戶的密碼對不對,判斷的方法就是檢測是否存在那個根據密碼建立的檔案夾,如果不存在也就說明密碼不對,得重新輸入。而後密碼通過驗證後就是將資料複製的過程,為了方便起見,我讓程序在用戶的桌面上建立了個名為Ready2Lock的臨時檔案夾,方便用戶將需要保存的檔案放入,但是鄙人天生比較愚笨,就是沒辦法將一個檔案夾整個保護到特殊檔案夾內,用戶在往Ready2Lock裡放檔案的時候注意別將檔案夾也放進去。然後用戶放完之後按任意鍵後,程序自動開始保護檔案,然後會刪除桌面上的源檔案,做完這一切,整個保護就完成了。最後進入讀取資料部分,還是得先判斷用戶的密碼,如果密碼正確,程序才能正確地取出檔案,否則就會失敗。然後為了方便用戶,程序在桌面上建立個名為Unlock的檔案夾,解密出來的檔案就會放在這裡。呵呵,整個程序的代碼就過了一遍了,大家是不是喜歡上了批處理了,^^
最後說點東西;本系列批處理的教程將分為3部分,分別為初級,中級和綜合,所以下次的教程的程序將會十分龐大,可以透露點,下次的程序是自己用批處理寫的windows最佳化大師(不知道是不是涉及版權問題^^),不過工作量相當的大,我現在目前還處於尋找資料和研究windows最佳化大師的工作原理過程中,所以估計得過一個相當長的時間才能推出最終內容,希望大家能夠諒解。不過以後的時間我會時不時地提供些小程序,有可能就是windows最佳化大師的部分功能測試代碼,希望大家能夠喜歡,並幫忙測試,我在此先謝過了。