HashSF - 知識點小結


HashSF 程序編寫總結

前言

  HashSF 是我用 Batch 寫的較為完整(符合程序設計)的一個項目。雖然功能簡單,但模擬一個完整的程序流程並不容易。因為 Batch 語法和正規的C/CPP 語法相比顯得十分簡陋,所以編寫時有很多在 C/CPP 中可以很容易就實現的功能,在 Batch 中卻顯得十分繁瑣。但 Batch 並不是完全沒有優勢,在文件處理、注冊表操作和用戶賬戶操作等一些調用系統API的操作上,批處理的簡單程度不是任何一門語言可以媲美的!畢竟,這一切在 Batch 中只需要幾句簡單的 CMD 命令就可以完成了!

  所以,我認為 Batch 被用來輔助程序的開發將是一個事半功倍的優秀選擇!而且,Batch 是兼容 Windows 和 Linux 系統的。但是,值得注意的是:由於 Windows 操作系統會有一些自己獨有的 CMD 命令,所以在 Windows 平台編寫 Batch 程序時需要注意 Windows 平台特有的那些命令,這些命令是無法被 Linux 兼容的!

知識點總結索引

  1. 遍歷文件內容

  2. 利用echo改變局部區域的字體顏色及背景色

  3. 關於程序的結束與退出

  4. 自定義“pause”的輸出文字

  5. 判斷變量是否為空

  6. 判斷注冊表項是否存在

  7. 窗口修飾

  8. 添加環境變量

知識點總結

遍歷文件內容

源代碼

for /f "tokens=*" %%i in (demo.txt) do (echo %%i)

講解

  1. %i 是 For循環語句 中的變量,相當於 CPP 中 For循環語句中的 (int) i

  2. tokens=* 表示提取每一行的每一段內容,默認以空格作為分隔符。如果將 “*” 換成 “1” 即表示提取每一行的第一段內容(注意:在 Batch 中用此語句讀取文件內容是按照行來決定的,一次讀取一行內容)。如果需要,可以使用 delims=XXX 來指定分隔符。詳情請使用 FOR /? 命令查看。

  3. demo.txt 表示需要提取內容的文件,這里也可以換成相對路徑 .\demo.txt。需注意:不能使用雙引號是因為雙引號內的文字會被當成字符串處理,而不是文件路徑;也不能使用單引號是因為單引號內的文字會被當成命令處理。

E.G

  1. 源代碼:

  2. 執行結果:


利用echo改變局部區域的字體顏色及背景色

源代碼

echo DEMO

講解

  1. [ 的完整用法應該是 [(40 ~ 47);(30 ~ 37);(0 ~ 1)m

    1. (40~47)表示背景色,可省略;

    2. (30~37)表示字體顏色;

    3. (0~1)表示字體顏色是否高亮顯示(淺色),可省略。

  2. 顏色參考表:

高亮 顏色
30/40 0 黑色
30/40 1 灰色
31/41 0 紅色
31/41 1 淺紅色
32/42 0 綠色
32/42 1 淺綠色
33/43 0 黃色
33/43 1 淺黃色
34/44 0 藍色
34/44 1 淺藍色
35/45 0 紫色
35/45 1 淺紫色
36/46 0 青色
36/46 1 淺青色
37/47 0 灰白色
37/47 1 亮白色

E.G

  1. 源代碼:

  2. 執行結果:


關於程序的結束與退出

源代碼

goto:eof

exit /b 0

講解

  1. goto:eof 表示程序運行結束,但不關閉窗口。

  2. exit /b 0 表示強制結束程序並退出窗口,同時返回值 0 。這個值將被 %ERRORLEVEL% 接收。


自定義“pause”的輸出文字

源代碼

set /p output=請自定義這段文字...

講解

  1. 巧用 set /p 實現自定義 pause 輸出文字的效果。

  2. 這個 output 變量可重復使用。建議專門設幾個變量用於不同代碼塊下的暫停(增強程序的可讀性,也可以被用來檢測程序已經執行到哪個位置)。

E.G

  1. 源代碼:

  2. 執行結果:


判斷變量是否為空

源代碼

if defined output () else ()

講解

  1. if defined 判斷變量是否為空是我推薦的方法,其它方法都有一定的弊端。

  2. 結合上一知識點,可以聯合使用:

set /p output=這里寫提示信息...
if defined output set output=

這樣可以完美實現暫停效果,而且變形后可以用來設置“返回上一步”之類的的操作。例如,指定輸入“B”返回上一步(用 if 語句判斷)。

E.G

  1. 源代碼:

  2. 執行結果:


判斷注冊表項是否存在

源代碼

REG QUERY "HKEY_CURRENT_USER\Environment\test" /ve 1>nul 2>nul
if %ERRORLEVEL% EQU 0 (REG DELETE "HKEY_CURRENT_USER\Environment\test" /F)

講解

  1. REG QUERY 用於查詢注冊表項或值。配合 %ERRORLEVEL% 使用即可實現檢測注冊表項是否存在的效果。

  2. 如果需要檢測具體值應像下面演示的這樣:

REG QUERY "HKEY_CURRENT_USER\Environment" /v "Path" 1>nul 2>nul
if %ERRORLEVEL% EQU 0 (REG DELETE "HKEY_CURRENT_USER\Environment" /v "Path" /F)

具體用法請使用命令 REG QUERY /? 進行查看。


窗口修飾

源代碼

::改變窗口大小
mode con cols=56 lines=18
::改變窗口標題
title HashSF哈希碼校驗工具@SeaFever
::改變窗口顏色
color 70

講解

  1. cols= 后跟窗口的寬度, lines= 后跟窗口的高度。兩者均以一個單位字符的寬高作為單位寬高。

  2. title 直接跟文字就好了,如果顯示中文亂碼請將文件以 ANSI 編碼模式保存。

  3. color 第一個字符(7)表示背景色,第二個字符(0)表示前景色。不同的字符代表不同的顏色,詳請請看下表:

字符 顏色
0 黑色
1 藍色
2 綠色
3 淺綠色
4 紅色
5 紫色
6 黃色
7 白色
8 灰色
9 淡藍色
A 淡綠色
B 淡淺綠色
C 淡紅色
D 淡紫色
E 淡黃色
F 亮白色

E.G

  1. 源代碼:

  2. 執行結果:
    自己復制代碼試一下吧,壓制出來的gif圖還是太大,上傳不了!

@ECHO OFF
title DEMO演示

for %%a in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do (
	for %%b in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do (
		cls
		echo color=%%a%%b  ███████████████████████████████████████████████████████
		for /L %%i in (0 1 27) do (echo ████████████████████████████████████████████████████████████)
		color %%a%%b
		ping 127.0.0.1 -n 1 1>nul 2>nul
	)
)

pause

添加環境變量

源代碼

REG ADD "HKEY_CURRENT_USER\Environment" /v "NAME" /t REG_SZ /d "KEY" /F

講解

  1. 命令表示在“HKEY_CURRENT_USER\Environment”項下添加一個鍵值為KEY、名為NAMEREG_SZ類型(字符串類型)值。

  2. /F 代表強制。詳細使用方法請使用命令 REG ADD /? 查看。

  3. 這里是直接操作注冊表,環境變量不會立刻生效,需要重啟電腦。但可以用

taskkill /im explorer.exe /f 1>NUL 2>NUL
start explorer.exe 1>NUL 2>NUL

命令讓其直接生效。

  1. 這里添加的是用戶環境變量,所以使用 setx 命令會更方便(setx只能添加用戶環境變量)地實現。下面的表格給出系統環境變量的注冊表位置:
環境變量類型 注冊表位置
用戶環境變量 HKEY_CURRENT_USER\Environment
系統環境變量 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM