HashSF

六眼飞鱼酱① 提交于 2020-04-18 12:08:03

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  [36mDEMO [37m

讲解

  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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!