<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Think Again &#187; 编译</title>
	<atom:link href="http://www.thinkagain.cn/archives/tag/%e7%bc%96%e8%af%91/feed" rel="self" type="application/rss+xml" />
	<link>http://www.thinkagain.cn</link>
	<description>Inspire thinking, inspire creativity, inspire future.</description>
	<lastBuildDate>Wed, 01 Feb 2012 07:31:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Java:自己动手做个编译的bat文件</title>
		<link>http://www.thinkagain.cn/archives/40.html</link>
		<comments>http://www.thinkagain.cn/archives/40.html#comments</comments>
		<pubDate>Mon, 16 Jan 2006 07:57:57 +0000</pubDate>
		<dc:creator>山之岚</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[编译]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://lovepc.i-lady.cn/archives/40</guid>
		<description><![CDATA[今天在编译java的时候，想到每次编译文件都要这么麻烦。输入javac，要编译的文件路径，然后还要输入-d 和指定的放置class文件目录，为何不做个bat批处理解决呢。问题应该很简单的。于是，上... ]]></description>
			<content:encoded><![CDATA[<p> 今天在编译java的时候，想到每次编译文件都要这么麻烦。输入javac，要编译的文件路径，然后还要输入-d 和指定的放置class文件目录，为何不做个bat批处理解决呢。问题应该很简单的。于是，上网查了下资料。做了个make.bat，然后在系统path 里面设置了make文件的存放位置，在classpath里面添上准备存放class文件的路径。现在可在任意一个dos目录下，只需输入make和要编 译的文件路径就可以了。make.bat代码只有2句，如下：</p>
<p>@echo off<br />
◎javac %1 -d C:\je\class</p>
<p>第一行：echo off 表示在此语句后所有运行的命令都不显示命令行本身。第二行：调用javac命令编译文件，用%1来获取make后面跟着的要编译的文件路径，-d C:\je\class实际上就是javac的命令行参数，作用就是指定javac将所编译生成的class文件存放在C:\je\class文件夹中。</p>
<p>非常简单吧。却可以省很多输入。bat文件制作好后，一定要在系统path里面设置了make文件的存放位置，这样你就可以在dos的任意目录下运行该批处理文件了。</p>
<p>附上一篇网络上找的，&#8221;教你制作批处理文件&#8221;，转自<a href="http://www.yuese.com/">http://www.yuese.com</a></p>
<p>批 处理文件有时很有用，在咱们论坛最常用的可能是这个修复IE的批处理文件（不管IE问题多大，只要运行这个文件，一般都会有效果）：其次，解决2000、 XP默认共享也有一种方法是作一个批处理文件加到“启动”中。 扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。<br />
首先批处理文件是一个文本文件，这个文件的每一行都是一条DOS命令（大部分时候就好象我们在DOS提示符下执行的命令行一样），你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。</p>
<p>其 次，批处理文件是一种简单的程序，可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程，在批处理中也可以使用循环语句(for)来 循环执行一条命令。当然，批处理文件的编程能力与C语言等编程语句比起来是十分有限的，也是十分不规范的。批处理的程序语句就是一条条的DOS命令（包括 内部命令和外部命令），而批处理的能力主要取决于你所使用的命令。</p>
<p>第三，每个编写好的批处理文件都相当于一个DOS的外部命令，你可以把它 所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch目录（例如C:\ BATCH），然后将所有你编写的批处理文件放到该目录中，这样只要在path中设置上c:\batch，你就可以在任意位置运行所有你编写的批处理程 序。</p>
<p>第四，在DOS和Win9x/Me系统下，C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件，每次系统启动时 会自动运行该文件，你可以将系统每次启动时都要运行的命令放入该文件中，例如设置搜索路径，调入鼠标驱动和磁盘缓存，设置系统环境变量等。下面是一个运行 于Windows 98下的autoexec.bat的示例：<br />
@ECHO OFF<br />
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH<br />
LH SMARTDRV.EXE /X<br />
LH DOSKEY.COM /INSERT<br />
LH CTMOUSE.EXE<br />
SET TEMP=D:\TEMP<br />
SET TMP=D:\TEMP<br />
批处理的作用<br />
简单的说，批处理的作用就是自动的连续执行多条命令。</p>
<p>这里先讲一个最简单的应用：在启动wps软件时，每次都必须执行（&gt;前面内容表示DOS提示符）：<br />
C:\&gt;cd wps<br />
C:\WPS&gt;spdos<br />
C:\WPS&gt;py<br />
C:\WPS&gt;wbx<br />
C:\WPS&gt;wps<br />
如果每次用WPS之前都这样执行一遍，您是不是觉得很麻烦呢？</p>
<p>好了，用批处理，就可以实现将这些麻烦的操作简单化，首先我们编写一个runwps.bat批处理文件，内容如下：<br />
@echo off<br />
c:<br />
cd\wps<br />
spdos<br />
py<br />
wbx<br />
wps<br />
cd\</p>
<p>以后，我们每次进入wps，只需要运行runwps这个批处理文件即可。</p>
<p>常用命令</p>
<p>echo、@、call、pause、rem(小技巧：用::代替rem)是批处理文件最常用的几个命令，我们就从他们开始学起。<br />
echo 表示显示此命令后的字符<br />
echo off 表示在此语句后所有运行的命令都不显示命令行本身<br />
@与echo off相象，但它是加在每个命令行的最前面，表示运行时不显示这一行的命令行（只能影响当前行）。<br />
call 调用另一个批处理文件（如果不用call而直接调用别的批处理文件，那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令）。<br />
pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue&#8230;的提示，等待用户按任意键后继续<br />
rem 表示此命令后的字符为解释行（注释），不执行，只是给自己今后参考用的（相当于程序中的注释）。</p>
<p>例1：用edit编辑a.bat文件，输入下列内容后存盘为c:\a.bat，执行该批处理文件后可实现：将根目录中所有文件写入 a.txt中，启动UCDOS，进入WPS等功能。</p>
<p>批处理文件的内容为: 　　　　　　　 命令注释：</p>
<p>@echo off　　　　　　　　　　　不显示后续命令行及当前命令行<br />
dir c:\*.* &gt;a.txt　　　　　　　将c盘文件列表写入a.txt<br />
call c:\ucdos\ucdos.bat　　　　调用ucdos<br />
echo 你好 　　　　　　　　　　 显示&#8221;你好&#8221;<br />
pause 　　　　　　　　　　　　 暂停,等待按键继续<br />
rem 准备运行wps 　　　　　　　 注释：准备运行wps<br />
cd ucdos　　　　　　　　　　　 进入ucdos目录<br />
wps 　　　　　　　　　　　　　 运行wps</p>
<p>批处理文件的参数</p>
<p>批处理文件还可以像C语言的函数一样使用参数（相当于DOS命令的命令行参数），这需要用到一个参数表示符“%”。</p>
<p>%[1-9]表示参数，参数是指在运行批处理文件时在文件名后加的以空格（或者Tab）分隔的字符串。变量可以从%0到%9，%0表示批处理命令本身，其它参数字符串用%1到%9顺序表示。</p>
<p>例2：C:根目录下有一批处理文件名为f.bat，内容为：<br />
@echo off<br />
format %1</p>
<p>如果执行C:\&gt;f a:<br />
那么在执行f.bat时，%1就表示a:，这样format %1就相当于format a:，于是上面的命令运行时实际执行的是format a:</p>
<p>例3：C:根目录下一批处理文件名为t.bat，内容为:<br />
@echo off<br />
type %1<br />
type %2</p>
<p>那么运行C:\&gt;t a.txt b.txt<br />
%1 : 表示a.txt<br />
%2 : 表示b.txt<br />
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。<br />
特殊命令</p>
<p>if goto choice for是批处理文件中比较高级的命令，如果这几个你用得很熟练，你就是批处理文件的专家啦。</p>
<p>一、if 是条件语句，用来判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式:</p>
<p>1、if [not] &#8220;参数&#8221; == &#8220;字符串&#8221; 待执行的命令</p>
<p>参数如果等于(not表示不等，下同)指定的字符串，则条件成立，运行命令，否则运行下一句。</p>
<p>例：if &#8220;%1&#8243;==&#8221;a&#8221; format a:</p>
<p>2、if [not] exist [路径\]文件名 待执行的命令<br />
如果有指定的文件，则条件成立，运行命令，否则运行下一句。</p>
<p>如: if exist c:\config.sys type c:\config.sys<br />
表示如果存在c:\config.sys文件，则显示它的内容。</p>
<p>3、if errorlevel &lt;数字&gt; 待执行的命令</p>
<p>很 多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态)，通过if errorlevel命令可以判断程序的返回值，根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数 字，则条件成立，运行命令，否则运行下一句。</p>
<p>如if errorlevel 2 goto x2</p>
<p>二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label，标号用:后跟标准字符串来定义)处，goto语句一般与if配合使用，根据不同的条件来执行不同的命令组。</p>
<p>如:</p>
<p>goto end</p>
<p>:end<br />
echo this is the end</p>
<p>标号用“:字符串”来定义，标号所在行不被执行。</p>
<p>三、choice 使用此命令可以让用户输入一个字符（用于选择），从而根据用户的选择返回不同的errorlevel，然后于if errorlevel配合，根据用户的选择运行不同的命令。</p>
<p>注意：choice命令为DOS或者Windows系统提供的外部命令，不同版本的choice命令语法会稍有不同，请用choice /?查看用法。</p>
<p>choice的命令语法（该语法为Windows 2003中choice命令的语法，其它版本的choice的命令语法与此大同小异）：</p>
<p>CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]</p>
<p>描述:<br />
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。</p>
<p>参数列表:<br />
/C    choices       指定要创建的选项列表。默认列表是 &#8220;YN&#8221;。</p>
<p>/N                  在提示符中隐藏选项列表。提示前面的消息得到显示，<br />
选项依旧处于启用状态。</p>
<p>/CS                 允许选择分大小写的选项。在默认情况下，这个工具<br />
是不分大小写的。</p>
<p>/T    timeout       做出默认选择之前，暂停的秒数。可接受的值是从 0<br />
到 9999。如果指定了 0，就不会有暂停，默认选项<br />
会得到选择。</p>
<p>/D    choice        在 nnnn 秒之后指定默认选项。字符必须在用 /C 选<br />
项指定的一组选择中; 同时，必须用 /T 指定 nnnn。</p>
<p>/M    text          指定提示之前要显示的消息。如果没有指定，工具只<br />
显示提示。</p>
<p>/?                  显示帮助消息。</p>
<p>注意:<br />
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选<br />
择返回 1，第二个选择返回 2，等等。如果用户按的键不是有效的选择，<br />
该工具会发出警告响声。如果该工具检测到错误状态，它会返回 255 的<br />
ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键，该工具会返回 0<br />
的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时，将参数降<br />
序排列。</p>
<p>示例:<br />
CHOICE /?<br />
CHOICE /C YNC /M &#8220;确认请按 Y，否请按 N，或者取消请按 C。&#8221;<br />
CHOICE /T 10 /C ync /CS /D y<br />
CHOICE /C ab /M &#8220;选项 1 请选择 a，选项 2 请选择 b。&#8221;<br />
CHOICE /C ab /N /M &#8220;选项 1 请选择 a，选项 2 请选择 b。&#8221;</p>
<p>如果我运行命令：CHOICE /C YNC /M &#8220;确认请按 Y，否请按 N，或者取消请按 C。&#8221;<br />
屏幕上会显示：<br />
确认请按 Y，否请按 N，或者取消请按 C。 [Y,N,C]?</p>
<p>例：test.bat的内容如下（注意，用if errorlevel判断返回值时，要按返回值从高到低排列）:<br />
@echo off<br />
choice /C dme /M &#8220;defrag,mem,end&#8221;<br />
if errorlevel 3 goto end<br />
if errorlevel 2 goto mem<br />
if errotlevel 1 goto defrag</p>
<p>:defrag<br />
c:\dos\defrag<br />
goto end</p>
<p>:mem<br />
mem<br />
goto end</p>
<p>:end<br />
echo good bye</p>
<p>此 批处理运行后，将显示“defrag,mem,end[D,M,E]?” ，用户可选择d m e ，然后if语句根据用户的选择作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个 程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，批处理运行结束。</p>
<p>四、for 循环命令，只要条件符合，它将多次执行同一命令。</p>
<p>语法：<br />
对一组文件中的每一个文件执行某个特定命令。</p>
<p>FOR %%variable IN (set) DO command [command-parameters]</p>
<p>%%variable  指定一个单一字母可替换的参数。<br />
(set)      指定一个或一组文件。可以使用通配符。<br />
command    指定对每个文件执行的命令。<br />
command-parameters<br />
为特定命令指定参数或命令行开关。</p>
<p>例如一个批处理文件中有一行:<br />
for %%c in (*.bat *.txt) do type %%c</p>
<p>则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。<br />
批处理示例</p>
<p>1. IF-EXIST</p>
<p>1)</p>
<p>首先用记事本在C:\建立一个test1.bat批处理文件，文件内容如下：<br />
@echo off<br />
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT<br />
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist</p>
<p>然后运行它：<br />
C:\&gt;TEST1.BAT</p>
<p>如果C:\存在AUTOEXEC.BAT文件，那么它的内容就会被显示出来，如果不存在，批处理就会提示你该文件不存在。</p>
<p>2)</p>
<p>接着再建立一个test2.bat文件，内容如下：<br />
@ECHO OFF<br />
IF EXIST \%1 TYPE \%1<br />
IF NOT EXIST \%1 ECHO \%1 does not exist</p>
<p>执行:<br />
C:\&gt;TEST2 AUTOEXEC.BAT<br />
该命令运行结果同上。</p>
<p>说明：<br />
(1) IF EXIST 是用来测试文件是否存在的，格式为<br />
IF EXIST [路径+文件名] 命令<br />
(2) test2.bat文件中的%1是参数，DOS允许传递9个批参数信息给批处理文件，分别为%1~%9(%0表示test2命令本身) ，这有点象编程中的实参和形参的关系，%1是形参，AUTOEXEC.BAT是实参。</p>
<p>3) 更进一步的，建立一个名为TEST3.BAT的文件，内容如下：<br />
@echo off<br />
IF &#8220;%1&#8243; == &#8220;A&#8221; ECHO XIAO<br />
IF &#8220;%2&#8243; == &#8220;B&#8221; ECHO TIAN<br />
IF &#8220;%3&#8243; == &#8220;C&#8221; ECHO XIN</p>
<p>如果运行：<br />
C:\&gt;TEST3 A B C<br />
屏幕上会显示:<br />
XIAO<br />
TIAN<br />
XIN</p>
<p>如果运行：<br />
C:\&gt;TEST3 A B<br />
屏幕上会显示<br />
XIAO<br />
TIAN</p>
<p>在这个命令执行过程中，DOS会将一个空字符串指定给参数%3。</p>
<p>2、IF-ERRORLEVEL</p>
<p>建立TEST4.BAT，内容如下：<br />
@ECHO OFF<br />
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败<br />
IF ERRORLEVEL 0 ECHO 成功拷贝文件</p>
<p>然后执行文件:<br />
C:\&gt;TEST4</p>
<p>如果文件拷贝成功，屏幕就会显示“成功拷贝文件”，否则就会显示“文件拷贝失败”。</p>
<p>IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的，注意只是上一个命令的返回值，而且返回值必须依照从大到小次序顺序判断。<br />
因此下面的批处理文件是错误的：<br />
@ECHO OFF<br />
XCOPY C:\AUTOEXEC.BAT D:\<br />
IF ERRORLEVEL 0 ECHO 成功拷贝文件<br />
IF ERRORLEVEL 1 ECHO 未找到拷贝文件<br />
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作<br />
IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作<br />
IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误</p>
<p>无论拷贝是否成功，后面的：</p>
<p>未找到拷贝文件<br />
用户通过ctrl-c中止拷贝操作<br />
预置错误阻止文件拷贝操作<br />
拷贝过程中写盘错误</p>
<p>都将显示出来。</p>
<p>以下就是几个常用命令的返回值及其代表的意义：<br />
backup<br />
0 备份成功<br />
1 未找到备份文件<br />
2 文件共享冲突阻止备份完成<br />
3 用户用ctrl-c中止备份<br />
4 由于致命的错误使备份操作中止</p>
<p>diskcomp<br />
0 盘比较相同<br />
1 盘比较不同<br />
2 用户通过ctrl-c中止比较操作<br />
3 由于致命的错误使比较操作中止<br />
4 预置错误中止比较</p>
<p>diskcopy<br />
0 盘拷贝操作成功<br />
1 非致命盘读/写错<br />
2 用户通过ctrl-c结束拷贝操作<br />
3 因致命的处理错误使盘拷贝中止<br />
4 预置错误阻止拷贝操作</p>
<p>format<br />
0 格式化成功<br />
3 用户通过ctrl-c中止格式化处理<br />
4 因致命的处理错误使格式化中止<br />
5 在提示“proceed with format（y/n）?”下用户键入n结束</p>
<p>xcopy<br />
0 成功拷贝文件<br />
1 未找到拷贝文件<br />
2 用户通过ctrl-c中止拷贝操作<br />
4 预置错误阻止文件拷贝操作<br />
5 拷贝过程中写盘错误</p>
<p>3、IF STRING1 == STRING2</p>
<p>建立TEST5.BAT，文件内容如下：<br />
@echo off<br />
IF &#8220;%1&#8243; == &#8220;A&#8221; FORMAT A:</p>
<p>执行：<br />
C:\&gt;TEST5 A<br />
屏幕上就出现是否将A:盘格式化的内容。</p>
<p>注意：为了防止参数为空的情况，一般会将字符串用双引号（或者其它符号，注意不能使用保留符号）括起来。<br />
如：if [%1]==[A] 或者 if %1*==A*</p>
<p>5、GOTO</p>
<p>建立TEST6.BAT，文件内容如下：<br />
@ECHO OFF<br />
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY<br />
GOTO _DONE<br />
:_COPY<br />
COPY C:\AUTOEXEC.BAT D:\<br />
:_DONE</p>
<p>注意：<br />
(1) 标号前是ASCII字符的冒号&#8221;:&#8221;，冒号与标号之间不能有空格。<br />
(2) 标号的命名规则与文件名的命名规则相同。<br />
(3) DOS支持最长八位字符的标号，当无法区别两个标号时，将跳转至最近的一个标号。</p>
<p>6、FOR</p>
<p>建立C:\TEST7.BAT，文件内容如下：<br />
@ECHO OFF<br />
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C</p>
<p>运行：<br />
C:&gt;TEST7</p>
<p>执行以后，屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来（不包括隐藏文件）。</p>
<hr/><p style="font-size:1.5em;font-weight:bold;">推荐阅读</p><p><i>2006.01.21.9:58.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/41.html" title=" 我想在java中，关于public class 和 class 的问题，应该是每个java初学者都会问">Java:class 和 Pulbic class (0)</a></p><p><i>2006.01.12.11:52.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/36.html" title=" 网上看到的一篇介绍java的文章，很不错。很适合像我这样的初学者看的。">Java学习从入门到精通 (0)</a></p><p><i>2005.12.30.7:50.pm</i>.&nbsp;<a href="http://www.thinkagain.cn/archives/8.html" title=" 由于这学期上情报试验，有一个课题是用java和javascript做一个B2C网站。内容">Java+Tomcat+Mysql（winxp-sp2）环境配置。 (0)</a></p><hr/><p>Copyright &copy; 2012&nbsp;|&nbsp;<a href="http://www.thinkagain.cn">Think Again</a>&nbsp;|&nbsp;<a href="http://www.thinkagain.cn/archives/40.html">原文链接</a></p><img src="http://img.tongji.cn.yahoo.com/710673/ystat.gif"/>]]></content:encoded>
			<wfw:commentRss>http://www.thinkagain.cn/archives/40.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

