@echo off
:: 此代码段到下面 :viewpass 之间的代码段位置固定不变,Debug精确定位
goto :setpass
:dataset
set filename=run.bat
set debug=01E0
goto :eof
:passset
set pass=Redtek
goto :eof
:viewpass
echo 当前密码是:%pass%
goto :eof
:setpass
:: 初始化Debug精确定位数据
call :dataset
:: 加载密码变量
call :passset
echo 原密码为:%pass%
set "p="
set /p P=请输入新密码:
if [%p%]==[] goto :eof
:: Debug 精确定位修改为新设置的密码到自身
echo exit|cmd/k prompt n %filename%$_l$_e %debug% "%p%"$_w$_q$_|debug
chcp 936>nul
echo.
:: 新 Debug 刚修改完 :passset 代码段中的密码,但此时内存中的变量并未更新
:: 需要重新加载一次密码变量,“刷新”内容密码变量内容。
:: echo 新密码为:%pass%
call :passset
:: call :viewpass
echo 当前密码是:%pass%
pause
goto :eof
:://///////////////////////////////////////////////////////////////////////////
:: @Redtek@sweetmeet.com 2006
:://///////////////////////////////////////////////////////////////////////////
-d 01a5
13C0:01A0 31 32 33-37 38 39 0D 0A 09 67 6F 123789...go
13C0:01B0 74 6F 20 3A 65 6F 66 0D-0A 0D 0A 3A 76 69 65 77 to :eof....:view
13C0:01C0 70 61 73 73 0D 0A 0D 0A-09 65 63 68 6F 20 B5 B1 pass.....echo ..
13C0:01D0 C7 B0 C3 DC C2 EB CA C7-A3 BA 25 70 61 73 73 25 ..........%pass%
13C0:01E0 0D 0A 09 67 6F 74 6F 20-3A 65 6F 66 0D 0A 0D 0A ...goto :eof....
13C0:01F0 0D 0A 3A 73 65 74 70 61-73 73 0D 0A 0D 0A 09 3A ..:setpass.....:
13C0:0200 3A 20 20 B3 F5 CA BC BB-AF 44 65 62 75 67 BE AB : ......Debug..
13C0:0210 C8 B7 B6 A8 CE BB CA FD-BE DD 0D 0A 09 63 61 6C .............cal
13C0:0220 6C 20 3A 64 61 l :da
-d 01a0
13C0:01A0 70 61 73 73 3D 31 32 33-37 38 39 0D 0A 09 67 6F pass=123789...go
13C0:01B0 74 6F 20 3A 65 6F 66 0D-0A 0D 0A 3A 76 69 65 77 to :eof....:view
13C0:01C0 70 61 73 73 0D 0A 0D 0A-09 65 63 68 6F 20 B5 B1 pass.....echo ..
13C0:01D0 C7 B0 C3 DC C2 EB CA C7-A3 BA 25 70 61 73 73 25 ..........%pass%
13C0:01E0 0D 0A 09 67 6F 74 6F 20-3A 65 6F 66 0D 0A 0D 0A ...goto :eof....
13C0:01F0 0D 0A 3A 73 65 74 70 61-73 73 0D 0A 0D 0A 09 3A ..:setpass.....:
13C0:0200 3A 20 20 B3 F5 CA BC BB-AF 44 65 62 75 67 BE AB : ......Debug..
13C0:0210 C8 B7 B6 A8 CE BB CA FD-BE DD 0D 0A 09 63 61 6C .............cal
-d 01d7
13C1:01D0 73-65 74 20 70 61 73 73 3D set pass=
13C1:01E0 31 32 33 34 35 36 0D 0A-09 67 6F 74 6F 20 3A 65 123456...goto :e
13C1:01F0 6F 66 0D 0A 0D 0A 3A 76-69 65 77 70 61 73 73 0D of....:viewpass.
13C1:0200 0A 0D 0A 09 65 63 68 6F-20 B5 B1 C7 B0 C3 DC C2 ....echo .......
13C1:0210 EB CA C7 A3 BA 25 70 61-73 73 25 0D 0A 09 67 6F .....%pass%...go
13C1:0220 74 6F 20 3A 65 6F 66 0D-0A 0D 0A 0D 0A 3A 73 65 to :eof......:se
13C1:0230 74 70 61 73 73 0D 0A 0D-0A 09 3A 3A 20 20 B3 F5 tpass.....:: ..
13C1:0240 CA BC BB AF 44 65 62 75-67 BE AB C8 B7 B6 A8 CE ....Debug.......
13C1:0250 BB CA FD BE DD 0D 0A .......
:://///////////////////////////////////////////////////////////////////////////
附件 1:run.rar (2006-12-1 09:11, 1000 bytes, 下载附件所需积分 1点 ,下载次数: 53)
...
...
:: 注意:后面是空格占位符" "
:: 在pass值后还有很长一段空格,方便写入不同长度的密码之用
set "password=adminzhoulichainliq"
...
...
:: 真实密码值之所以不写在下面,而是写在上面固定独占一行的 set password=...
:: 是因为密码长度有可能是可变的,如果Debug精确直接修改下面if判断中的密码,
:: 因为可变密码长度有可能会“擦”去后面的 goto 语句,……
if "%pass%"=="%password%" goto game
...
...
set "password=my12345678"
C:\TEMP>set var=Redtek
在上面的 Retek 后面是没有空格的
C:\TEMP>echo %var% %time%
Redtek 9:07:10.87
C:\TEMP>set var=cn-dos.net
在 ..cn-dos.net 后面我加了很多空格,所以下面“连接”显示时空出了很多……
C:\TEMP>echo %var% %time%
cn-dos.net 9:08:05.45
而且 var 的值后面是有空格的,这个空格也是值的一部分。
C:\TEMP>set "var=Redtek" dslkfjdlsfjldsj
上面的var的值可是不包括我乱打的 “dslkfjdlsfjldsj” 这几个字符串,很微妙吧?
C:\TEMP>echo %var% %time%
Redtek 9:09:57.76
看结果,它并不包括那个乱打的字符串 dslkfjdlsfjldsj,
这是因为 set 要设置的值全在引号内,这就是为什么用引号可以防止打上多余的空格……
@echo off
:begin
cls
echo.
echo 如果要使用默认密码,请直接输入密码;
echo.
echo 如果要使用新密码,请输入 1
echo.
echo 如果要修改密码,请输入 2
echo.
set input=
set /p input= 请输入:
if "%input%"=="abc" goto success
if "%input%"=="1" goto new
if "%input%"=="2" goto rewrite
goto begin
:new
cls
echo.
set new_password=
set /p new_password= 请输入密码:
for /f "skip=4 tokens=3" %%i in ('reg query HKLM /v test') do set var=%%i
if "%new_password%"=="%var%" goto success
goto new
:rewrite
cls
set set_password=
set /p set_password= 请设置新密码:
reg add HKLM /v test /d %set_password% /f
goto begin
:success
cls
echo.
echo 密码正确!
echo.
pause
goto begin
Originally posted by namejm at 2006-12-2 02:42: 可以考虑把新密码保存在注册表中,然后从注册表读取新密码。以下是一段演示代码: [code] @echo off :begin cls echo. echo 如果要使用默认密码, ...很实用