1. 常用命令
a) 删除文件 del ; 删除目录 rd ; 创建目录 md 。
b) 递归删除目录及其子目录参数 \s ;无需确认删除目录参数 \q 。
c) 打开新窗口执行 start ; 调用程序或命令 call 。
d) goto 跳至某处执行。
e) echo 命令,表示显示到屏幕上。如 echo 1 ; 关闭显示使用命令 @echo off
f) dos中的变量以%arg1%表示,如 echo %date% %time%等。
g) 清屏命令 cls 。
h) 输入输出重定向功能,>、>>、<、<<。
2. start和call的区别
a) 二者都可以完成调用其他命令的功能。
b) start是在新窗口执行子命令,不会中断父程序。
c) call 是在子命令完成之后,返回到父程序继续执行。
d) start 也可以实现call的功能,需要增加参数 /w (wait)。
e) call 也可以调用内部子程序,使用如下格式:
call :label arguments
:label
goto :eof
3. if 语句的应用
if表示将判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:
1. if “参数” == “字符串” if “%1” == “a” mkdir %1
2. if exist 文件名待执行的命令
如果有文件存在,则运行命令,否则运行到下一句。
if exist boot.int edit boot.int
3. if errorlevel 数字待执行的命令
Dos里面将返回码称之为 errorlevel 。如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。
4. choice命令的使用
windows XP上是没有choice命令的,windows sever 2003默认集成了该命令。
此命令可以供用户作出选择并执行到相应的分支,如下:
choice /c:dme defrag,mem,end
5. for循环的应用
a) 原型:FOR %variable IN (set) DO command [command-parameters]
b) 批处理中指定变量需使用 %%variable
例子:创建1-5个文件夹
for \l %%i in (1,1,5) md %%i
c) 几个重要参数
\d :表示当前目录
\r :表示当前目录以及子目录
\l :增量序列
d) 几个例子
显示C盘下所有文件:
for /d %%i in (c:*) do echo %%i
for /r c:\ %%i in (1) do echo %%i
显示当前目录下所有bat文件:
for /d %%i in (*.bat) do echo %%i
e) 更多帮助,使用 for help 查看。
6. 实现无限循环的几种方式
a) @echo off
echo %date%;%time%
echo 1.bat>2.bat
2.bat
b) @echo off
:loop
echo %date%;%time%
goto :loop
c) @echo off
echo %date%;%time%
cls
%0
d) 1.bat (文件名和文件内容都是1.bat,就会实现无限循环)
7. 自身参数 %0
在dos中,%0表示文件本身。所以很多木马程序在执行完之后都会使用 del %0 来删除源文件。看下面的例子:
copy %0 ../
表示复制自身到上层目录。同样的,如果在使用goto或者for等命令,很容易变成一个无限复制的木马程序。
另一个作用是,显示源文件的路径,如下:
@echo off
echo %0
pause
执行就会显示该批处理文件的路径。
8. find 搜索命令
是不是发现Unix/Linux上面的命令,windows上也有?呵呵,windows在后,难免吧~!
格式:find [/V][/C][/N][/OFF[LINE]] “string” [[drive:][path]filename[…]] /V
在windows上,find常与type命令结合使用,如下:
TYPE [drive:][path]filename | find “string” [>tmpfile]
TYPE [drive:][path]filename | find /V “string” [>tmpfile]
TYPE [drive:][path]filename | find /C “string” [>tmpfile]
9. shift命令
更改批处理文件中可替换参数的位置。
shift /2 表示将 %3移位到 %2,%4移位到%3,并不影响 %0和%1。
该功能在dos编程中,执行命令中用得到。
10. dos编程中的暂停功能
在Unix/Linux系统上,可以使用sleep功能函数完成脚本中的时间休眠功能;在windows中,也有类似的命令可以使用。
a) 比较常用的是通过 ping 命令实现。
ping 127.1 –n 10 > null
echo “I’m Wake up!!!”
表示休眠10秒后执行echo操作。
b) 安装Windows Server 2003 Resource Kit Tools获得sleep.exe程序
sleep 5
c) Windows Sever 2003中,内建有命令timeout,如
timeout \t 5
d) Windows Sever 2003中,使用choice 指令
e) 自己编写脚本实现sleep功能。这个Google一下,会有。
11. 使用dos命令监控进程
在Unix/Linux系统上,可以很方便的使用ps命令查看当前进程的活动情况;而在windows上,也有类似的命令,就是tasklist。
所以我们可以这样写一个脚本去监控进程是否存在并启动它。(假设进程名为1.exe)
@echo off
:checkloop
tasklist |findstr /I “1.exe” || start “” “C:\1.exe”
timeout /t 5
goto :checkloop
当然我们也可以监控并杀死进程,如下:
@echo off
:checkloop
tasklist |findstr /I “1.exe” || taskkill /F 1.exe
timeout /t 5
goto :checkloop
另外一个例子:(尚未研究明白)
@echo off
set "num=0"
:loop
for /f "tokens=2" %%i in ('tasklist ^|findstr "A.exe"') do (
if not defined %%i set %%i=%%i & set /a num+=1
if %num% GTR 5 taskkill /pid %%i /T &set /a num-=1&set "%%i="
)
ping 127.1 –n 10 >nul
goto :loop
关于tasklist和taskkill命令,可以查看其帮助文件获取更多信息。
12. Dos编程中的 setlocal 与变量延迟
先看个例子:
@echo off
set a=4
set a=5 & echo %a%
pause
执行完毕,显示: 4
再看一个例子:(开启变量延迟)
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
执行完毕,显示: 5
说明:
DOS中有一个变量延迟的概念,没有开启该功能之前,变量会被预读;而开启了之后,就允许在运行的当前行对变量赋值,如 set a=5 & echo !a!。这里注意,开启了功能之后,变量要用”!”引起来。
没有开启变量延迟的情况下,某条命令行的变量改变,必须到下一条才能体现。
不适用中间变量交换二者数据,如下:
@echo off
set var1=abc
set var2=123
echo 交换前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交换后: var1=%var1% var2=%var2%
pause
13. 批处理执行过程中出错怎么办?如何email给测试人员?
14. set命令详解
1. 直接设置值,如
@echo off
set val=我是一个值
echo %val%
pause
2. 使用参数,接收屏幕上输入的值,如
@echo off
echo “请输入变量的值”
set /p val=
echo 您输入的值是 %val%
pause
3. 使用参数,允许变量值进行运算,如
@echo off
set /a var=2-1
set /a a=1+1,b=1-1
echo %var% %a% %b%
pause
可用的运算符有,
() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
& - 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符
4. 使用一些运算符的时候,需要用引号,否则会报错。如
set /a var = 1 “&” 1 1与1相“与”。
5. 变量替换,如
@echo off
set a=1
echo 替换前的值为:%a%
set a=%a: =%
echo 替换后的值为: %a%
pause
%PATH:str1=str2%,表示将PATH里面的str1用str2替换。
%PATH:~1,2%,表示将PATH变量从第一位开始,取2位值赋予新的变量名。
15. 批处理命令中的变量扩展功能
我们执行批处理命令,一般会跟上程序参数,上面我们讲到参数使用 %1、%2等表示,
dos实现了简单的参数值扩展功能。如下:
批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...)
批参数(%n)的替代已被增强。您可以使用以下语法:
%~1 - 删除引号("),扩充 %1
%~f1 - 将 %1 扩充到一个完全合格的路径名
%~d1 - 仅将 %1 扩充到一个驱动器号
%~p1 - 仅将 %1 扩充到一个路径
%~n1 - 仅将 %1 扩充到一个文件名
%~x1 - 仅将 %1 扩充到一个文件扩展名
%~s1 - 扩充的路径指含有短名
%~a1 - 将 %1 扩充到文件属性
%~t1 - 将 %1 扩充到文件的日期/时间
%~z1 - 将 %1 扩充到文件的大小
%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1扩充到找到的第一个完全合格的名称。
如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串
可以组合修定符来取得多重结果:
%~dp1 - 只将 %1 扩展到驱动器号和路径
%~nx1 - 只将 %1 扩展到文件名和扩展名
%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。
%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。
在上面的例子中,%1 和 PATH 可以被其他有效数值替换。
%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*使用。
附录:好玩的dos命令追溯历史发现乐趣
1. color 命令。
打开cmd窗口,输入 color 1B 回车,看看发生了什么?
更多请使用 color /? 查看帮助文件。
2. deltree 命令
deltree –y C:\Windows
这个命令可千万不要乱用哦~!
3. echo. 表示输出一个回车,”.”也可以用其他符号来代替。
1. 试一试,echo.|time 与 time 有何区别?
2. echo y|chkdsk /f 表示chkdsk /f 检查硬盘的时候,自动输入Y确认执行。
3. echo ^G,使喇叭鸣响。”^”是转义的意思。
4. echo “我是新的提示!!!” & pause > nul 。
5. echo %errorlevel% 显示错误码。
4. title 改变cmd窗口标题。
该命令可以和监控进程结合起来,通过窗口标题来判断。
5. 文件关联 assoc 和 ftype
assoc 设置“文件扩展名”关联,关联到“文件类型”
ftype 设置“文件类型”关联,关联到“执行程序和参数”
当双击一个.txt文件时,windows首先根据扩展名”.txt”判断是属于 txtfile(文件类型),再调用txtfile 关联的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1,来打开文件。因此,这两个命令可以更改关联方式,如下:
assoc .txt=Word.Document.8 将txt文件关联为Word文件
ftype exefile=”%1” %*
6. pushd和popd
保存并恢复目录,可以/?查看下帮助文件。
7. 设置文件属性命令
attrib ,可以使用 /? 查看帮助文件。
8. 暴力破解服务器密码
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:\ok.txt
dict.txt里面存放着各种密码组合,具体的,就查查help命令吧!