Windows XP中的命令行界面Word文档下载推荐.docx
《Windows XP中的命令行界面Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Windows XP中的命令行界面Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
并且,由于
兼容原因,/X与/E:
ON相同,/Y与/E:
OFF相同,并且/R与/C相同。
忽略任何其他命令
行开关。
如果指定了/C或/K,命令行开关后的命令行其余部分将作为命令行处理;
在这种
情况下,会使用下列逻辑处理引号字符("
):
1.如果符合下列所有条件,那么在命令行上的引号字符将被
保留:
-不带/S命令行开关
-整整两个引号字符
-在两个引号字符之间没有特殊字符,特殊字符为下列中的
一个:
(大于符号)
$H Backspace(擦除前一个字符)
$L >
-逻辑移位
-按位“与”
^ -按位“异”
| -按位“或”
=*=/=%=+=-=-赋值
&
=^=|=>
=
-表达式分隔符
如果您使用任何逻辑或取余操作符,您需要将表达式字符串用引号扩起来。
在表达式中
的任何非数字字符串键作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。
如
果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。
这使您可以使用环
境变量值做计算而不用键入那些%符号来得到它们的值。
如果SET/A在命令脚本外的命令
行执行的,那么它显示该表达式的最后值。
该分配的操作符在分配的操作符左边需要一个环境
变量名称。
除十六进制有0x前缀,八进制有0前缀的,数字值为十进位数字。
因此,0x1
2与18和022相同。
请注意八进制公式可能很容易搞混:
08和09是无效的数字,因为8
和9不是有效的八进制位数。
/P命令行开关允许将变量数值设成用户输入的一行输入。
读取输入行之前,显示指定的
promptString。
promptString可以是空的。
环境变量替换已如下增强:
%PATH:
str1=str2%
会扩展PATH环境变量,用"
str2"
代替扩展结果中的每个"
str1"
。
要有效地从扩展结果中删除所有的"
,"
可以是空的。
"
可以以星号打头;
在这种情况下,"
会从扩展结果的开始到str1剩余部分
第一次出现的地方,都一直保持相配。
也可以为扩展名指定子字符串。
~10,5%
会扩展PATH环境变量,然后只使用在扩展结果中从第11个(偏移量10)字符开始的五
个字符。
如果没有指定长度,则采用默认值,即变量数值的余数。
如果两个数字(偏移量和长
度)都是负数,使用的数字则是环境变量数值长度加上指定的偏移量或长度。
~-10%
会提取PATH变量的最后十个字符。
~0,-2%
会提取PATH变量的所有字符,除了最后两个。
终于添加了延迟环境变量扩充的支持。
该支持总是按默认值被停用,但也可以通过CMD.
EXE的/V命令行开关而被启用/停用。
考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境变量扩充是很有用的,而不
是执行的时候。
以下例子说明直接变量扩充的问题:
setVAR=before
if"
%VAR%"
=="
before"
(
setVAR=after
if"
after"
@echoIfyouseethis,itworked
)
不会显示消息,因为在读到第一个IF语句时,BOTHIF语句中的%VAR%会被代替;
原
因是:
它包含IF的文体,IF是一个复合语句。
所以,复合语句中的IF实际上是在比较"
和"
,这两者永远不会相等。
同样,以下这个例子也不会达到预期效果:
setLIST=
for%iin(*)dosetLIST=%LIST%%i
echo%LIST%
原因是它不会在目前的目录中建立一个文件列表,而只是将LIST变量设成找到的最后一
个文件。
这也是因为%LIST%在FOR语句被读取时,只被扩充了一次;
而且,那时的LIST变
量是空的。
因此,我们真正执行的FOR循环是:
for%iin(*)dosetLIST=%i
这个循环继续将LIST设成找到的最后一个文件。
延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行时间扩充环境变量。
如果延
迟的变量扩充被启用,可以将上面例子写成以下所示,以达到预期效果:
!
VAR!
"
for%iin(*)dosetLIST=!
LIST!
%i
如果命令扩展名被启用,有几个动态环境变量可以被扩展,但不会出现在SET显示的变
量列表中。
每次变量数值被扩展时,这些变量数值都会被动态计算。
如果用户用这些名称中任
何一个定义变量,那个定义会替代下面描述的动态定义:
%CD%-扩展到当前目录字符串。
%DATE%-用跟DATE命令同样的格式扩展到当前日期。
%TIME%-用跟TIME命令同样的格式扩展到当前时间。
%RANDOM%-扩展到0和32767之间的任意十进制数字。
%ERRORLEVEL%-扩展到当前ERRORLEVEL数值。
%CMDEXTVERSION%-扩展到当前命令处理器扩展名版本号。
%CMDCMDLINE%-扩展到调用命令处理器的原始命令行。
9、SETLOCAL
开始批处理文件中环境改动的本地化操作。
在执行SETLOCAL之后所做的环境改动只限于
批处理文件。
要还原原先的设置,必须执行ENDLOCAL。
达到批处理文件结尾时,对于该批处
理文件的每个尚未执行的SETLOCAL命令,都会有一个隐含的ENDLOCAL被执行。
SETLOCAL
如果命令扩展名被启用,SETLOCAL会如下改变:
SETLOCAL批命令现在可以接受可选参数:
ENABLEEXTENSIONS/DISABLEEXTENSIONS
启动或停用命令处理器扩展名。
详细信息,请参阅CMD/?
ENABLEDELAYEDEXPANSION/DISABLEDELAYEDEXPANSION
启动或停用延缓环境变量扩展名。
详细信息,请
参阅对SET的介绍。
无论在SETLOCAL命令之前它们的设置是什么,这些修改会一直保留到匹配的ENDLOCAL
命令。
如果有一个参数,SETLOCAL命令将设置ERRORLEVEL的值。
如果有两个有效参数中的一个,该值则为零。
用下列技巧,您可以在批脚本中使用这个来
决定扩展名是否可用:
VERIFYOTHER2>
nul
SETLOCALENABLEEXTENSIONS
IFERRORLEVEL1echoUnabletoenableextensions
这个方法之所以有效,是因为在CMD.EXE的旧版本上,SETLOCAL不设置ERRORLEVEL值
具有不正确参数的VERIFY命令将ERRORLEVEL值初始化成非零值。
10、ENDLOCAL
结束批处理文件中环境改动的本地化操作。
在执行ENDLOCAL之后所做的环境改动不再仅
限于批处理文件。
批处理文件结束后,原先的设置无法还原。
ENDLOCAL
如果命令扩展名被启用,ENDLOCAL会如下改变:
如果相应的SETLOCAL用新的ENABLEEXTENSIONS或DISABLEEXTENSIONS选项启用或停用
了命令扩展名,那么,在ENDLOCAL之后,命令扩展名的启用/停用状态会还原到执行相应的
SETLOCAL命令前的状态。
11、IF
执行批处理程序中的条件处理。
IF[NOT]ERRORLEVELnumbercommand
IF[NOT]string1==string2command
IF[NOT]EXISTfilenamecommand
NOT 指定只有条件为false的情况下,WindowsXP才
应该执行该命令。
ERRORLEVELnumber如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定
条件为true。
string1==string2如果指定的文字字符串匹配,指定条件为true。
EXISTfilename 如果指定的文件名存在,指定条件为true。
command 如果符合条件,指定要执行的命令。
如果指定的
条件为FALSE,命令后可跟一个执行ELSE
关键字后的命令的ELSE命令。
ELSE子句必须在IF之后出现在同一行上。
例如:
IFEXISTfilename.(
delfilename.
)ELSE(
echofilename.missing.
因为del命令需要用一个新行终止,以下子句不会有效:
IFEXISTfilename.delfilename.ELSEechofilename.missing
由于ELSE命令必须与IF命令的尾端在同一行上,以下子句也不会有效:
IFEXISTfilename.delfilename.
ELSEechofilename.missing
如果都放在同一行上,以下子句有效:
IFEXISTfilename.(delfilename.)ELSEechofilename.missing
如果命令扩展名被启用,IF会如下改变:
IFstring1compare-opstring2command
IFCMDEXTVERSIONnumbercommand
IFDEFINEDvariablecommand
其中,比较运算符可以是:
EQU-等于
NEQ-不等于
LSS-小于
LEQ-小于或等于
GTR-大于
GEQ-大于或等于
及/I开关;
如果该开关被指定,则说明要进行的字符串比较不分大小写。
/I开关可以
用于IF的string1==string2的形式上。
这些比较都是通用的;
原因是,如果string1和
string2都是由数字组成的,字符串会被转换成数字,进行数字比较。
CMDEXTVERSION条件的作用跟ERRORLEVEL的一样,除了它是在跟与命令扩展名有关联的
内部版本号比较。
第一个版本是1。
每次对命令扩展名有相当大的增强时,版本号会增加一个
命令扩展名被停用时,CMDEXTVERSION条件不是真的。
如果已定义环境变量,DEFINED条件的作用跟EXISTS的一样,除了它取得一个环境变量
,返回的结果是true。
如果没有名为ERRORLEVEL的环境变量,%ERRORLEVEL%会扩充为ERROLEVEL当前数值的
字符串表达式;
否则,您会得到其数值。
运行程序后,以下语句说明ERRORLEVEL的用法:
gotoanswer%ERRORLEVEL%
:
answer0
echoProgramhadreturncode0
answer1
echoProgramhadreturncode1
您也可以使用以上的数字比较:
IF%ERRORLEVEL%LEQ1gotookay
如果没有名为CMDCMDLINE的环境变量,%CMDCMDLINE%将在CMD.EXE进行任何处理前扩
充为传递给CMD.EXE的原始命令行;
如果没有名为CMDEXTVERSION的环境变量,%CMDEXTVERSION%会扩充为CMDEXTVERSION
当前数值的
字串符表达式;
12、FOR
FOR%variableIN(set)DOcommand[command-parameters]
%variable指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。
可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
在批处理文件中使用FOR命令时,指定变量请使用%%variable而不要用%variable。
变
量名称是区分大小写的,所以%i不同于%I.如果命令扩展名被启用,下列额外的FOR命令
格式会受到支持:
FOR/D%variableIN(set)DOcommand[command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
FOR/R[[drive:
]path]%variableIN(set)DOcommand[command-parameters]
检查以[drive:
]path为根的目录树,指向每个目录中的FOR语句。
如果在/R后没有指
定目录,则使用当前目录。
如果集仅为一个单点(.)字符,则枚举该目录树。
FOR/L%variableIN(start,step,end)DOcommand[command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5)将产生序列12345,(5,-1,1)将产生序列(54321)。
FOR/F["
options"
]%variableIN(file-set)DOcommand[command-parameters]
]%variableIN("
string"
)DOcommand[command-parameters]
]%variableIN('
command'
或者,如果有usebackq选项:
filenameset为一个或多个文件名。
继续到filenameset中的下一个文件之前,每份文
件都已被打开、读取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。
然后用
已找到的符号字符串变量值调用For循环。
以默认方式,/F通过每个文件的每一行中分开的
第一个空白符号。
跳过空白行。
您可通过指定可选"
参数替代默认解析操作。
这个带
引号的字符串包括一个或多个指定不同解析选项的关键字。
这些关键字为:
eol=c -指一个行注释字符的结尾(就一个)
skip=n -指在文件开始时忽略的行数。
delims=xxx -指分隔符集。
这个替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n -指每行的哪一个符号被传递到每个迭代的for本身。
这会导致
额外变量名称的分配。
m-n格式为一个范围。
通过nth符号指定mth。
如果符号字符串中的最
后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
usebackq -指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且一个单引号字符为文字字
符串命令并允许在filenameset中使用双引号扩起文件名称。
某些范例可能有助:
FOR/F"
eol=;
tokens=2,3*delims=,"
%iin(myfile.txt)do@echo%i%j%k
会分析myfile.txt中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个
符号传递给for程序体;
用逗号和/或空格定界符号。
请注意,这个for程序体的语句引用
%i来取得第二个符号,引用%j来取得第三个符号,引用%k来取得第三个符号后的所有剩
余符号。
对于带有空格的文件名,您需要用双引号将文件名括起来。
为了用这种方式来使用双
引号,您还需要使用usebackq选项,否则,双引号会被理解成是用作定义某个要分析的字符
串的。
%i专门在for语句中得到说明,%j和%k是通过tokens=选项专门得到说明的。
您可
以通过tokens=一行指定最多26个符号,只要不试图说明一个高于字母'
z'
或'
Z'
的变量
请记住,FOR变量是单一字母、分大小写和全局的;
而且,同时不能有52个以上都在使用
中。
您还可以在相邻字符串上使用FOR/F分析逻辑;
方法是,用单引号将括号之间的file
nameset括起来。
这样,该字符串会被当作一个文件中的一个单一输入行。
最后,您可以用FOR/F命令来分析命令的输出。
方法是,将括号之间的filenameset
变成一个反括字符串。
该字符串会被当作命令行,传递到一个子CMD.EXE,其输出会被抓进内
存,并被当作文件分析。
因此,以下例子:
usebackqdelims=="
%iIN(`set`)DO@echo%i
会枚举当前环境中的环境变量名称。
另外,FOR变量参照的替换已被增强。
您现在可以使用下列选项语法:
~I -删除任何引号("
),扩充%I
%~fI -将%I扩充到一个完全合格的路径名
%~dI -仅将%I扩充到一个驱动器号
%~pI -仅将%I扩充到一个路径
%~nI -仅将%I扩充到一个文件名
%~xI -仅将%I扩充到一个文件扩展名
%~sI -扩充的路径只含有短名
%~aI -将%I扩充到文件的文件属性
%~tI -将%I扩充到文件的日期/时间
%~zI -将%I扩充到文件的大小
%~$PATH:
I-查找列在路径环境变量的目录,并将%I扩充到找到的第一个完全合格的名
称。
如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串
可以组合修饰符来得到多重结果:
%~dpI -仅将%I扩充到一个驱动器号和路径
%~nxI -仅将%I扩充到一个文件名和扩展名
%~fsI -仅将%I扩充到一个带有短名的完整路径名
%~dp$PATH:
i-查找列在路径环境变量的目录,并将%I扩充到找到的第一个驱动器号和
路径。
%~ftzaI -将%I扩充到类似输出线路的DIR
在以上例子中,%I和PATH可用其他有效数值代替。
%~语法用一个有效的FOR变量名
终止。
选取类似%I的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
13、CALL
从批处理程序调用另一个批处理程序。
CALL[drive:
][path]filename[batch-parameters]
batch-parameters指定批处理程序所需的命令行信息。
如果命令扩展名被启用,CALL会如下改变:
CALL命令现在将卷标当作CALL的目标接受。
语法是:
CALL:
labelarguments
一个新的批文件上下文由指定的参数所创建,控制在卷标被指定后传递到语句。
您必须通
过达到批脚本文件末两次来"
exit"
两次。
第一次读到文件末时,控制会回到CALL语句的紧后面。
第二次会退出批脚本。
键入GO
TO/?
,参看GOTO:
EOF扩展名的描述,此描述允许您从一个批脚本返回。
另外,批脚本文本参数参照(%0、%1、等等)已如下改变:
批脚本里的%*指出所有的参数(如%1%2%3%4%5...)
批参数(%n)的替代已被增强。
您可以使用以下语法:
%~1 -删除引号("
),扩充%1
%~f1 -将%1扩充到一个完全合格的路径名