發新話題

DIY愛好者 -- 好工具自己做之批處理的極限應用

DIY愛好者 -- 好工具自己做之批處理的極限應用

DIY愛好者 -- 好工具自己做之批處理的極限應用(1)



最近無聊開始研究一種很古老的在dos下無處不在的好東西——批處理程序。其實也不能算是一種程序,只是將DOS命令寫在一個後綴名為.bat(2k/xp中也可以用.cmd)的檔案,可以將預先寫入的dos命令一起執行,當時是個超級有用的好東東,可以把很多需要一起來執行的命令簡化成一條,還有很多意想不到的功能。不過隨著windows這種圖形界面的東西出現後,批處理就實在沒什麼優勢了,因為使用起來太不方便,每次用的時候都進入dos界面來運行,任何參數得在dos裡跟在程序名後輸入,所以很不方便,以至於現在幾乎沒人用,懷著化廢為寶的原則,我開始了對於批處理的研究。最近才猛然發覺,在windows下,批處理又有它所發揮的餘地,而且它有了很多新的優勢是其他編程語言沒法比較的。
1.編寫工具:無論是寫字扳,word,甚至notepad也可以編寫,而且不需要編譯,改個後綴名直接就能用了
2.編寫簡單:因為所有的代碼都只是windows內帶的命令,沒有嚴格的語法要求,適合像我這種電腦初學者使用,一本dos書就夠用了。
3.功能強大;註冊表,檔案,服務幾乎windows的各個方面都可以用批處理來操作;沒有做不到,只有想不到!
4.在2k/xp中可以將批處理可交互的界面,不需要進入dos界面費力的輸入命令參數,在windows中打開直接就能用了
恩,大概以上的種種優勢已經夠讓人心動了,那麼今天先來講點基本的。
首先教大家學批處理的好方法,在cmd中輸入 「命令/?」可以顯示這條命令的詳細使用方法。例如:輸入「copy/?」我們可以得知以下內容:

將一份或多份檔案複製到另一個位置。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ ...]] [destination [/A | /B]]

source 指定要複製的檔案。
/A 表示一個 ASCII 文本檔案。
/B 表示一個二進位檔案。
/D 允許解密要創建的目標檔案
destination 為新檔案指定目錄和/或檔案名。
/V 驗證新檔案寫入是否正確。
/N 複製帶有非 8dot3 名稱的檔案時,
盡可能使用短檔案名。
/Y 不使用確認是否要改寫現有目標檔案
的提示。
/-Y 使用確認是否要改寫現有目標檔案
的提示。
/Z 用可重新啟動模式複製已聯網的檔案。

命令行開關 /Y 可以在 COPYCMD 環境變量中預先設定。
這可能會被命令行上的 /-Y 替代。除非 COPY
命令是在一個批檔案腳本中執行的,預設值應為
在改寫時進行提示。

要附加檔案,請為目標指定一個檔案,為源指定
數個檔案(用通配符或 file1+file2+file3 格式)。

呵呵,很詳細吧。嗯,先介紹點dos下基礎的東西。
首先給個原代碼先(很基礎的,一個可以修改本機網站地址和靜態ip地址的綁定):
複製內容到剪貼板
代碼:
@echo off
color 0b
setlocal
title HostsHack v1.0
rem Written by Kakashi
rem Feb 16th、2006
echo ===================================================
echo HostsHack v1.1
echo.
echo.
echo 註:修改hosts檔案可以達到屏蔽某些網站的功能
echo 版權沒有,歡迎盜版!
echo ===================================================
echo.
:start
echo 現在開始分析%systemroot%\system32\drivers\etc下系統原有hosts檔案.......
echo 你現在擁有的ip綁定有:
echo.
echo *********************************************************
more +18 < %systemroot%\system32\drivers\etc\hosts
echo *********************************************************
echo.
echo.
echo ====準備加入新的ip綁定======
:startweb
echo 請輸入新的網站地址:
set /p website=
if {%website%}=={} goto startweb
:startip
echo 請輸入綁定的ip:
set /p ip=
if {%ip%}=={} goto startip
echo 開始寫入hosts檔案..............
echo %ip% %website% >>%systemroot%\system32\drivers\etc\hosts
echo 完成!
ping 127.0.0.1 -n 3 >nul
cls
goto start
好了,是不是看得有點頭暈呢,不怕,慢慢來,一行一行解釋:
@echo off 這句的意思是將echo關閉,也就是讓批處理什麼都不顯示,而前加個"@"符號表示連echo off這句命令也不顯示,一開始就關閉批處理的顯示有很多好處:一方面可以讓程序美觀簡潔,二來可以控制程序顯示資料,把需要的資料用命令顯示在桌面上讓用戶能看到,不至於被滿螢幕的東西嚇倒。
color 這條命令是用來控制批處理的美觀的,格式如下:
color bf (b是背景顏色,f是前台(字體)顏色)
0 = 黑色 8 = 灰色
1 = 藍色 9 = 淡藍色
2 = 綠色 a = 淡綠色
3 = 淺綠色 b = 淡淺綠色
4 = 紅色 c = 淡紅色
5 = 紫色 d = 淡紫色
大家可以根據自己的喜好修改(本人推薦: color 0b)
title:這條命令的作用就是修改標題欄的文字,美觀而已。
使用格式 title 「任何你喜歡的文字」
rem:表示解釋說明,以rem 開頭的這一行都算作解釋,不會被程序執行。
echo 「文字」:負責顯示資料,比方說"@echo 你好"這條命令運行後螢幕上就會出現「你好」二字。而"echo."表示輸出一個回車,也就是空一行。
開始進入重點了:
:start 這個命令表示建立一個名字為start的跳轉點,前面的冒號說明這個start是個跳轉點,以後程序只要用個goto start程序就跳回來了。
下面這裡大家跳過幾行,能看到這樣一句代碼「echo 現在開始分析 %systemroot%\system32\drivers\etc下系統原有hosts檔案.......」
%systemroot%表示的是一個名字為systemroot變量,它所帶的值就是windows系統目錄的路徑,這是個系統變量,大家可以在cmd中輸入set查詢所有變量。
好接著看了
more +18 < %systemroot%\system32\drivers\etc\hosts :這段代碼比較複雜,首先"<"這個符號表示重定向,將最後的那個hosts檔案交給more這個命令來處理,然後more+18表示將hosts這個檔案從第18行開始顯示,就是略過前18行的內容(那些內容大家可以自己去看,是windows的說明內容)
開始進入交互部分了:這段代碼當作公式來記憶:
set /p website=
if {%website%}=={} goto startweb
set /p website= :表示將用戶的輸入來作為website的值,而交互部分必須要檢測用戶輸入的值是不是不存在,否則程序要錯誤,所以要是錯誤的話返回程序重新輸入
最後個重點是將用戶輸入兩個值,再加入到檔案後面">>"表示追加,「>」表示重新寫,會刪除原來的內容,然後echo 兩個變量顯示到螢幕上,現在加個重定向到檔案,就追加到原來的檔案咯,最後那個ping 127.0.0.1 -n 3就是表示要延時3秒,加個>nul,nul表示沒有,重定向到沒有就是不顯示的意思咯。
終於把程序的大致內容講了一遍,有興趣的話,大家可以自己來學習一下,看不懂的朋友可以直接將程序代碼複製下來,寫成bat檔案自己先看看。大家也可以發揮想像自己來寫點東西分享下,我也樂意將自己的新作品分享個大家。

TOP

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最佳化大師的部分功能測試代碼,希望大家能夠喜歡,並幫忙測試,我在此先謝過了。

TOP

不錯的資訊

大大分享的不錯喔

謝謝

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。