BAT和CMD脚本的编写与实际应用全解

BAT和CMD脚本的编写与实际应用全解
BAT和CMD脚本的编写与实际应用全解

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 正在删除已经备份的智能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 请按任意键退出安装向导...

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

#include

#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("@debugnul\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

@debugnul

@Copy /b /y tmp1 readme.txt

@start readme.txt

@del tmp*

大家将上面的代码复制后保存成一个.BAT文件后执行,看看你看到了什么?

从这里大家可以看出,EXE2BAT的操作原理是先将文件经过DEBUG程序进行编码,然后分解成字符保存。但是由于DEBUG不支持中文,所以如果转换的文件的文件名不是E文,转换后的文件名将会是乱码。

另外,为了一些人着想,我将不会提供这两个程序与我编写的BAT版EXE2BAT。如果有需要,可以自己研究这些软件的工作原理,这样还可以增加自己的经验,对不对?

DOS批处理脚本

DOS批处理脚本 这是一篇技术教程,真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前。. 先概述一下批处理是个什么东东。批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜鸟,当然就更不用说了;但我想总结出一个“比较合适的”,而且我也相信自己可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你用这个东东可以干什么事情。或许你会因为这篇文章而“无条件爱上批处理”,那么我的目的就达到了----我就是要让你爱上它,我就这么拽,你能怎么着??真的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的! 按照我的理解,批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。 OK,never claver and get to business(闲话少说言归正传)。批处理,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就ok了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!)。再说句“闲话”:要学好批处理,DOS基础一定要牢!当然脑子灵活也是很重要的一方面。 例一、先给出一个最easy的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为name.bat然后执行(以后文中只给出代码,保存和执行方式类似): ping https://www.360docs.net/doc/2a10277894.html, > a.txt ping https://www.360docs.net/doc/2a10277894.html, >> a.txt ping https://www.360docs.net/doc/2a10277894.html, >> a.txt ping https://www.360docs.net/doc/2a10277894.html, >> a.txt ping https://www.360docs.net/doc/2a10277894.html, >> a.txt

DSP的CMD文件详解(整理版)

DSP的CMD文件详解 CMD是用来分配ROM和RAM空间用的,告诉链接程序怎样计算地址和分配空间。所以不同的芯片就有不同大小的ROM和RAM,存放用户程序的地方也不尽相同。所以要根据芯片进行修改,分为 MEMORY 和SECTIONS两个部分。 MEMORY { PAGE 0 .......... PAGE 1......... } SECTIONS { .vectors ................. .reset ................. ................ } MEMORY是用来指定芯片的ROM和RAM的大小和划分出几个区间。PAGE 0对应ROM, PAGE 1对应RAM。PAGE 里包含的区间名字与其后面的参数反映了该区间的起始地址和长度。 SECTIONS:(在程序里添加下面的段名,如.vectors。用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“>”符号后的空间名字所在的地方。)

{ .vectors : { } > VECS PAGE 0 .reset : { } > VECS PAGE 0 ............ ............ .......... } eg: MEMORY { PAGE 0: VECS :origin = 00000h, length = 00040h LOW :origin = 00040h, length = 03FC0h SARAM :origin = 04000h, length = 00800h B0 :origin = 0FF00h, length = 00100h PAGE 1: B0 :origin = 00200h, length = 00100h B1 :origin = 00300h, length = 00100h B2 :origin = 00060h, length = 00020h SARAM :origin = 08000h, length = 00800h }

初学CMD文件

一、有关段(sections)的知识 汇编器和链接器产生的可被DSP装置执行的目标程序,这些目标文件格式被称为通用目标文件格式(COFF)。COFF使得模块化编程更容易,它鼓励用户在写汇编语言程序时根据代码块和数据块的方式来思考如何编写程序,这些“模块(block)”就是“段(sections)”。 目标文件的最小单位称为段,段是占据一个连续空间的代码块或数据块,与其他段一起在存储器映射图内。目标文件的各个段是分开的,有特色的。 一个COFF目标文件总是包含3个默认段: (1).text段,通常包含可执行代码; (2).data段,通常含有初始化数据; (3).bss段,通常为未初始化变量预留的空间。 自定义的段: (1)由汇编伪指令.sect创建的段 (2)由汇编伪指令.usect创建的段 其中,.text、.data、由.sect创建的段属于初始化段(含有数据和代码);.bss、由.usect创建的段属于未初始化段(为未初始化的数据在存储器映像图内预留空间)。 注:不能用不同的伪指令定义相同的段。 二、由汇编器产生的COFF格式的OBJ文件中的段作为构造块,当有多个文件进行链接时,链接器会将输入段结合在一起产生可执行的COFF输出模块,然后链接器为各输出段选择存储器地址,这就是CMD文件。 CMD文件是用来分配ROM和RAM的,告诉链接程序怎么计算地址和分配空间。它包括三个部分: (1)输入、输出定义:.obj文件——链接器要链接的目标文件;.lib文件——链接器要链接的库文件;.map文件——链接器生成的交叉索引文件;.out文件——链接器生成的可执行代码。这部分可通过CCS中的Build Option菜单进行设置。 (2)MEMORY命令:描述系统实际的硬件资源,即指定芯片的ROM和RAM的大小和并划分出的几个区间。默认的,PAGE0对应ROM(程序存储区),PAGE1对应RAM(数据存储区),例定义一个VECS存储区域,具有R和W属性,填充常数ffffh: MEMORY { PAGE 0:VECS(RW):origin=0000h,length=00ffh,f=ffffh; } 注: 1)PAGE就是对一个存储空间进行标记,最多可以有255个PAGE,每个PAGE代表一个完全独立的地址空间,不同的PAGE上的存储器区间可以取相同的名字; 2)Attr:可选项,规定存储器属性: ①R,可以对存储器执行读操作; ②W,可以对存储器执行写操作; ③X,命名的存储器能包含可执行的代码; ④I,可以对存储器进行初始化; 3)origin:起始地址,可写成org或o;length:长度,可写成len或l。 4)fill:为存储区域指定的填充字符,可选项。填充值用来填充那些未分配给段的存储器区域。(3)SECTIONS命令:描述“段”如何定位。例如,在程序里定义段名.vectors,将引用字段名“.vectors”的程序或数据放到VECS(如上所示,VECS是ROM空间00h至ffh的地方):SECTIONS

dos批处理start命令的参数bat脚本运行完毕后自动关闭窗口

Dos批处理Start命令的参数,bat脚本运行完毕后自动关闭 窗口 Dos批处理命令bat文件运行完以后自动关闭dos窗口的方法: 很多人运行完批处理命令发现dos窗口不能自动关闭,那是因为你在bat文件中直接执行了需要运行的某些外部程序,如果希望dos窗口自动关闭,那么,你可以使用start命令 来执行该外部程序,而不是直接写上一行来执行。例子说明: view plain copy start "CS" "c:\programme files\cs\half-life.exe" "/m" 上面只是一个使用格式的例子,即start "给窗口随便命个名" "带完整路径的程序程序" "程序需 要传递的参数串(可省略)" 当然,在你的批处理文件末尾,最好不要忘记加上一行:EXIT。请问Start命令中的/w参数怎么用? 我知道/w的大概意思是不回到提示符转到其它的程序。我想执行一条命令:即运行完DIR后再执行其它命令START dir cd c:\ /w。这条命令只能执行到DIR便不再执行下去了,是我的命令写错了吗? 另请问在START命令中为什么不能执行内部命令,我的DIR 是做了一条批处理的。

【参考回复】 请注意,Start会开启新窗口来运行程序,如果新窗口不正常退出,你的批处理就不能正常执行下去,所以如果你要用Start启用dir命令,一定要将dir命令写入一个批处理文件中,然后在批处理文件的最后面加上exit命令。正确的用法应该是这样: 1、建立使用dir命令的批处理如:test.bat view plain copy @echo off dir c:\ rem ....其它操作 exit 2、在另一个批处理中调用该批处理: view plain copy ... start /wait call test.bat ... 其实在这里就没有必要使用start /wait了,因为使用了call命令后,test.bat已经控制了流程,一定是在call结束后才会继续下一步的操作。 Start语法:启动另一个窗口运行指定的程序或命令。 view plain copy START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]

实用批处理(bat)教程

目录 第一章批处理基础 第一节常用批处理内部命令简介 1、REM 和:: 2、ECHO 和@ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和: 9、FIND 10、START 11、assoc 和ftype 12、pushd 和popd 13、CALL 14、shift 15、IF 16、setlocal 与变量延迟(ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION 启动或停用延缓环境变量扩展名。) 17、ATTRIB显示或更改文件属性 第二节常用特殊符号 1、@命令行回显屏蔽符 2、%批处理变量引导符 3、> 重定向符 4、>>重定向符 5、<、>、<& 重定向符 6、|命令管道符 7、^转义字符 8、组合命令 9、& 组合命令 10、||组合命令 11、\"\"字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号 第二章FOR命令详解 一、基本格式 二、参数/d仅为目录 三、参数/R递归(文件名) 四、参数/L迭代数值范围 五、参数/F迭代及文件解析 第三章FOR命令中的变量

一、~I- 删除任何引号(\"),扩展%I 二、%~fI- 将%I 扩展到一个完全合格的路径名 三、%~dI- 仅将%I 扩展到一个驱动器号 四、%~pI- 仅将%I 扩展到一个路径 五、%~nI- 仅将%I 扩展到一个文件名 六、%~xI- 仅将%I 扩展到一个文件扩展名 七、%~sI- 扩展的路径只含有短名 八、%~aI- 将%I 扩展到文件的文件属性 九、%~tI- 将%I 扩展到文件的日期/时间 十、%~zI- 将%I 扩展到文件的大小 十一、%~$PATH:I 第四章批处理中的变量 一、系统变量 二、自定义变量 第五章set命令详解 一、用set命令设置自定义变量 二、用set命令进行简单计算 三、用set命令进行字符串处理 1、字符串替换 2、字符串截取 第六章if命令讲解 第一种用法:IF [NOT] ERRORLEVEL number command 第二种用法:IF [NOT] string1==string2 command 第三种用法:IF [NOT] EXIST filename command 第四种用法:IF增强的用法 第七章DOS编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp命令实现自动下载 六、用7-ZIP实现命令行压缩和解压功能 七、调用VBScript程序 八、将批处理转化为可执行文件 九、时间延迟 1、利用ping命令延时 2、利用for命令延时 3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内 4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内 十、模拟进度条 十一、特殊字符的输入及应用 十二、随机数(%random%)的应用技巧 十三、变量嵌套与命令嵌套 1、更正了所有的错别字,适当排版,增加条理性。

最全批处理命令学习资料【完美版】

一:批处理文件 批处理文件是扩展名为·bat或·cmd的文本文件,包含一条或多条命令,由DOS或Windows系统内嵌的命令解释器来解释运行。 批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。 二:常用命令: 1.echo 和@: @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo off #从本行开始关闭回显,一般批处理第一行都是这个 echo on #从下一行开始打开回显 echo #显示当前是echo off 状态还是echo on 状态 echo. #输出一个”回车换行”,空白行 #(同echo, echo; echo+ echo[ echo] echo/ echo") 2.errorlevel echo %errorlevel% 每个命令运行结束,可以用这个命令行格式查看返回码 默认值为0,一般命令执行出错会设errorlevel 为1 目录操作类命令: 3.dir 显示磁盘目录命令 dir #显示当前目录中的文件和子目录 dir /a #显示当前目录中的文件和子目录,包括隐藏文件和系统文件

dir c: /a:d #显示C 盘当前目录中的目录 dir c: /a:-d #显示C 盘根目录中的文件 dir c:" /b/p #/b只显示文件名,/p分页显示 dir c:" /b/p #/w不显示详细信息 dir *.exe /s #显示当前目录和子目录里所有的.exe文件 4.以树形显示当前路径文件夹结构 tree /f #显示每个文件夹中文件的名字。 5.md 建立子目录 md d:"a"b"c #如果d:"a 不存在,将会自动创建中级目录 #如果命令扩展名被停用,则需要键入mkdir "a"b"c 6.cd 改变当前目录(进入) cd \ #进入根目录 cd #显示当前目录 cd /d d:\sdk #可以同时更改盘符和目录 cd .. #返回上一级目录 7.rd 删除子目录命令 rd abc #删除当前目录里的abc 子目录,要求为空目录rd /s/q d:\temp #删除d:"temp 文件夹及其子文件夹和文件/q安静模式 磁盘操作类命令: 8.format 磁盘格式化命令 9.chkdsk 检查磁盘当前状态命令

使用bat批处理脚本自动设置IP和IE代理

使用bat批处理脚本自动设置IP和IE代理 在不同的网络环境间切换时需要手动修改IP和IE代理设置,较为繁琐,可以通过编写相应的bat批处理脚本自动完成配置,做到一键切换。以下是一个示例: [plain]view plaincopy 1.@echo off 2. 3.::echo set ip... 4.::netsh interface ip set address name="本地连接 " source=static addr=xxx.xxx.xxx.xxx mask=xxx.xxx.xxx.xxx 5. 6.::echo set gateway.... 7.::netsh interface ip set address name="本地连接 " source=static gateway=xxx.xxx.xxx.xxx gwmetric=1 8. 9.echo set IE proxy: xxx.xxx.xxx.xxx:8080 10.reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" / v ProxyEnable /t REG_DWORD /d 1 /f 11.reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" / v ProxyServer /d "xxx.xxx.xxx.xxx:8080" /f 12.::跳过本地地址的代理服务器 13.reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" / v ProxyOverride /t REG_SZ /d "" /f 14. 15.echo flash... 16.ipconfig /flushdns 其中xxx.xxx.xxx.xxx为对应属性的IP。如第11行中的"xxx.xxx.xxx.xxx:8080"为目标代理服务器的IP和端口(8080),两者都可以根据自己的环境修改

非常经典BAT知识教程

手把手教你写批处理(willsort题注版) Climbing兄可谓用心良苦,受其感昭,略紧微薄之力;原文内容一字未易,仅于每段之下另加题注,其文大多非为纠错,多是年来体会,或偶得,或渐悟,未免偏颇;又加近来俗事渐多,闲情愈少,心浮气燥,一蹴而就。义理悖逆,敬请斧正;措辞不当,尚请莫怪。 另,建议Climbing兄取文不用拘泥于国内,此类技术文章,内外水平相差极大;与其修正国内只言片语,不如翻译国外优秀著述。 -------------------------------------------------------- 标题:手把手教你写批处理-批处理的介绍 作者:佚名 编者:Climbing 出处:中国DOS联盟之联合DOS论坛 题注:willsort 日期:2004-09-21 -------------------------------------------------------- 批处理的介绍 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 ====willsort编注===================================================== .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch,unix shell,awk, basic,perl等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。====================================================================== == 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 ====willsort题注==================================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越“边缘化”。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ====================================================================== ==

BAT和CMD脚本的编写与实际应用全解

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 将一个软盘的内容复制到另一个软盘。

bat批处理文件

批处理文件bat 语法备忘 需要用到的脚本语言还真是多,从系统管理、数据管理、程序开发。脚本语言的影子真是无处不在,孱弱的windows上的可怜的bat也是不得不时常备忘得东东。现在渐渐习惯了把一些零碎的需要整理的文档放在writely上面,即方便自己移动处理文档,还可以跟他们协作或者讨论之用。而且能支持word文档的直接导入,之前用的时候稳定性不很理想,有发生过几次文件不能保存或者保存了无效的问题,发信给他们管理员,倒是很快得到了答复和解决。最近用的时候才发现出现了下列的文字。Writely is now part of Google! 看来有钱就是好啊,想买啥就买啥。估计用不了多久,google也会变成跟ms一样被骂得对象了。没办法,有钱的,横看竖看都是一副欠扁的样。好了,切入正题,把google借来的文章先放着自己备用!:) 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 ==== 注======================================= .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。 =================================== 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 ==== 注=================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ======================== 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 ==== 注==================

CMD文件的编写

CMD文件的原理玄德(网名)于2009 年3 月 一、前言 开发TI 公司的DSP 芯片,肯定要编写或者修改CMD 文件,这是在单片机开发中没有碰到过的新事物,也是学习DSP的难点。面对里面种类繁多、名称各异、来历不明、作用不清、功能千差万别的存储器、区域和变量、寄存器,初学者往往都会一头雾水。甚至很多人已经把项目成功地完成了,对CMD文件仍然是一知半解。笔者也经历了极度困惑的过程,曾经大量地看书,下载资料,分析所能搜集到的CMD源文件。可惜的是,无论是TI 公司的原始文档,还是网上的资料,或者BBS的帖子,都没有透彻地说明CMD 文件的原理和使用,只说“然” ,要靠自己去体会“所以然” ,去“悟” 。终于有一天,我悟到了,也许只是“一些” 。现在,我把自己的“一些”写下来。我将细致而通俗地说明CMD 文件的原理,给您“鱼” ,更给您“渔” ,一步步地引导象我当初一样的初学者。我将以TI 的2407 为对象展开说明,对于TI 公司其他型号、其他系列的DSP,道理是完全相同的。用时下学术界最最最流行的语式,叫做“基于2407” ——这个词起源于英文的“based on” ,或“something based” ,被我们大量地引用,以至于令人反胃了——我们美妙、绚烂的语言,现在只剩下“基于”了。笔者水平有限,但保证会用心去写,您会看到很多别处没有的思路和信息,相信会基本打通初学者的任督二脉。本文适用于那些有单片机的开发基础、刚开始学习DSP 的初学者。如果你还不知道程序空间,数据空间这些名词,可能就比较困难了。 二、CMD文件的起源 在DSP系统中,存在大量的、各式各样的存储器,CMD文件所描述的,就是开发工程师对物理存储器的管理、分配和使用情况。有必要先复习一下存储器的知识。目前的物理存储器,种类繁多,原理、功能、参数、速度各不相同,有PROM、EPROM、EEPROM、FLASH、NAND FLASH、NOR FLASH等(ROM 类),还有SRAM、DRAM、SDRAM、DDR、DDR2、FIFO 等(RAM 类)。无论多么复杂,从断电后保存数据的能力来看,只有两类:断电后仍然能够保存数据的叫做 非易失性存储器(non-volatile,本文称为ROM 类),数据丢失的叫做易失性存储器(本文称为RAM 类);ROM 类的芯片都是非易失性的,而RAM 类都是

bat基本应用

.bat文件的基本应用 bat是dos下的批处理文件。 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好像我们 在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具来创建和修改批处理文件。 ==== 注 =================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘 于windows系统这个新型解释平台的涉入,使得批处理的应用越来越"边缘化"。所以我们讨论的批 处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 ======================== 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行 的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力 与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 ==== 注 ================== 批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同, 就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译 连接后的exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程 序的可执行性,这些称谓的界限是比较模糊的。 =========================== 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或 者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。 ==== 注 ===== 纯以dos系统而言,可执行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),https://www.360docs.net/doc/2a10277894.html,中的内部命令(根据内存的环境随时进驻 内存),以com为扩展名的可执行程序(由https://www.360docs.net/doc/2a10277894.html, 直接载入内存),以exe位扩展名的 可执行程序(由https://www.360docs.net/doc/2a10277894.html, 重定位后载入内存),以bat位扩展名的批处理程序(由https://www.360docs.net/doc/2a10277894.html, 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存) ============ 第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批 处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文

CMD命令文件详解

CMD 命令文件解析 CMD 文件的专业名称叫做链接器配置文件,用以存放链接器的配置信息,简称命令文件。其中比较关键的就是MEMORY、SECTIONS两个伪指令的使用。MEMORY和SECTIONS 的相关语句必须使用大写字符。MEMORY是用以配置目标存储器的,而SECTIONS是用以指定段的存放位置的。 1 存储空间的配置 DSP存储器分为三个独立选择的空间:程序空间、数据空间和I/O空间,其中程序存储器存放待执行的指令和执行中所用的系数(常数),可使用片内或片外的RAM、ROM、EPROM 等构成;数据存储器存放指令执行中产生的数据,可使用片内或片外的RAM和ROM来构成。I/O存储器存放与映像外围接口相关的数据,也可以作为附加的数据存储空间来使用。下表是TMS320F28335的存储空间分布: TMS320F28335的存储空间分布:

2 BootRom BootRom 是位于存储器地址0x3F E000 ~ 0x3F FFFF处的8K * 16位存储区域。并利用M0区域的0x0002 ~ 0x004E作为其Boot程序的堆栈和ebss区。其内存映射如下:

3 Cmd 文件的分配方法 TI公司新的汇编器和链接器创建的目标文件采用一种COFF(通用目标文件格式),该目标文件格式更利于模块化编程,为管理代码段和目标系统存储器提供了强有力和灵活的编程方法。用户可以通过编写链接命令文件(cmd文件)将链接信息放在一个文件中,以便在多次使用同样的链接信息时调用。在命令文件中使用两个十分有用的伪指令MEMORY 和SECTIONS,来指定实际应用中的存储器结构和进行地址的映射。M EMORY用来指定目标存储器结构,MEMORY下可以通过PAGE选项配置地址空间。链接器把每一页都当作一个独立的存储空间,通常情况下,PAGE0 代表程序存储器用来存放程序,PAGE1 代表数据存储器,用来存放数据。由编译器生成的可重定位的代码和数据块叫做“SECTIONS”(段),SECTIONS 用来控制段的构成与地址分配。对于不同的系统配置,“SECTION”的分配方式也不相同,链接器通过“SECTIONS”来控制地址的分配,所以“SECTIONS”的定义及分配就成了配置.cmd 文件的重要环节。以下是对“SECTIONS”的定义及分配的详细介绍。 4 SECTIONS介绍 SECTIONS可分为两个基本的部分:

windows批处理文件(.bat&)

bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由 外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是 由专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。 所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都 是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序 仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全不同。 =================================== 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部 分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批 处理文件。 ==== 注 =================== 批处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普 通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的 应用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行 环境中,否则很多观念和设定都需要做比较大的变动。 ======================== 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分 有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括 内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 ==== 注 ================== 批处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为 c语言文件或者c语言源代码,但只有编译连接后的exe文件才可以称之为c 语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。 =========================== 第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所 在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个

如何编写bat文件

如何编写bat文件 第一节:(主要是一些界面形式功能的实现以及初始化) 1.“@echo off”--我们所写的BAT一开始一般都有这一句,这一句的作用是:使所有的命令响应隐藏。“@”--本行命令不回显 。(本来如果你用echo off就可以了,但是还是能够看到echo off这条命令在CMD下, 影响美观) 2.“color 1e”--设置默认的控制台前景和背景颜色。当前我设为蓝底黄字,具体颜色请在CMD下用“color /?”查询。 --这里又提到了这个参数“/?”,一般CMD下命令后加“/?”就会显示这条命令的帮助。 3.“rem”--注释作用,批处理执行过程中前不执行它,rem 后的字符只作注释作用。 4.“title”--设置命令提示窗口的窗口标题。默认为“cmd”。改成自己喜欢的多有个性,嘿嘿。 5.“cls”--不多说,清屏命令。主要是怕前面的一些空白或字符出现影响美观。 6.“set”--这个命令的作用很大,请用“set /?”查询具体使用方法。本例“settopip=172.16.”是 将一个名为“topip”的变量值设为“172.16.”。注意CMD下变量的设置不区别数字与字符, 能够自动根据提供的值调整。下行“settheip=0.0”同理。 7.“echo .”--在新行中显示一个“.”。echo命令能显示其后的comment。这里提几个有趣实用的用法--“echo.”,注意与前面的不同,“echo”与“.”间无空格。这条命令如同一个回车,在 新行不显示任何信息并换行。“echo ”,实现响铃的提示音。后面一个字符的输入方法是 在CMD下用“ctrl+G”,而这个字符得到的方法是CMD下用命令“echo "ctrl+G" >ex.txt”, 存入ex.txt文件,再从那里提取出来的。嘿嘿,如果你懒得做,就copy我在上面提供的 字符喽。 8.“if”--这条命令也会经常用到,请用“if /?”学习更多信息。本例“if not exist scanipc.exe (echo 文件错误!……)”,实现功能:当同级目录下不存在“scanipc.exe”时,提示“文件错误!……”。否则不提示。“if not exist filename”在批处理中使用比较多些。 9.“:top”,设置一个标志点,标志名为“top”。“:”的作用就是设置标志。网上有文章说“使用"::comment"作为注释比"rem comment"执行效率更高。”我相信,这里也建议大家,如果BAT中注释较多时,请使用“::comment”设置。 10.“set /p pno=”--设置一个变量,并接受用户输入。BAT不需要预先声明变量,只在需要 时设置。参数“/p”:将变量数值设成用户输入的一行输入。 11.“if %pno% gtr 9 gotoonerrorspno”--检验用户输入值是否大于9,是,则转到一个指定标 志点。这里注意BAT中变量引用时要在前后加“%”,但在if语句中可有可无,具体应用 大家多写几遍就有体会。 12.“goto label”--无条件跳转到指定标志位并向后执行。BAT好像只有这么一个跳转语句了,作用不用我说,用了就知道。注意不要构成死循环。

批处理常用命令及用法大全

批处理常用命令及用法大全 说明:本文来自网络,由youxi01整理,由liqiochi修改完善。 阅读本文需要一定的dos基础概念,象:盘符、文件、目录(文件夹)、子目录、根目录、当前目录每个命令的完整说明请加/? 参数参考微软的帮助文档可以看到,在/? 帮助里,"命令扩展名"一词会经常出现"命令扩展名"是指相对于win98的dos版本而言,每个命令新增的功能 命令测试环境win2000proSP4win98的命令功能太少,就不作研究了 注:如果对某一命令还不是很熟悉,可以在命令行窗口下输入:命令名/?的方式来获得帮助。 例如:对dir命令的应用不熟悉,可以在命令行窗口下输入:dir /? 参数只列举常用参数。 注:errorlevel,msd,undelete在win7下不存在。 目录 1.echo 和@回显控制命令 (3) 2.shutdown 关机 (3) 3.dir显示目录中的文件和子目录列表 (4) 4.cd更改当前目录 (4) 5.md创建目录 (5) 6.rd删除目录 (5) 7.del删除文件 (5) 8.ren文件和文件夹重命名 (6) 9.cls清屏 (6) 10.type显示文件内容 (6) 11.copy拷贝文件(只能复制文件) (6) 12.title设置cmd窗口的标题 (7) 13.ver显示系统版本 (7) https://www.360docs.net/doc/2a10277894.html,bel 和vol设置卷标 (7) 15.pause暂停命令 (7) 16.rem 和::注释命令 (7) 17.date 和time日期和时间 (8) 18.goto 和:跳转命令 (8) 19.find (外部命令)查找命令 (8) 20.more (外部命令)逐屏显示 (9) 21.tree显示目录结构 (9) 22.&顺序执行多条命令,而不管命令是否执行成功 (9) 23.&&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令 . 9 24.||顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令 (9) 25.|管道命令,前一个命令的执行结果输出到后一个命令 (10)

第4课 2812的片内资源、存储器映射以及CMD文件的编写

第4课F2812片内资源、存储器映射以及CMD文件的编写 作者:顾卫钢谢芬(HELLODSP资深会员) 从今天开始,我们的课程终于进入F2812的核心了,呵呵。在今天的课程中,我们将带领大家一起学习2812的片内资源,初步了解它究竟有哪些本事,能拿来干些什么,然后一起了解2812存储器的结构,统一编址的方式、存储器映射关系,并重点分析CMD文件,以期望消除大家对CMD文件的迷惑,在自己编写程序的时候会修改CMD文件中的部分内容,从而满足自己设计时的需求。 1.F2812的片内资源 我们知道,TMS320F2812是32位的定点DSP,它既具有数字信号的处理能力,又具有强大的事件管理能力和嵌入式控制功能,特别适合用于需要大批量数据处理的测控领域,例如自动化控制、电力电子技术、智能化仪表、电机伺服控制。下面是F2812的内部资源框图。 图1 TMS320F2812内部资源框图 2812采用了高性能的静态CMOS技术,时钟频率可达150MHZ(6.67ns),其核心电压为1.8V,I/O口电压3.3V,Flash编程电压也为3.3V,所以我们在设计2812电源部分的时候,需要将常用的5V电压转换成1.8V和3.3V的电压之后,才能供给2812。具体的设计我们将会在以后的硬件设计内容里进行探讨。

让我们一起来看看图1,最左边的A(18-0)和D(15-0)是表示2812外扩存储器的能力,2812外扩的存储空间最大是219*16 bit,就是说最多只能扩512K个存储单元,每一个存储单元的位数为16位。 从图中我们也可以看到,F2812支持JTAG边界扫描(Boundary Scan),这也是为什么我们的仿真器都是采用JTAG口的原因了,在这里,提醒大家一点的就是,仿真的时候,JTAG口的方向不能插反,如果插反的话会将仿真器烧坏。我们所使用的14针JTAG口的第6针是空脚,所以一般情况下仿真器JTAG线的第6针是填针的,同时在板子上的第6脚是拔空的,这样可以防止您插反JTAG口,以避免不必要的损失。这一点,在我们自己设计板子的时候尤其需要注意。 在图1中,我们可以看到连接整个芯片各个模块的两条黑色的线,从英文单词上我们可以看到一条是Program Bus,另一条是Data Bus,就是程序总线和数据总线。这个概念讲的还是比较笼统的,下面我们详细分析这两天总线,并结合图中总线上的各个箭头来理解这些概念。 我们首先需要知道2812的存储器空间被分成了2块,一块是程序空间,一块是数据空间,而无论是那一块的内容,我们都需要借助于两种总线来进行传送相关的内容——地址总线和数据总线,用地址总线来传送存储单元的地址,而用数据总线来传送存储单元内的内容。2812的存储器接口具有3条地址总线和3条数据总线。了解了这些基本的内容之后我们接下来一一讲述2812内部的总线结构。 先来讲地址总线,顾名思义,这类总线的作用就是来传送存储单元的地址的。 1.PAB (Program Address Bus)程序地址总线,它是一个22位的总线,用于传送程序空间的读写地址。 程序在运行的时候,假如执行到了某一个指令,那么需要去找到这段代码的地址,就是用PAB来传送。 2.DRAB(Data-Read Address Bus)数据读地址总线,它是个32位的总线,用于传送数据空间的读地址。 假如要读取数据空间某一个单元的内容,那么这个单元的地址就是通过DRAB来传送。 3.DWAB(Data-Write Address Bus)数据写地址总线,它也是个32位的总线,用于传送数据空间的写地 址。类似的,如果我要对数据空间的某一个单元进行写操作,那么这个单元的地址就是通过DWAB来传送。 了解了地址总线后,我们再来看看数据总线,这类总线传送的就是数据了,也就是各个存储单元内的具体内容了。 1.PRDW(Program-Read Data Bus)程序读数据总线,它是一个32位的总线,用于传送读取程序空间时 的指令或者数据。我们在执行代码的时候,首先是通过PAB传送并找到了存放该指令的存储单元,但是这个存储单元下的具体内容就要由我们的PRDW来传送了。 2.DRDB(Data-Read Data Bus)数据读数据总线,它是一个32位的总线,在读取数据空间时用来传送数 据。我们在进行读操作时,先通过DRAB总线确定了需要进行读操作的数据单元的地址,接下来传送这个数据单元下面的具体内容时就需要DRDB了。 3.DWDB(Data/Program-Write Data Bus)数据写数据总线,它是一个32位的总线,在进行写操作时,

相关文档
最新文档