一、基础语法:
1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。
2.批处理是一种简单的程序,可以用 if 和 goto 来控制流程,也可以使用 for 循环。
3.批处理的编程能力远不如C语言等编程语言,也十分不规范。
4.每个编写好的批处理文件都相当于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在任意位置运行。
5.C:\AUTOEXEC.BAT 是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。
6.大小写不敏感(命令符忽略大小写)
7.批处理的文件扩展名为 .bat 或 .cmd。
8.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe来运行该文件。
二、参数:
1) 系统参数
%SystemRoot% === C:\WINDOWS (%windir% 同样)
%ProgramFiles% === C:\Program Files
%USERPROFILE% === C:\Documents and Settings\Administrator (子目录有“桌面”,“开始菜单”,“收藏夹”等)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%TEMP% === C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp (%TEM% 同样)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%OS% === Windows_NT (系统)
%Path% === %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem (原本的设置)
%HOMEDRIVE% === C: (系统盘)
%HOMEPATH% === \Documents and Settings\Administrator
:: 枚举当前的环境变量
setlocal enabledelayedexpansion
FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i !%%i!
2) 传递参数给批处理文件
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。
变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示。
Sample:
call test2.bat "hello" "haha" (执行同目录下的“test2.bat”文件,并输入两个参数)
在“test2.bat”文件里写:
echo %1 (打印: "hello")
echo %2 (打印: "haha")
echo %0 (打印: test2.bat)
echo %19 (打印: "hello"9)
三、批处理基本命令
0. help 命令
/? 命令
语法: 命令 /?
可显示此命令的帮助信息
Sample: type /? >>tmp.txt (把 type 命令的帮助信息写入到tmp.txt文件里)
Sample: help type (显示跟“type /?”一样)
1.Echo 命令
语法: echo [{on|off}] [message]
ECHO [ON | OFF] 打开回显或关闭回显功能。
ECHO 显示当前回显设置。
ECHO [message] 显示信息。
echo off 表示在此语句后所有运行的命令都不显示命令行本身;默认是on,on时会显示如: C:\文件夹路径>命令行。
在实际应用中我们会把这条命令和重定向符号( 也称为管道符号,一般用 > >> ^ )结合来实现输入一些命令到特定格式的文件中。
Sample: echo off
Sample: echo hello world (显示出“hello world”)
Sample: echo Windows Registry Editor Version 5.00 > c:\setupreg.reg (此前还没有 setupreg.reg 这个文件)
Sample: echo "SourcePath"="D:\\Win2003\\" >> c:\setupreg.reg (追加内容进 setupreg.reg 这个文件)
2.@ 命令
表示不显示@后面的命令,(在入侵过程中自然不能让对方看到你使用的命令啦)
@ 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
Sample: @echo off (此语句常用于开头,表示不显示所有的命令行信息,包括此句)
Sample: @echo please wait a minite...
Sample: @format X: /q/u/autoset
(format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)