﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-古月残辉-文章分类-Language</title><link>http://www.cppblog.com/guyuecanhui/category/9798.html</link><description>止于至善</description><language>zh-cn</language><lastBuildDate>Sat, 14 Mar 2009 11:32:32 GMT</lastBuildDate><pubDate>Sat, 14 Mar 2009 11:32:32 GMT</pubDate><ttl>60</ttl><item><title>如何写批处理文件（转）</title><link>http://www.cppblog.com/guyuecanhui/articles/76571.html</link><dc:creator>古月残辉</dc:creator><author>古月残辉</author><pubDate>Sat, 14 Mar 2009 05:00:00 GMT</pubDate><guid>http://www.cppblog.com/guyuecanhui/articles/76571.html</guid><wfw:comment>http://www.cppblog.com/guyuecanhui/comments/76571.html</wfw:comment><comments>http://www.cppblog.com/guyuecanhui/articles/76571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guyuecanhui/comments/commentRss/76571.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guyuecanhui/services/trackbacks/76571.html</trackback:ping><description><![CDATA[<pre style="FONT-SIZE: 14pt; FONT-FAMILY: 微软雅黑">
<p style="TEXT-INDENT: 2em">首先，批处理文件是一个文本文件，这个文件的每一行都是一条DOS命令（大部分时候就好象我们在DOS提示符下执行的命令行一样），你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">其次，批处理文件是一种简单的程序，可以通过条件语句(if)和流程控制语句(goto)来控制命 令运行的流程，在批处理中也可以使用循环语句(for)来循环执行一条命令。当然，批处理文件的编程能力与C语言等编程语句比起来是十分有限的，也是十分不规范的。批处理的程序语句就是一条条的DOS命令（包括内部命令和外部命令），而批处理的能力主要取决于你所使用的命令。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">第三，每个编写好的批处理文件都相当于一个DOS的外部命令，你可以把它所在的目录放到你的DOS 搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录（例如C:\BATCH），然后将所有你 编写的批处理文件放到该目录中，这样只要在path中设置上c:\batch，你就可以在任意位置运行所有你编写的批处理程序。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">第四，在DOS和Win9x/Me系统下，C:盘根目录下的AUTOEXEC.BAT批处理文件是 自动运行批处理文件，每次系统启动时会自动运行该文件，你可以将系统每次启动时都要运行的命令放入该文件中，例如设置搜索路径，调入鼠标驱动和磁盘缓存， 设置系统环境变量等。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">下面是一个运行于Windows 98下的autoexec.bat的示例：</p>
<p style="TEXT-INDENT: 2em">@ECHO OFF</p>
<p style="TEXT-INDENT: 2em">PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH</p>
<p style="TEXT-INDENT: 2em">LH SMARTDRV.EXE /X</p>
<p style="TEXT-INDENT: 2em">LH DOSKEY.COM /Insert</p>
<p style="TEXT-INDENT: 2em">LH CTMOUSE.EXE</p>
<p style="TEXT-INDENT: 2em">SET TEMP=D:\TEMP</p>
<p style="TEXT-INDENT: 2em">SET TMP=D:\TEMP</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">批处理的作用</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">简单的说，批处理的作用就是自动的连续执行多条命令。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">这里先讲一个最简单的应用：在启动wps软件时，每次都必须执行（&gt;前面内容表示DOS提示符）： </p>
<p style="TEXT-INDENT: 2em">C:\&gt;cd wps </p>
<p style="TEXT-INDENT: 2em">C:\WPS&gt;spdos</p>
<p style="TEXT-INDENT: 2em">C:\WPS&gt;py </p>
<p style="TEXT-INDENT: 2em">C:\WPS&gt;wbx </p>
<p style="TEXT-INDENT: 2em">C:\WPS&gt;wps </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">如果每次用WPS之前都这样执行一遍，您是不是觉得很麻烦呢？</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">好了，用批处理，就可以实现将这些麻烦的操作简单化，首先我们编写一个runwps.bat批处理文件，内容如下：</p>
<p style="TEXT-INDENT: 2em">@echo off</p>
<p style="TEXT-INDENT: 2em">c:</p>
<p style="TEXT-INDENT: 2em">cd\wps</p>
<p style="TEXT-INDENT: 2em">spdos</p>
<p style="TEXT-INDENT: 2em">py</p>
<p style="TEXT-INDENT: 2em">wbx</p>
<p style="TEXT-INDENT: 2em">wps</p>
<p style="TEXT-INDENT: 2em">cd</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">以后，我们每次进入wps，只需要运行runwps这个批处理文件即可。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">常用命令</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">echo，@，call，pause，rem(小技巧：用::代替rem)是批处理文件最常用的几个命令，我们就从他们开始学起。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong><span style="COLOR: #0000ff">1、Echo 命令</span> </strong></p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">语法 ：</p>
<p style="TEXT-INDENT: 2em">echo [{on　off}] [message] </p>
<p style="TEXT-INDENT: 2em">Sample：@echo off / echo hello world </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><span style="COLOR: #0000ff"><strong>2、@ 命令</strong></span>&nbsp; </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">@与echo off相象，但它是加在每个命令行的最前面，表示运行时不显示这一行的命令行（只能影响当前行）。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">Sample：</p>
<p style="TEXT-INDENT: 2em">@echo off </p>
<p style="TEXT-INDENT: 2em">@echo Now initializing the program,please wait a minite... </p>
<p style="TEXT-INDENT: 2em">@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。)&nbsp; </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em"><strong>3、Call 命令 </strong></p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">从一个批处理程序调用另一个批处理程序，并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call，它将不会在命令行起作用。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">语法 </p>
<p style="TEXT-INDENT: 2em">call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]] </p>
<p style="TEXT-INDENT: 2em">参数 </p>
<p style="TEXT-INDENT: 2em">[Drive:}[Path] FileName </p>
<p style="TEXT-INDENT: 2em">指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em"><strong>4、Pause 命令 </strong></p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">运行 Pause 命令时，将显示下面的消息： </p>
<p style="TEXT-INDENT: 2em">Press any key to continue . . . </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">Sample： </p>
<p style="TEXT-INDENT: 2em">@echo off </p>
<p style="TEXT-INDENT: 2em">:begin </p>
<p style="TEXT-INDENT: 2em">copy a:*.* d：\back </p>
<p style="TEXT-INDENT: 2em">echo Please put a new disk into driver A </p>
<p style="TEXT-INDENT: 2em">pause </p>
<p style="TEXT-INDENT: 2em">goto begin </p>
<p style="TEXT-INDENT: 2em">在这个例子中，驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入驱动器 A 时，pause 命令会使程序挂起，以便您更换磁盘，然后按任意键继续处理。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em"><strong>5、Rem 命令</strong></p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">注释命令，它并不会被执行，只是起一个注释的作用，便于别人阅读和你自己日后修改。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">语法： </p>
<p style="TEXT-INDENT: 2em">Rem Message </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">Sample：@Rem Here is the description. </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em"><strong>6、start 命令 </strong></p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">调用外部程序，所有的DOS命令和命令行程序都可以由start命令来调用。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">入侵常用参数： </p>
<p style="TEXT-INDENT: 2em">MIN 开始时窗口最小化 </p>
<p style="TEXT-INDENT: 2em">SEPARATE 在分开的空间内开始 16 位 Windows 程序 </p>
<p style="TEXT-INDENT: 2em">HIGH 在 HIGH 优先级类别开始应用程序 </p>
<p style="TEXT-INDENT: 2em">REALTIME 在 REALTIME 优先级类别开始应用程序 </p>
<p style="TEXT-INDENT: 2em">WAIT 启动应用程序并等候它结束 </p>
<p style="TEXT-INDENT: 2em">parameters 这些为传送到命令/程序的参数</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">注意：执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行，该新行为则不会发生。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">批处理文件的参数</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">批处理文件还可以像C语言的函数一样使用参数（相当于DOS命令的命令行参数），这需要用到一个参数表示符&#8220;%&#8221;。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">%[1-9]表示参数，参数是指在运行批处理文件时在文件名后加的以空格（或者Tab）分隔的字符串。变量可以从%0到%9，%0表示批处理命令本身，其它参数字符串用%1到%9顺序表示。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">例1：C:根目录下有一批处理文件名为f.bat，内容为：</p>
<p style="TEXT-INDENT: 2em">@echo off</p>
<p style="TEXT-INDENT: 2em">format %1</p>
<p style="TEXT-INDENT: 2em">如果执行C:\&gt;f a:</p>
<p style="TEXT-INDENT: 2em">那么在执行f.bat时，%1就表示a:，这样format %1就相当于format a:，于是上面的命令运行时实际执行的是format a:</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">例2：C:根目录下一批处理文件名为t.bat，内容为:</p>
<p style="TEXT-INDENT: 2em">@echo off</p>
<p style="TEXT-INDENT: 2em">type %1 </p>
<p style="TEXT-INDENT: 2em">type %2 </p>
<p style="TEXT-INDENT: 2em">那么运行C:\&gt;t a.txt b.txt </p>
<p style="TEXT-INDENT: 2em">%1 : 表示a.txt</p>
<p style="TEXT-INDENT: 2em">%2 : 表示b.txt</p>
<p style="TEXT-INDENT: 2em">于是上面的命令将顺序地显示a.txt和b.txt文件的内容。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">特殊命令</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">if，goto，choice，for是批处理文件中比较高级的命令，如果这几个你用得很熟练，你就是批处理文件的专家啦。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">一、if 是条件语句，用来判断是否符合规定的条件，从而决定执行不同的命令。</strong> 有三种格式: </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em">1、if [not] "参数" == "字符串" 待执行的命令 </p>
<p style="TEXT-INDENT: 2em">参数如果等于(not表示不等，下同)指定的字符串，则条件成立，运行命令，否则运行下一句。</p>
<p style="TEXT-INDENT: 2em">例：if "%1"=="a" format a:</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em">2、if [not] exist [路径\]文件名 待执行的命令 </p>
<p style="TEXT-INDENT: 2em">如果有指定的文件，则条件成立，运行命令，否则运行下一句。</p>
<p style="TEXT-INDENT: 2em">如: if exist c:\config.sys type c:\config.sys </p>
<p style="TEXT-INDENT: 2em">表示如果存在c:\config.sys文件，则显示它的内容。</p>
<p style="TEXT-INDENT: 2em"><span style="COLOR: #0000ff">3、if errorlevel &lt;数字&gt; 待执行的命令</span> </p>
<p style="TEXT-INDENT: 2em">很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态)，通过 if errorlevel命令可以判断程序的返回值，根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定 的数字，则条件成立，运行命令，否则运行下一句。</p>
<p style="TEXT-INDENT: 2em">如if errorlevel 2 goto x2</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">二、goto 批处理文件运行到这里将跳到goto所指定的标号</strong>(标号即label，标号用:后跟标准字符串来定义)处，goto语句一般与if配合使用，根据不同的条件来执行不同的命令组。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">如:</p>
<p style="TEXT-INDENT: 2em">goto end </p>
<p style="TEXT-INDENT: 2em">:end </p>
<p style="TEXT-INDENT: 2em">echo this is the end </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">标号用&#8220;:字符串&#8221;来定义，标号所在行不被执行。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">三、choice 使用此命令可以让用户输入一个字符（用于选择），从而根据用户的选择返回不同的errorlevel，然后于if errorlevel配合，根据用户的选择运行不同的命令。</strong></p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">注意：choice命令为DOS或者Windows系统提供的外部命令，不同版本的choice命令语法会稍有不同，请用choice /?查看用法。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">choice的命令语法（该语法为Windows 2003中choice命令的语法，其它版本的choice的命令语法与此大同小异）：</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em">CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">描述:</p>
<p style="TEXT-INDENT: 2em">该工具允许用户从选择列表选择一个项目并返回所选项目的索引。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">参数列表:</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">/C&nbsp;&nbsp;&nbsp;&nbsp; choices</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定要创建的选项列表。默认列表是 "YN"。</p>
<p style="TEXT-INDENT: 2em"><strong><span style="COLOR: #0000ff">/N</span></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在提示符中隐藏选项列表。提示前面的消息得到显示，选项依旧处于启用状态。</p>
<p style="TEXT-INDENT: 2em"><strong><span style="COLOR: #0000ff">/CS</span></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许选择分大小写的选项。在默认情况下，这个工具是不分大小写的。</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">/T&nbsp;&nbsp;&nbsp;&nbsp; timeout</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 做出默认选择之前，暂停的秒数。可接受的值是从0到 9999。</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;如果指定了 0，就不会有暂停，默认选项会得到选择。</p>
<p style="TEXT-INDENT: 2em"><strong><span style="COLOR: #0000ff">/D&nbsp;&nbsp;&nbsp;&nbsp; choice</span></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选项指定的一组选择中;</p>
<p style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时，必须用 /T 指定 nnnn。</p>
<p style="TEXT-INDENT: 2em"><strong><span style="COLOR: #0000ff">/M&nbsp;&nbsp;&nbsp;&nbsp; text</span></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定提示之前要显示的消息。如果没有指定，工具只显示提示。</p>
<p style="TEXT-INDENT: 2em"><strong><span style="COLOR: #0000ff">/?</span></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示帮助消息。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">注意:</p>
<p style="TEXT-INDENT: 2em">ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回1，第二个选择返回2，等等。如果用户按的键不是有效的选择，该工具会发出警告响声。如果该工具检测到错误状态，它会返回255的ERRORLEVEL值。如果用户按Ctrl+Break或Ctrl+C键，该工具会返回0的ERRORLEVEL值。在一个批程序中使用 ERRORLEVEL 参数时，将参数降序排列。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">示例:</p>
<p style="TEXT-INDENT: 2em">CHOICE /? </p>
<p style="TEXT-INDENT: 2em">CHOICE /C YNC /M "确认请按 Y，否请按 N，或者取消请按 C。"</p>
<p style="TEXT-INDENT: 2em">CHOICE /T 10 /C ync /CS /D y</p>
<p style="TEXT-INDENT: 2em">CHOICE /C ab /M "选项 1 请选择 a，选项 2 请选择 b。"</p>
<p style="TEXT-INDENT: 2em">CHOICE /C ab /N /M "选项 1 请选择 a，选项 2 请选择 b。"</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">如果我运行命令：CHOICE /C YNC /M "确认请按 Y，否请按 N，或者取消请按 C。"</p>
<p style="TEXT-INDENT: 2em">屏幕上会显示：</p>
<p style="TEXT-INDENT: 2em">确认请按 Y，否请按 N，或者取消请按 C。 [Y,N,C]?</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">例：test.bat的内容如下（注意，用if errorlevel判断返回值时，要按返回值从高到低排列）: </p>
<p style="TEXT-INDENT: 2em">@echo off </p>
<p style="TEXT-INDENT: 2em">choice /C dme /M "defrag,mem,end"</p>
<p style="TEXT-INDENT: 2em">if errorlevel 3 goto end</p>
<p style="TEXT-INDENT: 2em">if errorlevel 2 goto mem </p>
<p style="TEXT-INDENT: 2em">if errotlevel 1 goto defrag </p>
<p style="TEXT-INDENT: 2em">:defrag </p>
<p style="TEXT-INDENT: 2em">c:\dos\defrag </p>
<p style="TEXT-INDENT: 2em">goto end </p>
<p style="TEXT-INDENT: 2em">:mem </p>
<p style="TEXT-INDENT: 2em">mem </p>
<p style="TEXT-INDENT: 2em">goto end </p>
<p style="TEXT-INDENT: 2em">:end </p>
<p style="TEXT-INDENT: 2em">echo good bye</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">此批处理运行后，将显示&#8220;defrag,mem,end[D,M,E]?&#8221; ，用户可选择 d m e ，然后if语句根据用户的选择作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的 程序段，每个程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，批处理运行结束。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em"><strong>四、for 循环命令，只要条件符合，它将多次执行同一命令。 </strong></p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">语法：</p>
<p style="TEXT-INDENT: 2em">对一组文件中的每一个文件执行某个特定命令。</p>
<p style="COLOR: #0000ff; TEXT-INDENT: 2em">FOR %%variable IN (set) DO command [command-parameters]</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">%%variable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定一个单一字母可替换的参数。</p>
<p style="TEXT-INDENT: 2em">(set)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定一个或一组文件。可以使用通配符。</p>
<p style="TEXT-INDENT: 2em">command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定对每个文件执行的命令。</p>
<p style="TEXT-INDENT: 2em">command-parameters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为特定命令指定参数或命令行开关。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">例如，一个批处理文件中有一行：</p>
<p style="TEXT-INDENT: 2em">for %%c in (*.bat *.txt) do type %%c </p>
<p style="TEXT-INDENT: 2em">则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">批处理示例 </p>
<p style="TEXT-INDENT: 2em">1. IF-EXIST</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">1)首先用记事本在C:\建立一个test1.bat批处理文件，文件内容如下： </p>
<p style="TEXT-INDENT: 2em">@echo off </p>
<p style="TEXT-INDENT: 2em">IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT </p>
<p style="TEXT-INDENT: 2em">IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist </p>
<p style="TEXT-INDENT: 2em">然后运行它：</p>
<p style="TEXT-INDENT: 2em">C:\&gt;TEST1.BAT </p>
<p style="TEXT-INDENT: 2em">如果C:\存在AUTOEXEC.BAT文件，那么它的内容就会被显示出来，如果不存在，批处理就会提示你该文件不存在。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">2)接着再建立一个test2.bat文件，内容如下： </p>
<p style="TEXT-INDENT: 2em">@ECHO OFF </p>
<p style="TEXT-INDENT: 2em">IF EXIST \%1 TYPE \%1 </p>
<p style="TEXT-INDENT: 2em">IF NOT EXIST \%1 ECHO \%1 does not exist </p>
<p style="TEXT-INDENT: 2em">执行: </p>
<p style="TEXT-INDENT: 2em">C:\&gt;TEST2 AUTOEXEC.BAT </p>
<p style="TEXT-INDENT: 2em">该命令运行结果同上。</p>
<p style="TEXT-INDENT: 2em">说明： </p>
<p style="TEXT-INDENT: 2em">(1) IF EXIST 是用来测试文件是否存在的，格式为 </p>
<p style="TEXT-INDENT: 2em">IF EXIST [路径+文件名] 命令 </p>
<p style="TEXT-INDENT: 2em">(2) test2.bat文件中的%1是参数，DOS允许传递9个批参数信息给批处理文件，分别为%1~%9(%0表示test2命令本身) ，这有点象编程中的实参和形参的关系，%1是形参，AUTOEXEC.BAT是实参。</p>
<p style="TEXT-INDENT: 2em">3) 更进一步的，建立一个名为TEST3.BAT的文件，内容如下： </p>
<p style="TEXT-INDENT: 2em">@echo off</p>
<p style="TEXT-INDENT: 2em">IF "%1" == "A" ECHO XIAO </p>
<p style="TEXT-INDENT: 2em">IF "%2" == "B" ECHO TIAN </p>
<p style="TEXT-INDENT: 2em">IF "%3" == "C" ECHO YIN </p>
<p style="TEXT-INDENT: 2em">如果运行：</p>
<p style="TEXT-INDENT: 2em">C:\&gt;TEST3 A B C </p>
<p style="TEXT-INDENT: 2em">屏幕上会显示:</p>
<p style="TEXT-INDENT: 2em">XIAO</p>
<p style="TEXT-INDENT: 2em">TIAN</p>
<p style="TEXT-INDENT: 2em">YIN</p>
<p style="TEXT-INDENT: 2em">如果运行：</p>
<p style="TEXT-INDENT: 2em">C:\&gt;TEST3 A B </p>
<p style="TEXT-INDENT: 2em">屏幕上会显示</p>
<p style="TEXT-INDENT: 2em">XIAO</p>
<p style="TEXT-INDENT: 2em">TIAN </p>
<p style="TEXT-INDENT: 2em">在这个命令执行过程中，DOS会将一个空字符串指定给参数%3。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">2、IF-ERRORLEVEL</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">建立TEST4.BAT，内容如下：</p>
<p style="TEXT-INDENT: 2em">@ECHO OFF </p>
<p style="TEXT-INDENT: 2em">XCOPY C:\AUTOEXEC.BAT D:</p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 1 ECHO 文件拷贝失败 </p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 0 ECHO 成功拷贝文件 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">然后执行文件:</p>
<p style="TEXT-INDENT: 2em">C:\&gt;TEST4</p>
<p style="TEXT-INDENT: 2em">如果文件拷贝成功，屏幕就会显示&#8220;成功拷贝文件&#8221;，否则就会显示&#8220;文件拷贝失败&#8221;。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的，注意只是上一个命令的返回值，而且返回值必须依照从大到小次序顺序判断。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">因此下面的批处理文件是错误的：</p>
<p style="TEXT-INDENT: 2em">@ECHO OFF </p>
<p style="TEXT-INDENT: 2em">XCOPY C:\AUTOEXEC.BAT D:\ </p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 0 ECHO 成功拷贝文件 </p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 1 ECHO 未找到拷贝文件 </p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 </p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 </p>
<p style="TEXT-INDENT: 2em">IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 </p>
<p style="TEXT-INDENT: 2em">无论拷贝是否成功，后面的： </p>
<p style="TEXT-INDENT: 2em">未找到拷贝文件 </p>
<p style="TEXT-INDENT: 2em">用户通过ctrl-c中止拷贝操作 </p>
<p style="TEXT-INDENT: 2em">预置错误阻止文件拷贝操作 </p>
<p style="TEXT-INDENT: 2em">拷贝过程中写盘错误</p>
<p style="TEXT-INDENT: 2em">都将显示出来。 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">以下就是几个常用命令的返回值及其代表的意义： </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong><span style="COLOR: #0000ff">backup</span></strong> </p>
<p style="TEXT-INDENT: 2em">0 备份成功 </p>
<p style="TEXT-INDENT: 2em">1 未找到备份文件 </p>
<p style="TEXT-INDENT: 2em">2 文件共享冲突阻止备份完成 </p>
<p style="TEXT-INDENT: 2em">3 用户用ctrl-c中止备份 </p>
<p style="TEXT-INDENT: 2em">4 由于致命的错误使备份操作中止 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">diskcomp </strong></p>
<p style="TEXT-INDENT: 2em">0 盘比较相同 </p>
<p style="TEXT-INDENT: 2em">1 盘比较不同 </p>
<p style="TEXT-INDENT: 2em">2 用户通过ctrl-c中止比较操作 </p>
<p style="TEXT-INDENT: 2em">3 由于致命的错误使比较操作中止 </p>
<p style="TEXT-INDENT: 2em">4 预置错误中止比较 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">diskcopy </strong></p>
<p style="TEXT-INDENT: 2em">0 盘拷贝操作成功 </p>
<p style="TEXT-INDENT: 2em">1 非致命盘读/写错 </p>
<p style="TEXT-INDENT: 2em">2 用户通过ctrl-c结束拷贝操作 </p>
<p style="TEXT-INDENT: 2em">3 因致命的处理错误使盘拷贝中止 </p>
<p style="TEXT-INDENT: 2em">4 预置错误阻止拷贝操作 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">format </strong></p>
<p style="TEXT-INDENT: 2em">0 格式化成功 </p>
<p style="TEXT-INDENT: 2em">3 用户通过ctrl-c中止格式化处理 </p>
<p style="TEXT-INDENT: 2em">4 因致命的处理错误使格式化中止 </p>
<p style="TEXT-INDENT: 2em">5 在提示&#8220;proceed with format（y/n）?&#8221;下用户键入n结束 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em"><strong style="COLOR: #0000ff">xcopy</strong> </p>
<p style="TEXT-INDENT: 2em">0 成功拷贝文件 </p>
<p style="TEXT-INDENT: 2em">1 未找到拷贝文件 </p>
<p style="TEXT-INDENT: 2em">2 用户通过ctrl-c中止拷贝操作 </p>
<p style="TEXT-INDENT: 2em">4 预置错误阻止文件拷贝操作 </p>
<p style="TEXT-INDENT: 2em">5 拷贝过程中写盘错误 </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">3、IF STRING1 == STRING2</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">建立TEST5.BAT，文件内容如下： </p>
<p style="TEXT-INDENT: 2em">@echo off </p>
<p style="TEXT-INDENT: 2em">IF "%1" == "A" FORMAT A: </p>
<p style="TEXT-INDENT: 2em">执行： </p>
<p style="TEXT-INDENT: 2em">C:\&gt;TEST5 A </p>
<p style="TEXT-INDENT: 2em">屏幕上就出现是否将A:盘格式化的内容。 </p>
<p style="TEXT-INDENT: 2em">注意：为了防止参数为空的情况，一般会将字符串用双引号（或者其它符号，注意不能使用保留符号）括起来。</p>
<p style="TEXT-INDENT: 2em">如：if [%1]==[A] 或者 if %1*==A*</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">4、GOTO</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">建立TEST6.BAT，文件内容如下： </p>
<p style="TEXT-INDENT: 2em">@ECHO OFF </p>
<p style="TEXT-INDENT: 2em">IF EXIST C:\AUTOEXEC.BAT GOTO _COPY </p>
<p style="TEXT-INDENT: 2em">GOTO _DONE</p>
<p style="TEXT-INDENT: 2em">:_COPY </p>
<p style="TEXT-INDENT: 2em">COPY C:\AUTOEXEC.BAT D:\ </p>
<p style="TEXT-INDENT: 2em">:_DONE </p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">注意： </p>
<p style="TEXT-INDENT: 2em">(1) 标号前是ASCII字符的冒号":"，冒号与标号之间不能有空格。 </p>
<p style="TEXT-INDENT: 2em">(2) 标号的命名规则与文件名的命名规则相同。</p>
<p style="TEXT-INDENT: 2em">(3) DOS支持最长八位字符的标号，当无法区别两个标号时，将跳转至最近的一个标号。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">5、FOR</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">建立C:\TEST7.BAT，文件内容如下： </p>
<p style="TEXT-INDENT: 2em">@ECHO OFF </p>
<p style="TEXT-INDENT: 2em">FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C </p>
<p style="TEXT-INDENT: 2em">运行： </p>
<p style="TEXT-INDENT: 2em">C:&gt;TEST7</p>
<p style="TEXT-INDENT: 2em">执行以后，屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来（不包括隐藏文件）。</p>
<p style="TEXT-INDENT: 2em">&nbsp;</p>
<p style="TEXT-INDENT: 2em">变量 类型 说明 </p>
<p style="TEXT-INDENT: 2em">%ALLUSERSPROFILE% 局部 返回所有&#8220;用户配置文件&#8221;的位置。 </p>
<p style="TEXT-INDENT: 2em">%APPDATA% 局部 返回默认情况下应用程序存储数据的位置。 </p>
<p style="TEXT-INDENT: 2em">%CD% 局部 返回当前目录字符串。 </p>
<p style="TEXT-INDENT: 2em">%CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。 </p>
<p style="TEXT-INDENT: 2em">%CMDEXTVERSION% 系统 返回当前的&#8220;命令处理程序扩展&#8221;的版本号。 </p>
<p style="TEXT-INDENT: 2em">%COMPUTERNAME%&nbsp; 系统 返回计算机的名称。 </p>
<p style="TEXT-INDENT: 2em">%COMSPEC%&nbsp; 系统 返回命令行解释器可执行程序的准确路径。 </p>
<p style="TEXT-INDENT: 2em">%DATE%&nbsp; 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息，请参阅 Date。 </p>
<p style="TEXT-INDENT: 2em">%ERRORLEVEL%&nbsp; 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。 </p>
<p style="TEXT-INDENT: 2em">%HOMEDRIVE%&nbsp; 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在&#8220;本地用户和组&#8221;中指定的。 </p>
<p style="TEXT-INDENT: 2em">%HOMEPATH%&nbsp; 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在&#8220;本地用户和组&#8221;中指定的。 </p>
<p style="TEXT-INDENT: 2em">%HOMESHARE%&nbsp; 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在&#8220;本地用户和组&#8221;中指定的。 </p>
<p style="TEXT-INDENT: 2em">%LOGONSEVER%&nbsp; 局部 返回验证当前登录会话的域控制器的名称。 </p>
<p style="TEXT-INDENT: 2em">%NUMBER_OF_PROCESSORS%&nbsp; 系统 指定安装在计算机上的处理器的数目。 </p>
<p style="TEXT-INDENT: 2em">%OS%&nbsp; 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。 </p>
<p style="TEXT-INDENT: 2em">%PATH% 系统 指定可执行文件的搜索路径。 </p>
<p style="TEXT-INDENT: 2em">%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。 </p>
<p style="TEXT-INDENT: 2em">%PROCESSOR_ARCHITECTURE%&nbsp; 系统 返回处理器的芯片体系结构。值: x86，IA64。 </p>
<p style="TEXT-INDENT: 2em">%PROCESSOR_IDENTFIER% 系统 返回处理器说明。 </p>
<p style="TEXT-INDENT: 2em">%PROCESSOR_LEVEL%&nbsp; 系统 返回计算机上安装的处理器的型号。 </p>
<p style="TEXT-INDENT: 2em">%PROCESSOR_LEVEL% 系统 返回处理器的版本号。 </p>
<p style="TEXT-INDENT: 2em">%PROMPT% 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 </p>
<p style="TEXT-INDENT: 2em">%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。 </p>
<p style="TEXT-INDENT: 2em">%SYSTEMDRIVE% 系统 返回包含 Windows XP 根目录（即系统根目录）的驱动器。 </p>
<p style="TEXT-INDENT: 2em">%SYSTEMROOT%&nbsp; 系统 返回 Windows XP 根目录的位置。 </p>
<p style="TEXT-INDENT: 2em">%TEMP% and %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP，而其它应用程序则需要 TMP。 </p>
<p style="TEXT-INDENT: 2em">%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息，请参阅 Time。 </p>
<p style="TEXT-INDENT: 2em">%USERDOMAIN% 局部 返回包含用户帐户的域的名称。 </p>
<p style="TEXT-INDENT: 2em">%USERNAME% 局部 返回当前登录的用户的名称。 </p>
<p style="TEXT-INDENT: 2em">%UserPrefix% 局部 返回当前用户的配置文件的位置。 </p>
<p style="TEXT-INDENT: 2em">%WINDIR% 系统 返回操作系统目录的位置。</p>
</pre>
<img src ="http://www.cppblog.com/guyuecanhui/aggbug/76571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guyuecanhui/" target="_blank">古月残辉</a> 2009-03-14 13:00 <a href="http://www.cppblog.com/guyuecanhui/articles/76571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>string,CString,char*的互相转换</title><link>http://www.cppblog.com/guyuecanhui/articles/76569.html</link><dc:creator>古月残辉</dc:creator><author>古月残辉</author><pubDate>Sat, 14 Mar 2009 04:52:00 GMT</pubDate><guid>http://www.cppblog.com/guyuecanhui/articles/76569.html</guid><wfw:comment>http://www.cppblog.com/guyuecanhui/comments/76569.html</wfw:comment><comments>http://www.cppblog.com/guyuecanhui/articles/76569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guyuecanhui/comments/commentRss/76569.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guyuecanhui/services/trackbacks/76569.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">string 转 CString</span><br>CString.format("%s", string.c_str());</p>
<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">char* 转 CString</span><br>CString.format("%s", char*);</p>
<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">char* 转 string</span><br>string s(char *);</p>
<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">string 转 char *</span><br>char *p = string.c_str();</p>
<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">CString 转 string</span><br>string s(CString.GetBuffer());</p>
<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">1，string -&gt; CString</span><br>CString.format("%s", string.c_str());<br>用c_str()确实比data()要好.<br><span style="COLOR: #0000ff">2，char -&gt; string</span><br>string s(char *);<br>你的只能初始化，在不是初始化的地方最好还是用assign().<br><span style="COLOR: #0000ff">3,CString -&gt; string</span><br>string s(CString.GetBuffer());<br>GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.</p>
<p style="FONT-FAMILY: 微软雅黑">《C++标准函数库》中说的<br>有三个函数可以将字符串的内容转换为字符数组和C—string<br>1.data(),返回没有&#8221;\0&#8220;的字符串数组<br>2,c_str()，返回有&#8221;\0&#8220;的字符串数组<br>3，copy()</p>
<p style="FONT-FAMILY: 微软雅黑"><br><span style="COLOR: #0000ff">CString互转int</span><br>将字符转换为整数，可以使用atoi、_atoi64或atol。<br>而将数字转换为CString变量，可以使用CString的Format函数。如<br>CString s;<br>int i = 64;<br>s.Format("%d", i)<br>Format函数的功能很强，值得你研究一下。</p>
<p style="FONT-FAMILY: 微软雅黑">void CStrDlg::OnButton1()<br>{<br>// TODO: Add your control notification handler code here<br>CString<br>ss="1212.12";<br>int temp=atoi(ss);<br>CString aa;<br>aa.Format("%d",temp);<br>AfxMessageBox("var is " + aa);<br>}</p>
<p style="FONT-FAMILY: 微软雅黑">sart.Format("%s",buf);</p>
<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">CString互转char*</span></p>
<p style="FONT-FAMILY: 微软雅黑">///char * TO cstring<br>CString strtest;<br>char * charpoint;<br>charpoint="give string a value";<br>strtest=charpoint;</p>
<p style="FONT-FAMILY: 微软雅黑">///cstring TO char *<br>charpoint=strtest.GetBuffer(strtest.GetLength());</p>
<p style="FONT-FAMILY: 微软雅黑">标准C里没有string,char *==char []==string</p>
<p style="FONT-FAMILY: 微软雅黑">可以用CString.Format("%s",char *)这个方法来将char *转成CString。要把CString转成char *，用操作符（LPCSTR）CString就可以了。</p>
<p style="FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff">CString转换 char[100]</span></p>
<p style="FONT-FAMILY: 微软雅黑">char a[100];<br>CString str("aaaaaa");<br>strncpy(a,(LPCTSTR)str,sizeof(a));<br></p>
<img src ="http://www.cppblog.com/guyuecanhui/aggbug/76569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guyuecanhui/" target="_blank">古月残辉</a> 2009-03-14 12:52 <a href="http://www.cppblog.com/guyuecanhui/articles/76569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dos批处理中的符号</title><link>http://www.cppblog.com/guyuecanhui/articles/76568.html</link><dc:creator>古月残辉</dc:creator><author>古月残辉</author><pubDate>Sat, 14 Mar 2009 04:48:00 GMT</pubDate><guid>http://www.cppblog.com/guyuecanhui/articles/76568.html</guid><wfw:comment>http://www.cppblog.com/guyuecanhui/comments/76568.html</wfw:comment><comments>http://www.cppblog.com/guyuecanhui/articles/76568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guyuecanhui/comments/commentRss/76568.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guyuecanhui/services/trackbacks/76568.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><strong><span style="COLOR: #0000ff">@</span> </strong></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">隐藏命令的回显。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><strong><span style="COLOR: #0000ff">~</span> </strong></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在for中表示使用增强的变量扩展； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set中表示使用扩展环境变量指定位置的字符串； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中表示按位取反。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong style="COLOR: #0000ff">% </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">使用两个%包含一个字符串表示引用环境变量。比如一个%time%可以扩展到当前的系统时间; </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">单个%紧跟0-9的一个数字表示引用命令行参数； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">用于for中表示引用循环变量； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">连续的两个%表示执行时脱为一个%。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>^ </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">取消转义字符，即将所有转义字符的转义作用关闭。比如要在屏幕显示一些特殊的字符,比如&gt; &gt;&gt; ^等时,就可以在其前面加一个^符号来显示这个^后面的字符了,^^就是显示一个^,^就是显示一个字符了; </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中是按位异； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r的[]中表示不匹配指定的字符集。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong style="COLOR: #0000ff">&amp;</strong> </font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">命令连接字符。比如我要在一行文本上同时执行两个命令,就可以用&amp;命令连接这两个命令； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中是按位与。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font style="COLOR: #0000ff" size=4><strong>*</strong> </font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">代表任意个任意字符,就是我们通常所说的"通配符";比如想在c盘的根目录查找c盘根目录里所有的文本文件(.txt),那么就可以输入命令"dir c:/*.txt"； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中是乘法。比如"set/a x=4*2",得到的结果是8； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r中表示将前一个字符多次匹配。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font style="COLOR: #0000ff" size=4><strong>()</strong> </font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">命令包含或者是具有优先权的界定符吧,比如for命令要用到这个(),我们还可以在if,echo等命令中见到它的身影； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong style="COLOR: #0000ff">-</strong> </font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">范围表示符,比如日期的查找,for命令里的tokens操作中就可以用到这个字符； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r中连接两个字符表示匹配范围； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">-跟在某些命令的/后表示取反向的开关。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>+ </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">主要是在copy命令里面会用到它,表示将很多个文件合并为一个文件,就要用到这个+字符了； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中是加法。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">管道符。就是将上一个命令的输出,作为下一个命令的输入."dir /a/b more"就可以逐屏的显示dir命令所输出的信息; </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中是按位或； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在帮助文档中表示其前后两个开关、选项或参数是二选一的。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>: </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">标签定位符,可以接受goto命令所指向的标签。比如在批处理文件里面定义了一个":begin"标签,用"goto begin"命令就可以转到":begin"变迁后面来执行批处理命令了。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>" " </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">界定符,在表示带有空格的路径时常要用""来将路径括起来,在一些命令里面也需要" "符号； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在for/f中将表示它们包含的内容当作字符串分析； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在for/f "usebackq"表示它们包含的内容当作文件路径并分析其文件的内容； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在其它情况下表示其中的内容是一个完整的字符串，其中的&gt;、&gt;&gt;、&lt;、&amp;、、空格等不再转义。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff"><strong>/</strong></span> </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">表示其后的字符（串）是命令的功能开关（选项）。比如"dir /s/b/a-d"表示"dir"命令指定的不同的参数； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中表示除法。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><span style="COLOR: #0000ff"><strong>&gt;</strong></span> </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">命令重定向符,将其前面的命令的输出结果重新定向到其后面的设备中去，后面的设备中的内容被覆盖。比如可以用"dir &gt; lxmxn.txt"将"dir"命令的结果输出到"lxmxn.txt"这个文本文件中去； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r中表示匹配单词的右边界，需要配合转义字符/使用。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>&gt;&gt; </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">命令重定向符。将其前面的命令的输出结果重新定向到其后面的设备中去，后面设备中的内容没有被覆盖。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong style="COLOR: #0000ff">&lt;</strong></font> </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">将其后面的文件的内容作为其前面命令的输入。 </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r中表示匹配单词的左边界，需要配合转义字符/使用。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>= </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">赋值符号,用于变量的赋值。比如"set a=windows"的意思意思是将"<a href="http://www.zmke.com/"><font color=#bf8017>windows</font></a>"这个字符串赋给变量"a"； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set/a中表示算术运算,比如"set /a x=5-6*5"。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>/ </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">这个"/"符号在有的情况下,代表的是当前路径的根目录.比如当前目录在c:/windows/system32下,那么你"dir /"的话,就相当与"dir c:/" </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r中表示正则转义字符。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>'' </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在for/f中表示将它们包含的内容当作命令行执行并分析其输出； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在for/f "usebackq"中表示将它们包含的字符串当作字符串分析。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><strong><font size=4>.&nbsp;</font>&nbsp;</strong></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在路径的/后紧跟或者单独出现时： </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">一个.表示当前目录； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">两个.表示上一级目录； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在路径中的文件名中出现时： </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">最后的一个.表示主文件名与扩展文件名的分隔。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><strong><font size=4>&amp;&amp;</font> </strong></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">连接两个命令,当&amp;&amp;前的命令成功时,才执行&amp;&amp;后的命令； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">连接两个命令,当前的命令失败时,才执行后的命令。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>$ </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr命令里面表示一行的结束。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>`` </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在for/f中表示它们所包含的内容当作命令行执行并分析它的输出。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>[] </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在帮助文档表示其中的开关、选项或参数是可选的； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r中表示按其中指定的字符集匹配。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><font size=4><strong>? </strong></font></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在findstr/r中表示在此位置匹配一个任意字符； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">?在路径中表示在此位置通配任意一个字符； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">紧跟在/后表示获取命令的帮助文档。 </p>
<p style="FONT-SIZE: 14pt; COLOR: #0000ff; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑"><strong><font size=4>!</font> </strong></p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用； </p>
<p style="FONT-SIZE: 14pt; TEXT-INDENT: 2em; FONT-FAMILY: 微软雅黑">在set /a中表示逻辑非。比如set /a a=!0,这时a就表示逻辑1。</p>
<img src ="http://www.cppblog.com/guyuecanhui/aggbug/76568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guyuecanhui/" target="_blank">古月残辉</a> 2009-03-14 12:48 <a href="http://www.cppblog.com/guyuecanhui/articles/76568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>