土木在线论坛 \ 水利工程 \ 水利软件 \ 学会批处理

学会批处理

发布于:2006-08-10 23:30:10 来自:水利工程/水利软件 [复制转发]

在网上找到些关于批处理学习的文章~~分享给大家,希望能给大家带来点帮助!

这是一篇技术教程,真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前

先概述一下批处理是个什么东东。批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服----我是个菜鸟,当然就更不用说了;但我想总结出一个“比较合适的”,而且我也相信自己可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你用这个东东可以干什么事情。或许你会因为这篇文章而“无条件爱上批处理”,那么我的目的就达到了----我就是要让你爱上它,我就这么拽,你能怎么着??真的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的!
按照我的理解,批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合

OK,never claver and get to business(闲话少说言归正传)。批处理,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就ok了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。我不想让自己写的教程枯燥无味,因为牵缠到代码(批处理的内容算是代码吧?)的问题本来就是枯燥的,很少有人能面对满屏幕的代码而静下心来。所以我会用很多简单实用的例子让读这篇教程的朋友去体会批处理的那四射的魅力,感受它那古灵精怪的性格,不知不觉中爱上批处理(晕,怎么又是爱?到底批处理和爱有什么关系?答案:没有!)。再说句“闲话”:要学好批处理,DOS基础一定要牢!当然脑子灵活也是很重要的一方面

例一、先给出一个最easy的批处理脚本让大家和它混个脸熟,将下面的几行命令保存为name.bat然后执行(以后文中只给出代码,保存和执行方式类似):

ping sz.tencent.com > a.txt
ping sz1.tencent.com >> a.txt
ping sz2.tencent.com >> a.txt
ping sz3.tencent.com >> a.txt
ping sz4.tencent.com >> a.txt
ping sz5.tencent.com >> a.txt
ping sz6.tencent.com >> a.txt
ping sz7.tencent.com >> a.txt
exit

是不是都能看的懂?是不是很easy?但它的作用却是很实用的,执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文件,它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器,从而远离“从服务器中转”那一痛苦的过程。这里>的意思,是把前面命令得到的东西放到后面所给的地方,>>的作用,和>的相同,区别是把结果追加到前一行得出的结果的后面,具体的说是下一行,而前面一行命令得出的结果将保留,这样可以使这个a.txt文件越来越大(想到如何搞破坏了??)。By the way,这个批处理还可以和其他命令结合,搞成完全自动化判断服务器速度的东东,执行后直接显示速度最快的服务器IP,是不是很爽?后面还将详细介绍
例二、再给出一个已经过时的例子(a.bat):
@echo off

if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat
为什么说这是个过时的例子呢?很简单,因为现在已经几乎没有人用带广告的QQ了(KAO,我的QQ还显示好友三围呢!!),所以它几乎用不上了。但曾经它的作用是不可小窥的:删除QQ的广告,让对话框干干净净。这里用的地址是QQ的默认安装地址,默认批处理文件名为a.bat,你当然可以根据情况自行修改。在这个脚本中使用了if命令,使得它可以达到适时判断和删除广告图片的效果,你只需要不关闭命令执行后的DOS窗口,不按CTRL+C强行终止命令,它就一直监视是否有广告图片(QQ也再不断查看自己的广告是否被删除)。当然这个脚本占用你一点点内存,呵呵

例三,使用批处理脚本查是否中冰河。脚本内容如下:
@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit

这里利用了netstat命令,检查所有的网络端口状态,只需要你清楚常见木马所使用的端口,就能很easy的判断出来是否被人种了冰河。然这不是确定的,因为冰河默认的端口7626,完全可以被人修改。这里介绍的只是方法和思路。这里介绍的是方法和思路稍做改动,就变成可以检查其他木马的脚本了,再改动一下,加进去参数和端口及信息列表文件后,就变成自动检测所有木马的脚本了。呵呵,是不是很过瘾?脚本中还利用了组合命令&&和管道命令|,后面将详细介绍

例四,借批处理自动清除系统垃圾,脚本如下:

@echo off
if exist c:\windows\temp\*.* del c:\windows\temp\*.*
if exist c:\windows\Tempor~1\*.* del c:\windows\Tempor~1\*.*
if exist c:\windows\History\*.* del c:\windows\History\*.*
if exist c:\windows\recent\*.* del c:\windows\recent\*.*
将以上脚本内容保存到autoexec.bat里,每次开机时就把系统垃圾给自动删除了。这里需要注意两点:一、DOS不支持长文件名,所以就出现了Tempor~1这个东东;二、可根据自己的实际情况进行改动,使其符合自己的要求。

全部回复(10 )

只看楼主 我来说两句
  • 逍遥浪子
    逍遥浪子 沙发
    command name | more [/c]

    [/tn] [+n]
    more [[/c]

    [/tn] [+n]] < [drive:][path] filename

    more [/c]

    [/tn] [+n] [files]
    参数

    [drive:][path] filename

    指定要显示的文件。
    command name
    指定将显示其输出的命令。
    /c

    显示页面前清除屏幕。
    /p

    扩展换页符。
    /s


    将多个空白行更改为一个空白行。

    /tn
    将制表位更改为 n 个空格
    +n
    显示由 n 指定的行开始的第一个文件。

    filesb

    指定要显示的文件列表。用空格分隔文件名

    More 子命令

    以下命令在 more 提示 (-- More --) 下接受。

    关键字 操作
    space 显示下一页
    ENTER 显示下一行
    F 显示下一个文件
    q 退出
    ? 显示可用命令
    = 显示行号
    S n 跳过下面 n 行
    Find
    在一个文件或多个文件中搜索指定的文本字符串
    当搜索到指定的文件后,find 将显示出包含指定字符串的所有行

    find [/v] [/c] [/n] "string" [[drive:][path]filename[...]]

    参数
    /v
    显示未包含指定字符串的所有行

    /c
    只显示包含指定字符串的行数

    /n
    将文件行号置于每行开头

    /I
    指定搜索不区分大小写

    "string"
    指定要搜索的字符组。必须将 string 的文本包括在引号中

    [drive:][path] filename

    指定要在其中搜索指定字符串的文件的位置和名称
    Sort

    读取输入、排序数据并将结果写到屏幕、文件和其他设备上
    sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o [drive3:][path3]filename3]

    [command |] sort [/r] [/+n] [/m kilobytes] [/l locale] [/rec characters] [[drive1:][path1]filename1] [/t [drive2:][path2]] [/o [drive3:][path3]filename3]

    参数
    /r
    颠倒排序顺序,即从 Z 到 A 排序,然后从 9 到 0 排序

    /+n
    指定字符位置号 n,sort 在此处开始每次比较。例如,/+3 表示每次比较在每行的第三个字符开始。少于 n 个字符的行在其他行之前排序。默认情况下,比较在每行的第一个字符开始

    /m kilobytes
    指定用于排序的主内存数量,按千字节 (KB) 计。使用的内存最小值总是 160 KB。如果指定了内存大小,则无论有多少主内存可用,指定的确切数量(但至少 160 KB)的内存将用于排序。
    如果输入输出均为文件,在没有指定大小时,默认最大内存大小为可用主内存的 90%,否则为主内存的 45%。默认设置通常会产生最佳的性能。

    /l locale
    替代由系统默认区域设置定义的字符排序顺序;即在安装 Windows 2000 时选择的语言和“国家(地区)”。目前,默认区域设置唯一的备用选项就是“C”区域设置,该区域设置比自然语言排序快,根据二进制编码对字符排序

    /rec characters
    指定记录或输入文件的行中的最多字符数(默认值为 4096,最大值为 65535)。

    [drive1:][path1]filename1

    指定要排序的文件。如果没有指定文件名,则对标准输入排序。指定输入文件比将同一文件作为标准输入重定向速度快

    /t [drive2:][path2]

    指定保留 sort 命令工作存储的目录路径,防止数据不能装入主内存。默认为使用系统临时目录

    /o [drive3:][path3]filename3
    指定要存储排序后的输入的文件。如果没有指定,数据将写入标准输出。指定输出文件比将同一文件作为标准输出重定向速度快!
    2006-08-10 23:37:10

    回复 举报
    赞同0
  • 逍遥浪子
    逍遥浪子 板凳
    注意
    在上述范例中,%I 和 PATH 可被其他有效值替换。通过有效的 for 变量名终止 %~ 语法
    使用大写变量名(例如 %I)可以使代码更具可读性,并且避免与不区分大小写的修改程序混淆
    Shift
    更改批处理文件中可替换参数的位置

    shift
    启用命令扩展(Windows 2000 中的默认设置)后,shift 命令支持 /n 开关,该开关通知命令在第 n 个参数处开始更改,n 可以是从 0 到 8 的任何一个值。例如,

    SHIFT /2

    将 %3 改为 %2,将 %4 改为 %3 等等,而 %0 和 %1 保持不变

    筛选器命令
    筛选器命令可以帮助您排序、查看和选择部分命令输出结果
    通过筛选器命令传递信息

    筛选器命令可以划分、重排以及提取通过的部分信息操作。Windows 2000 有三个筛选器命令:

    more 命令每次显示一屏文件内容或命令输出
    find 命令在文件和命令输出中搜索指定字符
    sort 命令按字母顺序排列文件和命令输出

    要将输入从文件发送到筛选器命令,请使用小于符号 (<)。如果要筛选器命令从其他命令获得输入,请使用管道 (|)。

    使用 more 命令来控制屏幕显示
    more 命令每次一屏地显示文件的内容或命令输出。例如,下面的 more 命令每次显示一屏 List.txt 文件的内容:

    more < list.txt

    信息显示一屏后,会出现字“More”。要继续显示下一屏,请按键盘上任意键。要停止命令且不查看详细信息,请按 CTRL+C 键

    如果使用产生多屏输出的命令,more 将十分有用。例如,假设定要查看硬盘的目录树。如果 Windows 2000 不能将目录在一屏内全部显示出来,请使用带管道号 (|) 和 more 命令的 tree 命令,如下例所示:

    tree c:\ | more
    tree 命令的第一屏输出被显示,后跟词“More”。Windows 2000 暂停,直到用户按键盘上的任意键为止(PAUSE 键除外)。

    使用 find 命令搜索文本

    find 命令在一个或多个文件中搜索指定文本。Windows 2000 显示每个包含该文本的行。find 命令可以用作筛选器命令或者标准的 Windows 2000 命令。有关将 find 用作标准的 Windows 2000 命令的信息,请单击“相关主题”列表中的 find。
    要将 find 当作筛选器命令使用,请包含小于符号 (<) 和搜索的文件名。当输入文件名时,请记住搜索要区分大小写。例如,下面的命令查找文件 Trade.txt 中所有的“Pacific Rim”字符串:

    find "Pacific Rim" < trade.txt
    要保存 find 命令的输出而不是显示输出,请使用大于号 (>) 和要存储输出的文件名。例如,下面的命令查找文件 Trade.txt 中所有的“Pacific Rim”字符串,并将结果保存在 Nwtrade.txt 文件中:

    comfind "Pacific Rim" < trade.txt > nwtrade.txt
    对文本文件排序

    Usort 命令按字母顺序排列文本文件或命令的输出。例如,可以使用以下命令对 List.txt 文件的内容进行排序,并在屏幕上显示结果:
    sort < list.txt

    在此范例中,sort 命令对 List.txt 文件的行进行排序并显示结果,但不更改文件。要保存 sort 命令的输出而不是显示输出,请在命令中包含大于号 (>) 和文件名。例如,可以使用以下命令对 List.txt 文件的行按字母顺序排序,并将结果存到 Alphlist.txt 文件中:

    sort < list.txt > alphlist.txt

    要排序命令的输出,请键入后面带有管道 (|) 和 sort 命令的命令。例如,下面的命令对 find 命令的输出结果进行排序:

    find "Jones" maillst.txt | sort

    在键入该命令时,Windows 2000 按字母顺序列出在其中出现“Jones”的行。

    带重定向符的合并命令

    可以将筛选器命令、其他命令和文件名合并以生成自定义命令。例如,可以使用以下命令存储包含“LOG”字符串的文件名:

    dir /b | find "LOG" > loglist.txt

    Windows 2000 通过 find 过滤器命令发送 dir 命令的输出并将包含字符串“Log”的文件名存储在 Loglist.txt 文件中。将结果存储为文件名列表(如,A.log、Logdat.svd 和 Mylog.bat)。

    要在相同命令中使用多个筛选器,请使用管道 (|) 分隔筛选器。例如,下面的命令搜索 C 盘上的每个目录以查找包含“Log”字符串的文件名,并且每次显示一屏:

    dir c:\ /s /b | find "LOG" | more

    因为使用管道 (|),Windows 2000 通过 find 命令发送 dir 命令的输出结果。find 命令只选择包含字符串“Log”的文件名。more 命令每次一屏地显示 find 命令选择的文件名。

    More
    每次显示一个输出屏幕。该命令通常用于查看长文件。可以单独使用此命令,或者使用它控制其他命令的输出,例如 type 命令。当显示填充可用的查看区域时将出现 more 提示,用户可以输入许多命令来控制查看文件其余部分的方式。

    2006-08-10 23:37:10

    回复 举报
    赞同0
加载更多
这个家伙什么也没有留下。。。

水利软件

返回版块

13.32 万条内容 · 203 人订阅

猜你喜欢

阅读下一篇

WINXP优化精髓

瘦身,删除以下目录或文件(不带*号的连目录一起删):c:\windows\system32\dllcache\* 系统文件备份,150M~500M 不等c:\windows\$* (以$号开头的所有目录,补丁的反安装,约70M)c:\windows\*.log (虽然不大,但太多,看的不爽,)c:\windows\pchealth 帮助支持中心,30M (注意删除前把 helpctr\binaries\msconfig.exe 复制到system32目录)

回帖成功

经验值 +10