DOS编程学习笔记

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.       startcall的区别

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

关于tasklisttaskkill命令,可以查看其帮助文件获取更多信息。

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

可用的运算符有,

()                - 分组

! ~ -              - 一元运算符

* / %             - 算数运算符

+ -               - 算数运算符

&lt;&lt; &gt;&gt;   - 逻辑移位

&                - 按位“与”

^                - 按位“异”

|                - 按位“或”

= *= /= %= += -=   - 赋值

&= ^= |= &lt;&lt;= &gt;&gt;=

,                  - 表达式分隔符

4.       使用一些运算符的时候,需要用引号,否则会报错。如

set /a var = 1 “&” 1          11相“与”。

5.       变量替换,如

@echo off

set a=1

echo 替换前的值为:%a%

set a=%a: =%

echo 替换后的值为: %a%

pause

 

%PATH:str1=str2%,表示将PATH里面的str1str2替换。

%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.       pushdpopd

保存并恢复目录,可以/?查看下帮助文件。

7.       设置文件属性命令

attrib ,可以使用 /? 查看帮助文件。

8.       暴力破解服务器密码

for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:\ok.txt

dict.txt里面存放着各种密码组合,具体的,就查查help命令吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值