正文

讲课内容:批处理2006-11-27 20:16:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/zean/20942.html

分享到:

 

授课时间:2005年12月4日


批处理:批处理有也有些人称为批处理脚本,也有说成为批处理程序的。英文是batch 。我们现在的批处理文件后缀就是取其单词的前三个字母 *.bat,或者 *.cmd 。 一行可视为一个命令。每行命令里可以以包含多条子命令。从第一行开始到最后一行结束。(整体是这样的,如果中间加如如if ;for之类的循环  条件之类的除外)。基于批处理的平台是DOS系统。全名是磁盘操作系统disk operation system 。不过批处理(DOS命令)在入侵过程中用处还是很多的,DOS系统有一个好处: 速度快,不留痕迹。而且用多了会觉得比WIN下面的鼠标点的要爽。

  现在进入批处理的正题。

.bat跟.cmd后缀运行的效果都是一样的.两种不同的后缀而已. 命令行在XP (NT之上的都是叫cmd调出.在win98类的系统都是以command调出. 现在谈下关系批处理的功能. 在入侵中,在实际操作中都有非常重要的作用. 先说下在入侵中...相信大家都见过这么一句代码:net use \ip\ipc$ "password" /u:"administrator"。如果把他转化成批量管理,或者破解的话,用批处理命令来解决怎么办? 下面我们将讲到这个. 还有实际应用中,比如说网吧的应用系统。自动备份功能,用批处理来解决的话也会更方便。 好了,功能及应用就说到这里,我们开始讲关于批处理的命令如何写。

一echo 命令

可以说这是一句回显开关命令. 大家可以在自己的CMD下试试 echo /? 帮助文件是如何的 。我想问,如果知道用户名和密码,用批处理能编个开IPC$的软件吗?(在本机上运行的)。你再输入echo off ,就关闭了回显了. 这个命令基本上只是显示后面的提示而建立的,比如你输入一个命令行  @echo Just me is a good guy 。屏幕就会显示Just me is a good guy。这条命令基本上的功能就是这样.

     二   .@命令.

这条命令的作用于是不显示@后面的命令. 例如:书上的例子:@echo Now initializing the program,please wait a minite... 。如果你输入 @format x:/q/u/autoset 这个作用就大了{格式化}。大家注意后面的autoset。以前在98之前的时候都用/y来试用的。现在NT以后禁了Y参数,不过这个autoset是可以了.效果一样. @format X: /q/u/autoset   这句命令的作用主要告诉大家的是,如果在别人的屏幕上不显示正在快速格式化他他的硬盘. 如果在前面再加上一句  @echo please wait a minite... 。再说一些诱域性的话,也就没人怀疑你在做坏事了. 这条命令基本上就是这样了.

     三 goto

这条命令跟C语言里的Goto好像差不多. 你新建一个文本文档。再把这个新建文本文档的后缀.txt改成.bat。如果想要编辑你的这个批处理的话就右键单击,编辑. 好了.我们继续讲Goto命令. 看过C基础的一定知道书上有个例子是

....

:loop

....

go to loop;

很简单的一个命令,意思就是跳动到哪句去执行的意思. 这个loop是标签的意思.前面一定要加上 " : "号 。也就是两个点。这条语句的基本作用就是这样了,例子在后面举出来.

四rem语言句.

rem命令。这个相对来说就比较简单了,意思就是注释性的.相当于C里面的\\ /* ....*/ 。ASP文件里面的  -...-意思就是注释的意思。不起任何执行命令的作用不着. 不起任何执行命令的作用。@rem i'm a great man 。嘿嘿.牛B下. :P


[此贴子已经被封____了于2005-12-4 22:36:19编辑过]
叫我宝宝就可以了!2005-12-4 22:18:02举报帖子
    宝汽X


等级:新手上路
文章:19
积分:219
门派:无门无派
注册:2005年11月26日第 2 楼    

--------------------------------------------------------------------------------
五.pause命令

 

这条命令的作用就比较大了.也比较好懂.

 

@echo off

 

:begin

 

copy a:*.* d:\back

 

echo Please put a new disk into driver A

 

pause

 

goto begin 

 

这个批处理文件就含比较多的内容了. 好了.我来讲下这条命令.

@echo off是关闭回显的意思

 

begin 在这里是做标签的意思.

 

echo Please put a new disk into driver A 。这条语句是显示Please put a new disk into driver A

 

pause命令是等待用户键入任意建

 

goto begin 重新开始一次. 就是输入任意建以后再跳转到begin copy a:*.* d:\back 

 

这个批处理的作用是一张一张的复制软盘.

 

Pause命令本身就是这个提示.不用你去写一条显示类似的语句. 你输入pause就会显示,请键入任意键继续。如果是英文操作系统会出现; prest any key to continue

 

再讲批处理的一个特性:

 

批处理调用内部或者外部命令之后就不再去管他了,不管他是不是在进行.也不管他是否进行结束。如果你复制一张软盘的话就得自己把握时间. 如果你再用这条命令的话,他会继续copy这张软盘 。

 

六.call 命令

 

从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。父批处理程序就是指写有call命令的批处理程序。这条语言要求自身理解的. 多看别人写的批处理程序也基本上可以明白.

 

七.start命令

 

调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。关于这条命令的解释有一条重要的规则:执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

 

如果你直接在命令提示框里面输入start会再弹出一个同样的窗口 。也就是说默认调用的是DOS窗口 。所以...你为了在某个文件夹里面调用cmd. 可以建bat文件里面写入cmd也可以写入start都是一个效果.

 

八.choice 命令  

 

这条命令如果单独写在cmd里面是不行的. 

 

这条命令的简介: 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……

 

choice /c:dme defrag,mem,end  。大家看下这条命令的效果 {注:choice在NT里面已经不支持了. }98的操作系统.或者磁盘操作系统.可以在百度或者哪里找choice的资料. 开始讲比较严肃的东西了.这两条命令比较重要

 

九.If 命令 

 

if 条件 待执行的命令

 

if =={%1} goto noparms 

 

goto 批处理文件运行到这里将跳到goto 所指定的标号处, 一般与if配合使用。 

 

noparms只是一个标签.

 

这三个好好看到.多看几遍

 

if goto choice for 是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。

 

if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:

 

1、if "参数" == "字符串"  待执行的命令

 

参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)

 

如if "%1"=="a" format a:

 

2、if exist 文件名  待执行的命令

 

如果有指定的文件,则条件成立,运行命令,否则运行下一句。如if exist config.sys edit config.sys

 

3、if errorlevel 数字  待执行的命令

 

如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。如if errorlevel 2 goto x2  DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码

 

再说下标号 ":"    标号用 :字符串 表示,标号所在行不被执行

 

十.for命令

 

for  命令比较复杂.使用起来只能多看,多练,多分析才能懂里面的东西。

基本格式: FOR [%%f] in (集合) DO [命令]    跟C不一样  

 

%%f 就是 设置 意思.这里的设置范围是有限度的。这个范围就是里面的集合里面

 

如果一条批处理文件中有一行:

 

for %%c in (*.bat *.txt) do type %%c 

 

tpye就是DOS命令,是显示文件内容的意思

 

*下面for 的官方帮助.* 转第三部分

叫我宝宝就可以了!2005-12-4 22:27:13举报帖子
    宝汽X


等级:新手上路
文章:19
积分:219
门派:无门无派
注册:2005年11月26日第 3 楼    

--------------------------------------------------------------------------------
接第二部分

for in (set) do command [ CommandLineOptions]

 

%variable 指定一个单一字母可替换的参数。

 

(set) 指定一个或一组文件。可以使用通配符。

 

command 指定对每个文件执行的命令。

 

command-parameters 为特定命令指定参数或命令行开关。

 

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable

 

而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I

 

 


如果命令扩展名被启用,下列额外的 FOR 命令格式会受到

 

支持:

 

 


FOR /D %variable IN (set) DO command [command-parameters]

 

 


如果集中包含通配符,则指定与目录名匹配,而不与文件

 

名匹配。

 

 


FOR /R [[drive:]path] %variable IN (set) DO command [command-

 

 


检查以 [drive:]path 为根的目录树,指向每个目录中的

 

FOR 语句。如果在 /R 后没有指定目录,则使用当前

 

目录。如果集仅为一个单点(.)字符,则枚举该目录树。

 

 


FOR /L %variable IN (start,step,end) DO command [command-para

 

 


该集表示以增量形式从开始到结束的一个数字序列。

 

因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生

 

序列 (5 4 3 2 1)。

 

 


FOR /F ["options"] %variable IN (file-set) DO command

 

FOR /F ["options"] %variable IN ("string") DO command

 

FOR /F ["options"] %variable IN (command) DO command

 

 


或者,如果有 usebackq 选项:

 

 


FOR /F ["options"] %variable IN (file-set) DO command

 

FOR /F ["options"] %variable IN ("string") DO command

 

FOR /F ["options"] %variable IN (command) DO command

 

 


filenameset 为一个或多个文件名。继续到 filenameset 中的

 

下一个文件之前,每份文件都已被打开、读取并经过处理。

 

处理包括读取文件,将其分成一行行的文字,然后将每行

 

解析成零或更多的符号。然后用已找到的符号字符串变量值

 

调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开

 

的第一个空白符号。跳过空白行。您可通过指定可选 "options"

 

参数替代默认解析操作。这个带引号的字符串包括一个或多个

 

指定不同解析选项的关键字。这些关键字为:

 

 


eol=c - 指一个行注释字符的结尾(就一个)

 

skip=n - 指在文件开始时忽略的行数。

 

delims=xxx - 指分隔符集。这个替换了空格和跳格键的

 

默认分隔符集。

 

tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代

 

的 for 本身。这会导致额外变量名称的

 

格式为一个范围。通过 nth 符号指定 m

 

符号字符串中的最后一个字符星号,

 

那么额外的变量将在最后一个符号解析之

 

分配并接受行的保留文本。

 

usebackq - 指定新语法已在下类情况中使用:

 

在作为命令执行一个后引号的字符串并且

 

引号字符为文字字符串命令并允许在 fi

 

中使用双引号扩起文件名称。

 

 


sample1:

 

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

 

 


会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将

 

每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或

 

空格定界符号。请注意,这个 for 程序体的语句引用 %i 来

 

取得第二个符号,引用 %j 来取得第三个符号,引用 %k

 

来取得第三个符号后的所有剩余符号。对于带有空格的文件

 

名,您需要用双引号将文件名括起来。为了用这种方式来使

 

用双引号,您还需要使用 usebackq 选项,否则,双引号会

 

被理解成是用作定义某个要分析的字符串的。

 

 


%i 专门在 for 语句中得到说明,%j 和 %k 是通过

 

tokens= 选项专门得到说明的。您可以通过 tokens= 一行

 

指定最多 26 个符号,只要不试图说明一个高于字母 z 或

 

Z 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;

 

同时不能有 52 个以上都在使用中。

 

 


您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,

 

用单引号将括号之间的 filenameset 括起来。这样,该字符

 

串会被当作一个文件中的一个单一输入行。

 

 


最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将

 

括号之间的 filenameset 变成一个反括字符串。该字符串会

 

被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进

 

内存,并被当作文件分析。因此,以下例子:

 

 


FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

 

 


会枚举当前环境中的环境变量名称。

 

 


另外,FOR 变量参照的替换已被增强。您现在可以使用下列

 

选项语法:

 

 


~I - 删除任何引号("),扩充 %I

 

%~fI - 将 %I 扩充到一个完全合格的路径名

 

%~dI - 仅将 %I 扩充到一个驱动器号

 

%~pI - 仅将 %I 扩充到一个路径

 

%~nI - 仅将 %I 扩充到一个文件名

 

%~xI - 仅将 %I 扩充到一个文件扩展名

 

%~sI - 扩充的路径只含有短名

 

%~aI - 将 %I 扩充到文件的文件属性

 

%~tI - 将 %I 扩充到文件的日期/时间

 

%~zI - 将 %I 扩充到文件的大小

 

%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充

 

到找到的第一个完全合格的名称。如果环境变量

 

未被定义,或者没有找到文件,此组合键会扩充

 

空字符串

 

 


可以组合修饰符来得到多重结果:

 

 


%~dpI - 仅将 %I 扩充到一个驱动器号和路径

 

%~nxI - 仅将 %I 扩充到一个文件名和扩展名

 

%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名

 

%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充

 

到找到的第一个驱动器号和路径。

 

%~ftzaI - 将 %I 扩充到类似输出线路的 DIR

 

 


在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法

 

用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名

 

比较易读,而且避免与不分大小写的组合键混淆。

 

(我在这里说下看书的方法: 看理论性的东西最好不要错过每一句话,每一个字眼.特别是权威的书籍要求不要跳过任何一个不懂的问题.  如果只是实践性的,可以跳过一些知识点,进行下一节的学习.  像MS的官方帮助相当实用,希望大家看的字母争取都能懂一些 )

 

在批处理文件中使用 FOR 命令时,指定变量使用 %%variable

 

再继续讲一些 for的实例用法

 

利用FOR暴力破解一台NT的机器.

 

如果猜中他的管理员帐号是administrator

 

我的IPC连接命令

 

net use \\ip\ipc$ ""/user:""

 

只要小小的改动几条命令

 

for /f i% in (welldo.txt) do net use \ip\ipc$ "i%" /u:"administrator"

 

然后在这个welldo.txt文件里面列举可能有产生的密码

 

 


叫我宝宝就可以了!2005-12-4 22:27:49举报帖子
    宝汽X


等级:新手上路
文章:19
积分:219
门派:无门无派
注册:2005年11月26日第 4 楼    

--------------------------------------------------------------------------------
在多次调用start命令后,会产生几个文件,请问怎么修改这急个文件的存放位置啊!{注:我调用的是私服启动文件}

叫我宝宝就可以了!2005-12-5 16:18:08举报帖子
    Vikas


等级:新手上路
文章:4
积分:55
门派:无门无派
注册:2005年10月9日第 5 楼    

--------------------------------------------------------------------------------
看看我的系统更新的BAT:

@ECHO OFF
CLS

prompt [webmaster@endsec.com]☆☆
title 登哥专用版
color 07
@echo on
PAUSE
start F:\DESK\系统更新包\Upgrade17.55.40.exe
start F:\DESK\系统更新包\tt2.21.exe
call F:\DESK\系统更新包\fav2c.bat
start C:\163.lnk
Copy F:\Sec\个性化\声音\Windows XP 关机.wav C:\WINDOWS\Media\Windows XP 关机.wav
Copy F:\Sec\个性化\声音\Windows XP 启动.wav C:\WINDOWS\Media\Windows XP 启动.wav

阅读(1909) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册