BAT、CMD脚本的编写与实际应用

 
 
微软官方的定义中,BAT属于批处理脚本(可以运行在DOS、WINDOWS下),是用来进行简化平时操作的批量化集成文件。而CMD,则是只能运行在NT系统下的批处理文件,其功能与BAT是一样的。
从早期的BAT开始,该文件就为大家提供了方便,并在WINDOWS出现后,它的能力可以说是万能的。从最基础的启动盘的引导,到注册表,甚至系统服务的操作,BAT与CMD都可以胜任。而且由于它简便的编写与通用性,很快就布满整个世界
本文将简单介绍BAT与CMD脚本的编写过程,因为在下水平不高,所以如有错误欢迎指出!
一、BAT与CMD中的部分参数
1、定义文件夹的参数
目前我能够搜集到并可以给出意思的通用系统参数如下(不包括后边的解释部分):
%windir%                          ——操作系统文件夹,一般为C:下的WINDOWS文件夹
%sys%                             ——系统根目录,也就是C:盘目录
%programfiles%                    ——Program Files目录,安装程序通常都安装在这个目录下
%systemdrive%                     ——操作系统所在磁盘,与%sys%属于同一目录
%systemroot%                      ——操作系统文件夹,一般为C:下的WINDOWS文件夹
%InfDir%                          ——系统根目录,也就是C:盘目录
%TEMP%                            ——当前用户的临时目录,一般是C:\Documents and Settings\用户名\Local Settings\Temp目录
2、基础操作参数(可以在CMD命令行模式中输入HELP获得)
ASSOC    显示或修改文件扩展名关联。
AT       计划在计算机上运行的命令和程序。
ATTRIB   显示或更改文件属性。
BREAK    设置或清除扩展式 CTRL+C 检查。
CACLS    显示或修改文件的访问控制列表(ACLs)。
CALL     从另一个批处理程序调用这一个。
CD       显示当前目录的名称或将其更改。
CHCP     显示或设置活动代码页数。
CHDIR    显示当前目录的名称或将其更改。
CHKDSK   检查磁盘并显示状态报告。
CHKNTFS  显示或修改启动时间磁盘检查。
CLS      清除屏幕。
CMD      打开另一个 Windows 命令解释程序窗口。
COLOR    设置默认控制台前景和背景颜色。
COMP     比较两个或两套文件的内容。
COMPACT  显示或更改 NTFS 分区上文件的压缩。
CONVERT  将 FAT 卷转换成 NTFS。您不能转换
         当前驱动器。
COPY     将至少一个文件复制到另一个位置。
DATE     显示或设置日期。
DEL      删除至少一个文件。
DIR      显示一个目录中的文件和子目录。
DISKCOMP 比较两个软盘的内容。
DISKCOPY 将一个软盘的内容复制到另一个软盘。
DOSKEY   编辑命令行、调用 Windows 命令并创建宏。
ECHO     显示消息,或将命令回显打开或关上。
ENDLOCAL 结束批文件中环境更改的本地化。
ERASE    删除至少一个文件。
EXIT     退出 CMD.EXE 程序(命令解释程序)。
FC       比较两个或两套文件,并显示
         不同处。
FIND     在文件中搜索文字字符串。
FINDSTR  在文件中搜索字符串。
FOR      为一套文件中的每个文件运行一个指定的命令。
FORMAT   格式化磁盘,以便跟 Windows 使用。
FTYPE    显示或修改用于文件扩展名关联的文件类型。
GOTO     将 Windows 命令解释程序指向批处理程序
         中某个标明的行。
GRAFTABL 启用 Windows 来以图像模式显示
         扩展字符集。
HELP     提供 Windows 命令的帮助信息。
IF       执行批处理程序中的条件性处理。
LABEL    创建、更改或删除磁盘的卷标。
MD       创建目录。
MKDIR    创建目录。
MODE     配置系统设备。
MORE     一次显示一个结果屏幕。
MOVE     将文件从一个目录移到另一个目录。
PATH     显示或设置可执行文件的搜索路径。
PAUSE    暂停批文件的处理并显示消息。
POPD     还原 PUSHD 保存的当前目录的上一个值。
PRINT    打印文本文件。
PROMPT   更改 Windows 命令提示符。
PUSHD    保存当前目录,然后对其进行更改。
RD       删除目录。
RECOVER  从有问题的磁盘恢复可读信息。
REM      记录批文件或 CONFIG.SYS 中的注释。
REN      重命名文件。
RENAME   重命名文件。
REPLACE  替换文件。
RMDIR    删除目录。
SET      显示、设置或删除 Windows 环境变量。
SETLOCAL 开始批文件中环境更改的本地化。
SHIFT    更换批文件中可替换参数的位置。
SORT     对输入进行分类。
START    启动另一个窗口来运行指定的程序或命令。
SUBST    将路径跟一个驱动器号关联。
TIME     显示或设置系统时间。
TITLE    设置 CMD.EXE 会话的窗口标题。
TREE     以图形模式显示驱动器或路径的目录结构。
TYPE     显示文本文件的内容。
VER      显示 Windows 版本。
VERIFY   告诉 Windows 是否验证文件是否已正确
         写入磁盘。
VOL      显示磁盘卷标和序列号。
XCOPY    复制文件和目录树。
3、扩展程序参数的部分参数(考虑到部分参数很危险,所以这里不提供)
cipher                            ——显示或更改 NTFS 分区上的目录(文件)的加密
defrag                            ——启动磁盘碎片整理程序
edit                              ——启动DOS下的文本编辑程序,在XP中也有保留
expand                            ——WINDOWS中自带的解压程序,可以把安装盘中文件名以_结尾的文件解压,NT系列的安装就是在DOS下用这个对文件进行解压后进行排序安装的
EXTRACT或extrac32                 ——对CAB文件进行解压缩的程序,现在都用WINRAR,所以这个功能没什么保留价值了
makecab                           ——制作CAB压缩包的程序,对启动盘的制作倒很有用处
msg                               ——可以将消息发送给同网用户的程序,格式是[MSG 对方机器名 信息](不包括中括号)
ping                              ——可以检测网络的运行状态的程序,从WINDOWS时×××始就有了
proxycfg                          ——设置代理用的程序
regsvr32                          ——服务注册程序,一般是插件的注册,也可以是×××
reg或regedit                      ——注册表操作程序,有时候在BAT、CMD脚本中可以用这个参数进行注册表的修改操作
shutdown                          ——关机程序,可以在一定范围内控制一台或者一个局域网里所有机器的关机时间等
systeminfo                        ——查看系统当前配置情况的参数,也可以显示出运行时间等
TASKKILL                          ——进程删除程序,这个可以关闭至少一个进程
tasklist                          ——查看当前进程列表的程序
二、制作带向导功能的特殊结构脚本
看到标题大家可能会有点郁闷:BAT、CMD脚本也可以实现向导功能?
很荣幸的告诉大家,是的。BAT、CMD脚本不但可以实现脚本的向导功能,而且还可以结合大量的参数,组合成一个只需要不到100KB就可以通吃所有系统的工具包!
本介绍部分可以配合“结合Universal Extractor进行简单软件的绿化制作”所写的制作过程进行实况编写,不过限于篇幅关系,这里只对带有向导的BAT、CMD脚本进行解析。
首先让我们看一个简单的不能再简单的例子(后边标注部分在实际应用中是不会写进脚本的)——
@echo off                                               ——隐藏操作过程,不对下边的操作进行显示
cls                                                     ——清除之前屏幕上的所有字符
title 智能ABC输入法 5.0 重封装版 BY 龙梦秋              ——指定当前命令行窗口标题
COLOR 1F                                                ——指定操作界面颜色,可以在命令行中输入 COLOR /? 来查看具体配置参数
echo *=======================================================     ——在这里可以写入自己需要显示在命令行窗口中的内容,甚至可以做成由字符组成的图形界面
echo.
echo     欢迎安装由偶重新封包的"智能ABC输入法 5.0 重封装版"!
echo     偶特意重新封包5.0版是因为很多XP简化版以及SP2的修改过
echo 的版本都把系统里的智能ABC版本升级到了5.2,这让一些习惯了
echo 5.0版本的用户(包括偶)变得无法适应。
echo     为了让包括偶在内的所有5.0用户可以回到原来的输入法环
echo 境,经过偶一番琢磨(本来打算写程序来安装,可惜偶是编程白
echo 痴,写个脚本都写到差点脑中风),后来用替换法得到了对应的
echo 3个文件与1个帮助文件,另外加进一个增加、删除和调整输入法
echo 用的程序imetool.EXE,并写了一个脚本直接进行完整安装。
echo     最后,祝您使用的愉快!
echo.
echo 更新说明:
echo.
echo    国庆节……好难得哦~~
echo    刚才把上次制作的“智能ABC 5.0版”拿出来看了下,发现脚
echo 本有点太简单,而且这样做用户误操作的几率很高,所以对安装
echo 脚本稍微进行了一次小小的修改。
echo    相信有了向导的帮忙,用户再也不会跟偶发脾气了吧~~
echo.
echo                                         ——龙梦秋
echo                                         2006年10月1日
echo *=======================================================
pause                                                   ——暂停脚本执行,按任意键可以继续
:select mode                                            ——指定执行项目,在后面的GOTO参数中很有用
cls                                                     ——清除之前屏幕上的所有字符(以下对同样内容的解释能省我就省,免得有人说偶骗稿子篇幅……)
echo.
echo.
echo               ※※※※※※※※※※※※※※※※※※※※※※※※※※
echo               ※                                                ※
echo               ※                  请选择安装模式                ※
echo               ※                                                ※
echo               ※          1、高级模式                           ※
echo               ※                                                ※
echo               ※          2、菜鸟模式                           ※
echo               ※                                                ※
echo               ※          3、自动安装模式                       ※
echo               ※                                                ※
echo               ※          4、退出安装向导                       ※
echo               ※                                                ※
echo               ※※※※※※※※※※※※※※※※※※※※※※※※※※
echo.
echo.
echo         ************  请选择要进入的模式,并按回车确定执行  ************
echo.
SET /P ST="模式选择: "                                  ——SET参数在结合之后的ST后将设置ST为输入项目,并在屏幕上显示等号之后的内容,在后面指定GOTO参数后将把用户的输入操作识别并转到对应的执行项目中。/P参数表示需要在输入后再按回车才执行,避免有的用户一旦执行错误将会出现严重问题
echo.
if /I "%ST%"=="1" goto advanced mode                    ——/I参数代表之前在SET参数中字符的输入,"%ST%"表示之前设置的模式选择的输入。等号后面的双引号里的内容为设置好的模式的转向标识,最后的GOTO后的内容则为转向的执行项目,下同
if /I "%ST%"=="2" goto easy mode
if /I "%ST%"=="3" goto setup
if /I "%ST%"=="4" goto exit
:advanced mode
cls
echo.
echo.
echo               ※※※※※※※※※※※※※※※※※※※※※※※※※※
echo               ※                                                ※
echo               ※      "智能ABC输入法 5.0 重封装版"安装向导      ※
echo               ※                                                ※
echo               ※                               ——By 龙梦秋    ※
echo               ※                                                ※
echo               ※          1、备份当前系统的智能输入法           ※
echo               ※                                                ※
echo               ※          2、安装"智能ABC输入法 5.0 重封装版"   ※
echo               ※                                                ※
echo               ※          3、恢复智能ABC为原来版本              ※
echo               ※                                                ※
echo               ※          4、删除已经备份的智能ABC文件          ※
echo               ※                                                ※
echo               ※          5、退出安装向导                       ※
echo               ※                                                ※
echo               ※          6、返回模式选择                       ※
echo               ※                                                ※
echo               ※※※※※※※※※※※※※※※※※※※※※※※※※※
echo.
echo.
echo         ***********  请选择 [1,2,3,4,5,6],并按回车确定执行  ***********
echo.
SET /P ST="当前操作: "
echo.
if /I "%ST%"=="1" goto repack
if /I "%ST%"=="2" goto setup
if /I "%ST%"=="3" goto backup
if /I "%ST%"=="4" goto delete
if /I "%ST%"=="5" goto exit
if /I "%ST%"=="6" goto select mode
:easy mode
cls
echo.
echo.
echo               ※※※※※※※※※※※※※※※※※※※※※※※※※※
echo               ※                                                ※
echo               ※      "智能ABC输入法 5.0 重封装版"安装向导      ※
echo               ※                                                ※
echo               ※                               ——By 龙梦秋    ※
echo               ※                                                ※
echo               ※          1、安装"智能ABC输入法 5.0 重封装版"   ※
echo               ※                                                ※
echo               ※          2、恢复智能ABC为原来版本              ※
echo               ※                                                ※
echo               ※          3、退出安装向导                       ※
echo               ※                                                ※
echo               ※          4、返回模式选择                       ※
echo               ※                                                ※
echo               ※※※※※※※※※※※※※※※※※※※※※※※※※※
echo.
echo.
echo         *************  请选择 [1,2,3,4],并按回车确定执行  *************
echo.
SET /P ST="当前操作: "
echo.
if /I "%ST%"=="1" goto easy setup
if /I "%ST%"=="2" goto backup
if /I "%ST%"=="3" goto exit
if /I "%ST%"=="4" goto select mode
:repack
echo *=======================================================
echo 正在备份当前系统的智能输入法...
echo *=======================================================
copy %windir%\System32\WINABC.CWD %windir%\System32\WINABC.CWD-old    ——在这里输入要执行的操作的命令行,即可在隐藏了具体操作过程的时候进行原先命令行下的操作,而屏幕上只会显示操作结果。如果不想让它显示操作结果,那么可以在命令的最后增加上 >nul ,直接隐藏到后面的提示部分。
copy %windir%\System32\WINABC.IME %windir%\System32\WINABC.IME-old
copy %windir%\System32\WINABC.OVL %windir%\System32\WINABC.OVL-old
copy %windir%\System32\WINABC.hlp %windir%\System32\WINABC.hlp-old
echo *=======================================================
echo 当前系统的智能输入法已经备份完毕!
echo *=======================================================
pause
cls
goto advanced mode                                      ——表示直接转到advanced mode项中
:setup
echo *=======================================================
echo 正在安装"智能ABC输入法 5.0 版"...
echo *=======================================================
copy imetool.exe %windir%\System32\imetool.exe
imetool.exe /del3:WINABC.IME
copy WINABC.CWD %windir%\System32\WINABC.CWD
copy WINABC.IME %windir%\System32\WINABC.IME
copy WINABC.OVL %windir%\System32\WINABC.OVL
copy WINABC.hlp %windir%\System32\WINABC.hlp
%windir%\System32\imetool.exe /install:智能ABC输入法 5.0,WINABC.IME
del %windir%\System32\imetool.exe
echo *=======================================================
echo "智能ABC输入法 5.0 版"安装完毕!
echo 请注销您的系统或者重新启动,以保证输入法的安装无误。
echo *=======================================================
pause
goto exit
:backup
echo *=======================================================
echo 正在恢复智能ABC为原来版本...
echo *=======================================================
imetool.exe /del3:WINABC.IME
DEL %windir%\System32\WINABC.CWD
DEL %windir%\System32\WINABC.IME
DEL %windir%\System32\WINABC.OVL
DEL %windir%\System32\WINABC.hlp
rename %windir%\System32\WINABC.CWD-old %windir%\System32\WINABC.CWD
rename %windir%\System32\WINABC.IME-old %windir%\System32\WINABC.IME
rename %windir%\System32\WINABC.OVL-old %windir%\System32\WINABC.OVL
rename %windir%\System32\WINABC.hlp-old %windir%\System32\WINABC.hlp
copy imetool.exe %windir%\System32\imetool.exe
%windir%\System32\imetool.exe /install:智能ABC输入法,WINABC.IME
del %windir%\System32\imetool.exe
echo *=======================================================
echo 当前系统的智能输入法已经恢复至原先版本!
echo 请注销您的系统或者重新启动,以保证输入法的安装无误。
echo *=======================================================
pause
goto exit
:delete
echo *=======================================================
echo 正在删除已经备份的智能ABC文件...
echo *=======================================================
DEL %windir%\System32\WINABC.CWD-old
DEL %windir%\System32\WINABC.IME-old
DEL %windir%\System32\WINABC.OVL-old
DEL %windir%\System32\WINABC.hlp-old
echo *=======================================================
echo 当前系统的智能输入法备份文件已经删除!
echo *=======================================================
pause
cls
goto advanced mode
:easy setup
echo *=======================================================
echo 正在备份当前系统的智能输入法...
echo *=======================================================
copy %windir%\System32\WINABC.CWD %windir%\System32\WINABC.CWD-old
copy %windir%\System32\WINABC.IME %windir%\System32\WINABC.IME-old
copy %windir%\System32\WINABC.OVL %windir%\System32\WINABC.OVL-old
copy %windir%\System32\WINABC.hlp %windir%\System32\WINABC.hlp-old
echo *=======================================================
echo 当前系统的智能输入法已经备份完毕!
echo *=======================================================
echo *=======================================================
echo 正在安装"智能ABC输入法 5.0 版"...
echo *=======================================================
copy imetool.exe %windir%\System32\imetool.exe
imetool.exe /del3:WINABC.IME
copy WINABC.CWD %windir%\System32\WINABC.CWD
copy WINABC.IME %windir%\System32\WINABC.IME
copy WINABC.OVL %windir%\System32\WINABC.OVL
copy WINABC.hlp %windir%\System32\WINABC.hlp
%windir%\System32\imetool.exe /install:智能ABC输入法 5.0,WINABC.IME
del %windir%\System32\imetool.exe
echo *=======================================================
echo "智能ABC输入法 5.0 版"安装完毕!
echo 请注销您的系统或者重新启动,以保证输入法的安装无误。
echo *=======================================================
pause
goto exit
:exit
echo *=======================================================
echo 请按任意键退出安装向导...
echo *=======================================================
pause                                         ——在这里本来要在最后跟上exit参数让脚本退出,但是因为是脚本的最后部分,直接跟上PAUSE后用户随便一个操作都可以直接退出这个BAT,所以可以省略
仔细解析以上脚本,大家可以看到它的结构非常简单、明了,大致上就是[介绍页面-模式选择-操作过程-退出脚本]这样的结构。而且仔细看可以看到,标题一直到退出的时候都没有进行过更改。所以如果有需要,可以在每步的项目的下面增加标题修改的脚本,这样就可以完全模拟出跟安装程序一样的过程了。
当然,如果需要获得与一般安装程序一样拥有软件说明、授权协议、选择项目等等步骤的话,就需要在这个脚本中进行一定的调整。
有的用户并不想拥有安装选项,那么可以参照以下的脚本来实现单页面安装——
@echo off                                               ——隐藏操作过程,不对下边的操作进行显示
title HashTab 1.0.0.4 BY 龙梦秋                         ——修改当前命令行窗口的标题
echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※   ——显示介绍内容或者其他内容
echo ※                                                                      ※
echo ※                        HashTab 1.0.0.4 RIP版                         ※
echo ※                                       ——BY 龙梦秋                  ※
echo ※                                                                      ※
echo ※       本程序可以在文件的右键上生成一个“文件效验”的扩展项,可以计算 ※
echo ※   出所选文件的MD5、SHA1、CRC32值,速度之快、与系统结合后的操作之简便 ※
echo ※   非常适合不喜欢动用专用软件的人,非常之优秀!                       ※
echo ※       如果替换后无效果,可以先结束一次EXPLORER.EXE进程或者注销一次, ※
echo ※   再次运行该进程或者登录后即可见到使用效果。                         ※
echo ※                                                                      ※
echo ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
echo.
SET /P ST=   请输入 Y [HashTab 1.0.0.4]或 N [HashTab 1.0.0.4],其他键退出:    ——设置用户输入
echo.
if /I "%ST%"=="Y" goto install                       ——指定所选项目转向的执行项目
if /I "%ST%"=="N" goto uninstall
goto exit                                            ——指定如果输入其他的操作则直接转向EXIT项目
:install
copy HashTab.dll %windir%\System32\HashTab.dll       ——由于之前的@echo off关闭了显示,所以这里将会显示文件复制结果
regsvr32 /s %windir%\System32\HashTab.dll            ——注册插件,采用/S参数是为了避免出现注册插件后的确定对话框
exit                                                 ——用EXIT参数退出脚本,在这里将在脚本执行完毕后直接退出脚本,当然也可以考虑在这里结合PAUSE与echo来显示脚本执行后的提示信息。
:uninstall
regsvr32 /u /s %windir%\System32\HashTab.dll
del %windir%\System32\HashTab.dll                    ——这里将只会显示文件的删除结果,可以用/Q参数禁止显示,也可以用/F参数强制把只读属性的文件删除
exit                                                 ——退出脚本
:exit
exit                                                 ——用EXIT参数退出脚本
三、利用第三方工具进行基于脚本的软件的生成
这段时间在网上发现两个很好玩的工具:EXE2BAT 1.0 与 文件转换VBS.VBS
前者会把所有EXE文件经过DEBUG程序编写成BAT脚本,让用户在执行BAT脚本的同时可以还原该脚本中包含的文件,默认会执行还原后的文件,当然我们可以修改生成后的脚本;后者会把所有文件都编写成BAT脚本,执行这个BAT文件的用户将得到原文件,过程不说也很清楚,这里就PASS。
不过有趣的是,两个工具都被杀软识别为“病毒制造机”,这个我实在是不明白。之后看了下软件的工作原理与应用范围,终于知道这两个小东西居然可以协助***进行***,真是不能小看了人们的思考能力啊~~
我这介绍两个工具并不是为了给你们做坏事,仅仅是作为一个参考,如果因为用这两个工具做坏事被抓了,表说你认识偶……
目前已经搞到了EXE2BAT的程序源代码,编译用的好象还是WIN32语言的样子(我看不懂……),以下是源代码——
#include <stdio.h>
#include <string.h>
#define M 65279
char *msg="GOOD_LUCK";
void help(void);
char exe2bat(char *,char *);
int main(int argc,char **argv)
{
  if(argc==1)
  {
    help();
  }
  exe2bat(argv[1],argv[2]);
  return 0;
}
void help()
{
  printf("\nWritten by W.Z.T <==Don't be lazy,Just go ahead==>\n\n");
  printf("exe2bat.exe input.exe output.bat\n");
  exit(0);
}
char exe2bat(char *s_f,char *t_f)
{
  FILE *s_fp,*t_fp;
  char *s_fe=s_f;
  char *t_fe=t_f;
  char c;
  char ch;
  long lenth;
  int i=1,k=256;
  if((s_fp=fopen(s_fe,"rb"))==NULL)
  {
    printf("Can't open the file %s.\n",s_fe);
    exit(0);
  }
  if((t_fp=fopen(t_fe,"w+"))==NULL)
  {
    printf("Can't create the file %s.\n",t_fe);
    exit(0);
  }
  fseek(s_fp,0,SEEK_END);
  lenth=ftell(s_fp);
  fseek(s_fp,0,SEEK_SET);
  printf("%ld,%x\n",lenth,lenth);
  if(lenth>=M)
  {
    printf("The exe file's lenth must be <= M-1\n");
    exit(0);
  }
  fputs("@echo e ",t_fp);
  fprintf(t_fp,"%04x ",k);
  while(!feof(s_fp))
  {
    k++;
    c = fgetc(s_fp);
    if(( unsigned char ) c<= ( unsigned char )15)
        fprintf(t_fp,"0",c);
    fprintf(t_fp,"%x ",(unsigned char)c);
    if(i%16==0)
    {
        fputs(">>sgl\n",t_fp);
        fputs("@echo e ",t_fp);
        fprintf(t_fp,"%04x ",k);
    }
    i++;
  }
  if(lenth%16!=0)
    fputs(">>%tmp%\\sgl\n",t_fp);
  fputs("@echo rcx>>sgl\n",t_fp);
  fprintf(t_fp,"@echo %x>>sgl\n",lenth,t_fp);
  fputs("@echo n tthacker>>sgl\n",t_fp);
  fputs("@echo w>>sgl\n",t_fp);
  fputs("@echo q>>sgl\n",t_fp);
  fputs("@debug<sgl>nul\n",t_fp);
  fputs("@del sgl\n",t_fp);
  fputs("@ren tthacker ",t_fp);
  fprintf(t_fp,"%s>>sgl\n",s_fe);
  fputs("@",t_fp);
  fprintf(t_fp,"%s",s_fe);
  fclose(s_fp);
  fclose(t_fp);
  puts(msg);
  return 0;
}
文件转换VBS的源代码如下(大家可以复制后保存成VBS文件,然后把任意文件拉到这个VBS文件上,将在目录下多出一个BAT文件,那个就是你的文件的“BAT版”了)——
fp=wscript.arguments(0)
fn=right(fp,len(fp)-instrrev(fp,"\"))
with createobject("adodb.stream")
.type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str)
end with
sll=sl mod 65536:slh=sl\65536
with createobject("scripting.filesystemobject").opentextfile(fp&".bat",2,true)
.write "@echo str="""
for i=1 to sl
bt=ascb(midb(str,i,1))
if bt<16 then .write "0"
.write hex(bt)
if i mod 128=0 then .write """_>>debug.vbs"+vbcrlf+"@echo +"""
next
.writeline """>>debug.vbs"+vbcrlf+"@echo with wscript.stdout:r=vbcrlf"_
+":for i=1 to len(str) step 48:.write ""e""+hex(256+(i-1)/2)"_
+":for j=i to i+46 step 2:.write "" ""+mid(str,j,2):next:.write r:next>>debug.vbs"
.writeline "@echo .write ""rbx""+r+"""+hex(slh)+"""+r+""rcx""+r+"""+hex(sll)_
+"""+r+""n debug.tmp""+r+""w""+r+""q""+r:end with"_
+">>debug.vbs&&cscript. //nologo debug.vbs|debug.exe>nul&&ren debug.tmp """&fn&"""&del debug.vbs"
end with
由于我现在写的是BAT、CMD批处理脚本的应用,所以在这里我们还是着重讲一下EXE2BAT。
我这里有一段由EXE2BAT生成的BAT脚本——
@echo e 100 D5 E2 BE CD CA C7 D7 AA BB BB BA F3 B5 C4 BD E1 >>tmp11
@echo e 110 B9 FB A3 AC B4 F3 BC D2 BB B9 C2 FA D2 E2 B0 C9 >>tmp11
@echo e 120 A3 BF 48 4F 48 4F A1 AB A1 AB 0D 0A 20 20 20 20 >>tmp11
@echo e 130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 >>tmp11
@echo e 140 20 20 20 20 20 20 20 20 20 20 20 A1 AA A1 AA 42 >>tmp11
@echo e 150 59 20 C1 FA C3 CE C7 EF >>tmp11
@echo rcx>>tmp11
@echo 58>>tmp11
@echo n tmp1>>tmp11
@echo w>>tmp11
@echo q>>tmp11
@debug<tmp11>nul
@Copy /b /y tmp1 readme.txt
@start readme.txt
@del tmp*
大家将上面的代码复制后保存成一个.BAT文件后执行,看看你看到了什么?
从这里大家可以看出,EXE2BAT的操作原理是先将文件经过DEBUG程序进行编码,然后分解成字符保存。但是由于DEBUG不支持中文,所以如果转换的文件的文件名不是E文,转换后的文件名将会是乱码。
另外,为了一些人着想,我将不会提供这两个程序与我编写的BAT版EXE2BAT。如果有需要,可以自己研究这些软件的工作原理,这样还可以增加自己的经验,对不对?
最后,吃饭……