教你怎样使用命令提示符

教你怎样使用命令提示符

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]

[[/S] [/C | /K] string]

其中:CMD是不可缺少的!

/C 执行字符串指定的命令然后终断

/K 执行字符串指定的命令但保留

/S 在 /C 或 /K 后修改字符串处理(见下)

/Q 关闭回应

/D 从注册表中停用执行 AutoRun 命令(见下)

/A 使向内部管道或文件命令的输出成为 ANSI

/U 使向内部管道或文件命令的输出成为 Unicode

/T:fg 设置前景/背景颜色(详细信息,请见 COLOR /?)

/E:ON 启用命令扩展(见下)

/E:OFF 停用命令扩展(见下)

/F:ON 启用文件和目录名称完成字符 (见下)

/F:OFF 停用文件和目录名称完成字符(见下)

/V:ON 将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法在输入时扩展变量,这与在一个 FOR 循环内不同。

/V:OFF 停用延缓的环境扩展。

请注意,如果字符串有引号,可以接受用命令分隔符 '&&' 隔开的多个命令。并且,由于兼容原因,/X 与 /E:ON 相同,/Y 与/E:OFF 相同,并且 /R 与 /C 相同。忽略任何其他命令行开关。如果指定了 /C 或 /K,命令行开关后的命令行其余部分将作为命令行处理;在这种情况下,会使用下列逻辑处理引号字符("):

1.如果符合下列所有条件,那么在命令行上的引号字符将被

保留:

- 不带 /S 命令行开关

- 整整两个引号字符

- 在两个引号字符之间没有特殊字符,特殊字符为下列中的

一个: ()@^|

- 在两个引号字符之间有至少一个空白字符

- 在两个引号字符之间有至少一个可执行文件的名称。

2.否则,看第一个字符是否是一个引号字符,如果是,舍去开头的字符并删除命令行上 的最后一个引号字符,保留最后一个引号字符之后的文字。

如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或两个都存在,这两个变量会先被执行。

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorAutoRun

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun命令扩展是按默认值启用的。您也可以使用 /E:OFF,为某一特定调用而停用扩展。您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的扩展,这要通过设置使用REGEDT32.EXE 的注册表中的一个或两个 REG_DWORD 值:

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorEnableExtensions

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorEnableExtensions

到 0x1 或 0x0。用户特定设置比机器设置有优先权。命令行开关比注册表设置有优先权。以上是对于基本命令的介绍,下面包含的是命令行扩展部分。延迟变量环境扩展不按默认值启用。您可以用/V:ON 或 /V:OFF 命令行开关,为 CMD.EXE 的某个调用而启用或停用延迟环境变量扩充。

您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的完成,这要通过设置使用 REGEDT32.EXE 的注册表中的一个或两个 REG_DWORD 值:

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorDelayedEXPansion

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorDelayedEXPansion

到 0x1 或 0x0。用户特定设置比机器设置有优先权。命令行开关比注册表设置有优先权。

如果延迟环境变量扩充被启用,惊叹号字符可在执行时间,被用来代替一个环境变量的数值。文件和目录名完成不按默认值启用。您可以用 /F:ON 或 /F:OFF命令行开关,为 CMD.EXE 的某个调用而启用或停用文件名完成。 您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的完成,这要通过设置使用 REGEDT32.EXE 的注册表中的一个或两个REG_DWORD 值:

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorCompletionChar

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorPathCompletionChar

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorCompletionChar

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorPathCompletionChar

由一个控制字符的十六进制值作为一个特定参数(例如,0x4 是Ctrl-D,0x6 是 Ctrl-F)。 用户特定设置优先于机器设置。命令行开关优先于注册表设置。

如果完成是用 /F:ON 命令行开关启用的,两个要使用的控制符是: 目录名字完成用 Ctrl-D, 文件名完成用 Ctrl-F。 要停用注册表中的某个字符,请用空格(0x20)的数值,因为此字符不是控制字符。

如果键入两个控制字符中的一个,完成会被调用。完成功能将路径字符串带到光标的左边,如果没有通配符,将通配符附加到左边,并建立相符的路径列表。然后,显示第一个相符的路径。如果没有相符的路径,则发出嘟嘟声,不影响显示。之后,重复按同一个控制字符会循环显示相符路径的列表。将 Shift 键跟控制字符同时按下,会倒着显示列表。如果对该行进行了任何编辑,并再次按下控制字符,保存的相符路径的列表会被丢弃,新的会被生成。如果在文件和目录名完成之间切换,会发生同样现象。两个控制字符之间的唯一区别是文件完成字符符合文件和目录名,而目录完成字符只符合目录名。如果文件完成被用于内置式目录命令(CD、MD 或 RD),就会使用目录完成。

将引号将相符路径括起来,完成代码可以正确处理含有空格或其他特殊字符的文件名。同时,如果备份,然后从行内调用文件完成,完成被调用是位于光标右方的文字会被丢弃。

需要引号的特殊字符是:

&()[]{}^=;!'+,`~

下面是命令行扩展的详细应用方法介绍:熟悉dos的朋友会发现许多内容和dos相同。

1、DEL 或 ERASE

删除一个或数个文件。

DEL

[/F] [/S] [/Q] [/A[[:]attributes]] names

ERASE

[/F] [/S] [/Q] [/A[[:]attributes]] names

names 指定一个或数个文件或目录列表。通配符可被用来

删除多个文件。如果指定了一个目录,目录中的所

有文件都会被删除。

/P 删除每一个文件之前提示确认。

/F 强制删除只读文件。

/S 从所有子目录删除指定文件。

/Q 安静模式。删除全局通配符时,不要求确认。

/A 根据属性选择要删除的文件。

attributes R 只读文件 S 系统文件

H 隐藏文件 A 存档文件

- 表示“否”的前缀

如果命令扩展名被启用,DEL 和 ERASE 会如下改变:

/S 开关的显示句法会颠倒,即只显示已经删除的文件,而不显示找不到的文件。

2、COLOR

设置默认的控制台前景和背景颜色。

COLOR [attr]

attr 指定控制台输出的颜色属性

颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为

前景。每个数字可以为以下任何值之一:

0 = 黑色 8 = 灰色

1 = 蓝色 9 = 淡蓝色

2 = 绿色 A = 淡绿色

3 = 湖蓝色 B = 淡浅绿色

4 = 红色 C = 淡红色

5 = 紫色 D = 淡紫色

6 = 黄色 E = 淡黄色

7 = 白色 F = 亮白色

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。这个值来自当前控制台窗口、/T 开关或DefaultColor 注册表值。

如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。

例如: "COLOR fc" 在亮白色上产生亮红色

3、CD 或 CHDIR

显示当前目录名或改变当前目录。

CHDIR [/D] [drive:][path]

CHDIR [..]

CD [/D] [drive:][path]

CD [..]

.. 指定要改成父目录。

键入 CD 驱动器: 显示指定驱动器中的当前目录。

不带参数只键入 CD,则显示当前驱动器和目录。

使用 /D 命令行开关,除了改变驱动器的当前目录之外,

还可改变当前驱动器。

如果扩展命令名被启用,CHDIR 会如下改变:

当前的目录字符串会被转换成使用磁盘名上的大小写。所以,如果磁盘上的大小写如此,CD C : TEMP 会将当前目录设为C:Temp。

CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个带有空格但不带有引号的子目录名。例如: cd Winntprofilesusernameprogramsstart menu

与下列相同:

cd "Winntprofilesusernameprogramsstart menu"

在扩展功能停用的情况下,您必须键入以上命令。

4、MD 或 MKDIR

创建目录。

MKDIR [drive:]path

MD [drive:]path

如果命令扩展名被启用,MKDIR 会如下改变:

如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 a 不存在,那么:

mkdir abcd

与:

mkdir a

chdir a

mkdir b

chdir b

mkdir c

chdir c

mkdir d

相同。如果扩展名被停用,则需要键入 mkdir abcd。

5、PROMPT

更改 cmd.exe 命令提示符。

PROMPT [text]

text 指定新的命令提示符。

提示符可以由普通字符及下列特定代码组成:

$A & (短 and 符号)

$B | (管道)

$C ( (左括弧)

$D 当前日期

$E Escape code (ASCII 码 27)

$F ) (右括弧)

$G > (大于符号)

$H Backspace (擦除前一个字符)

$L

$N 当前驱动器

$P 当前驱动器及路径

$Q = (等号)

$S (空格)

$T 当前时间

$V Windows XP 版本号

$_ 换行

$ (货币符号) $ $

如果命令扩展名被启用,PROMPT 命令会支持下列格式化字符:

$+ 根据 PUSHD 目录堆栈的深度,零个或零个以上加号(+)字符;每个被推的层有一个字符。 $M 如果当前驱动器不是网络驱动器,显示跟当前驱动器号或空字符串有关联的远程名。

6、PUSHD

保存当前目录以供 POPD 命令使用,然后改到指定的目录。

PUSHD [path | ..]

path 指定要成为当前目录的目录。

如果命令扩展名被启用,除了一般驱动器号和路径,PUSHD命令还接受网络路径。如果指定了网络路径,PUSHD 将创建一个指向指定网络资源的临时驱动器号,然后再用刚定义的驱动器号改变当前的驱动器和目录。可以从 Z: 往下分配临时驱动器号,使用找到的第一个没有用过的驱动器号。

7、POPD

命令选项到保存在 PUSHD 命令里的目录。

POPD

如果命令扩展名被启用,从推目录堆栈 POPD 驱动器时,POPD命令会删除 PUSHD 创建的临时驱动器号。

8、SET

显示、设置或删除 cmd.exe 环境变量。

SET [variable=[string]]

variable 指定环境变量名。

string 指定要指派给变量的一系列字符串。

要显示当前环境变量,键入不带参数的 SET。

如果命令扩展名被启用,SET 会如下改变:

可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配SET命令已使用的名称的所有变量的值。例如:

SET P

会显示所有以字母 P 打头的变量如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL

设置成 1。

SET 命令不允许变量名含有等号。

在 SET 命令中添加了两个新命令行开关:

SET /A eXPression

SET /P variable=[promptString]

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式评估器很简单并以递减的优先权顺序支持下列操作:

() - 分组

! ~ - - 一元运算符

* / % - 算数运算符

+ - - 算数运算符

> - 逻辑移位

- 按位“与”

^ - 按位“异”

| - 按位“或”

= *= /= %= += -= - 赋值

&= ^= |= >=

- 表达式分隔符

如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用引号扩起来。在表达式中的任何非数字字符

串键作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。该分配的操作符在分配的操作符左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此, 0x12 与 18 和 022相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数。

/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。

环境变量替换已如下增强:

%PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。

要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。

"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

也可以为扩展名指定子字符串。

%PATH:~10,5%

会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏移量 10)字符开始的五个字符。如果没有指定长度,则采用默认值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,使用的数字则是环境变量数值长度加上指定的偏移量或长度。

%PATH:~-10%

会提取 PATH 变量的最后十个字符。

%PATH:~0,-2%

会提取 PATH 变量的所有字符,除了最后两个。

终于添加了延迟环境变量扩充的支持。该支持总是按默认值被停用,但也可以通过 CMD.EXE 的 /V 命令行开关而被启用/停用。

考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境变量扩充是很有用的,而不是执行的时候。以下例子说明直接变量扩充的问题:

set VAR=before

if "%VAR%" == "before" (

set VAR=after

if "%VAR%" == "after" @echo If you see this, it worked

)

不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和"after",这两者永远不会相等。同样,以下这个例子也不会达到预期效果:

set LIST=

for %i in (*) do set LIST=%LIST% %i

echo %LIST%

原因是它不会在目前的目录中建立一个文件列表,而只是将LIST 变量设成找到的最后一个文件。这也是因为 %LIST% 在FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量是空的。因此,我们真正执行的 FOR 循环是:

for %i in (*) do set LIST= %i

这个循环继续将 LIST 设成找到的最后一个文件。

延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行时间扩充环境变量。如果延迟的变量扩充被启用,可以将上面例子写成以下所示,以达到预期效果:

set VAR=before

if "%VAR%" == "before" (

set VAR=after

if "!VAR!" == "after" @echo If you see this, it worked

)

set LIST=

for %i in (*) do set LIST=!LIST! %i

echo %LIST%

如果命令扩展名被启用,有几个动态环境变量可以被扩展,但不会出现在 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 的值。

如果有两个有效参数中的一个,该值则为零。用下列技巧,您可以在批脚本中使用这个来决定扩展名是否可用:

VERIFY OTHER 2>nul

SETLOCAL ENABLEEXTENSIONS

IF ERRORLEVEL 1 echo Unable to enable extensions

这个方法之所以有效,是因为在 CMD.EXE 的旧版本上,SETLOCAL不设置 ERRORLEVEL 值。具有不正确参数的 VERIFY 命令将ERRORLEVEL 值初始化成非零值。

10、ENDLOCAL

结束批处理文件中环境改动的本地化操作。在执行ENDLOCAL 之后所做的环境改动不再仅限于批处理文件。批处理文件结束后,原先的设置无法还原。

ENDLOCAL

如果命令扩展名被启用,ENDLOCAL 会如下改变:

如果相应的 SETLOCAL 用新的 ENABLEEXTENSIONS 或DISABLEEXTENSIONS 选项启用或停用了命令扩展名,那么,在ENDLOCAL 之后,命令扩展名的启用/停用状态会还原到执行相应的 SETLOCAL 命令前的状态。

11、IF

执行批处理程序中的条件处理。

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

NOT 指定只有条件为 false 的情况下, Windows XP 才

应该执行该命令。

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

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

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

command 如果符合条件,指定要执行的命令。如果指定的

条件为 FALSE,命令后可跟一个执行 ELSE

关键字后的命令的 ELSE 命令。

ELSE 子句必须在 IF 之后出现在同一行上。例如:

IF EXIST filename. (

del filename.

) ELSE (

echo filename. missing.

)

因为 del 命令需要用一个新行终止,以下子句不会有效:

IF EXIST filename. del filename. ELSE echo filename. missing

由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也不会有效:

IF EXIST filename. del filename.

ELSE echo filename. missing

如果都放在同一行上,以下子句有效:

IF EXIST filename. (del filename.) ELSE echo filename. missing

如果命令扩展名被启用,IF 会如下改变:

IF string1 compare-op string2 command

IF CMDEXTVERSION number command

IF DEFINED variable command

其中,比较运算符可以是:

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

及 /I 开关;如果该开关被指定,则说明要进行的字符串比较不分大小写。/I 开关可以用于 IF 的 string1==string2 的形式上。这些比较都是通用的;原因是,如果 string1 和 string2 都是由数字组成的,字符串会被转换成数字,进行数字比较。

CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它是在跟与命令扩展名有关联的内部版本号比较。第一个版本是 1。每次对命令扩展名有相当大的增强时,版本号会增加一个。

命令扩展名被停用时,CMDEXTVERSION 条件不是真的。

如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样,除了它取得一个环境变量,返回的结果是 true。

如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:

goto answer%ERRORLEVEL%

:answer0

echo Program had return code 0

:answer1

echo Program had return code 1

您也可以使用以上的数字比较:

IF %ERRORLEVEL% LEQ 1 goto okay

如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始命令行;否则,您会得到其数值。

如果没有名为 CMDEXTVERSION 的环境变量,%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的 字串符表达式;否则,您会得到其数值。

12、FOR

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

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

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

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

command-parameters

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

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:

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

如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

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

因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。

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

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

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

或者,如果有 usebackq 选项:

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

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

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

filenameset 为一个或多个文件名。继续到 filenameset 中的下一个文件之前,每份文件都已被打开、读取并经过处理。

处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 "options"参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:

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=, " %i in (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 分析逻辑;方法是,用单引号将括号之间的 filenameset 括起来。这样,该字符串会被当作一个文件中的一个单一输入行。

最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此,以下例子:

FOR /F "usebackq delims==" %i IN (`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 扩充到一个带有短名的完整路径名

$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。 %~dp %~ftzaI - 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。

13、CALL

从批处理程序调用另一个批处理程序。

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

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

如果命令扩展名被启用,CALL 会如下改变:

CALL 命令现在将卷标当作 CALL 的目标接受。语法是:

CALL:label arguments

一个新的批文件上下文由指定的参数所创建,控制在卷标被指定后传递到语句。您必须通过达到批脚本文件末两次来 "exit" 两次。

第一次读到文件末时,控制会回到 CALL 语句的紧后面。第二次会退出批脚本。键入 GOTO /?,参看 GOTO : EOF 扩展名的描述,此描述允许您从一个批脚本返回。

另外,批脚本文本参数参照(%0、%1、等等)已如下改变:

批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...)

批参数(%n)的替代已被增强。您可以使用以下语法:

%~1 - 删除引号("),扩充 %1

%~f1 - 将 %1 扩充到一个完全合格的路径名

%~d1 - 仅将 %1 扩充到一个驱动器号

%~p1 - 仅将 %1 扩充到一个路径

%~n1 - 仅将 %1 扩充到一个文件名

%~x1 - 仅将 %1 扩充到一个文件扩展名

%~s1 - 扩充的路径指含有短名

%~a1 - 将 %1 扩充到文件属性

%~t1 - 将 %1 扩充到文件的日期/时间

%~z1 - 将 %1 扩充到文件的大小

$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1扩充到找到的第一个完全合格的名称。如果环境 变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串可以组合修定符来取得多重结果: %~

%~dp1 - 只将 %1 扩展到驱动器号和路径

%~nx1 - 只将 %1 扩展到文件名和扩展名

$PATH:1- 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。 %~dp

%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。

在上面的例子中,%1 和 PATH 可以被其他有效数值替换。

%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*

使用

14、SHIFT

更改批处理文件中可替换参数的位置。

SHIFT [/n]

如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。例如:

SHIFT /2

会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。

15、GOTO

将 cmd.exe 导向到批处理程序中带标签的行。

GOTO label

label 指定批处理程序中用作标签的文字字符串。

标签必须单独一行,并且以冒号打头。

如果命令扩展名被启用,GOTO 会如下改变:

GOTO 命令现在接受目标标签 :EOF,这个标签将控制转移到当前批脚本文件的结尾。不定义就退出批脚本文件,这是一个容易的办法。有关能使该功能有用的 CALL 命令的扩展名描述,请参考CALL的介绍

16、START (同时包括对外部命令调用所做的更改)

启动另一个窗口运行指定的程序或命令。

START ["title"] [/Dpath] [/MIN] [/MAX] [/SEPARATE | /SHARED]

[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]

[/WAIT] [command/program]

[parameters]

"title" 在窗口标题栏中显示的标题。

path 起始目录

B 在不创建新窗口的情况下开始应用程序。 除非启动 ^C 处理,否则该应用程序会忽略 ^C 处理;^Break 是唯一可以中断该应用程序的方式

I 新环境是传递给 cmd.exe 的原始环境,而不是当前环境

MIN 开始时窗口最小化

MAX 开始时窗口最大化

SEPARATE 在分开的空间内开始 16 位 Windows 程序

SHARED 在分共享的空间内开始 16 位 Windows 程序

LOW 在 IDLE 优先级类别开始应用程序

NORMAL 在 NORMAL 优先级类别开始应用程序

HIGH 在 HIGH 优先级类别开始应用程序

REALTIME 在 REALTIME 优先级类别开始应用程序

ABOVENORMAL 在 ABOVENORMAL 优先级类别开始应用程序

BELOWNORMAL 在 BELOWNORMAL 优先级类别开始应用程序

WAIT 启动应用程序并等候它结束

command/program 如果是内部 cmd 命令或批文件,那么该命令处理器是用 /K 命令行开关运行 cmd.exe 的。这表示该窗口在命令运行后仍然存在。

如果不是内部 cmd 命令或批文件,则是一个程序,并作为窗口应用程序或控制台应用程序运行。

parameters 这些为传送到命令/程序的参数如果命令扩展名被启用,通过命令行或 START 命令的外部命令调用会如下改变:

将文件名作为命令键入,非可执行文件 可以通过文件关联调用。

(例如, WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。

关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和FTYPE 命令。

执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

如果执行的命令行的第一个符号是不带扩展名或路径修饰符的字符串 "CMD","CMD" 会被COMSPEC 变量的数值所替换。这防止从当前目录抓出 CMD.EXE。

如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展名。PATHEXT 变量的默认值是:

.COM;.EXE;.BAT;.CMD

请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

查找可执行文件时,如果没有相配的扩展名,看一看该名称是否与目录名相配。如果确实如此,START 会在那个路径上调用EXPlorer。如果从命令行执行,则等同于对那个路径作 CD /D。

windows xp 中的cmd

2004-8-8 9:27:31 作者:Yesky 来源:天极Yesky 【字体:大 中 小】

17、ASSOC

显示或修改文件扩展名关联ASSOC [.ext[=[fileType>

.ext 指定跟文件类型关联的文件扩展名

fileType 指定跟文件扩展名关联的文件类型

键入 ASSOC 而不带参数,显示当前文件关联。如果只用文件扩展名调用 ASSOC,则显示那个文件扩展名的当前文件关联。如果不为文件类型指定任何参数,命令会删除文件扩展名的关联。

18、FTYPE

显示或修改用在文件扩展名关联中的文件类型FTYPE [fileType[=[openCommandString>

fileType 指定要检查或改变的文件类型

openCommandString 指定调用这类文件时要使用的开放式命令。

键入 FTYPE 而不带参数来显示当前有定义的开放式命令字符串的文件类型。 FTYPE 仅用一个文件类型启用时,它显示那个文件类型目前的开放式命令字符串。如果不为开放式命令字符串指定,FTYPE 命令将删除那个文件类型的开放式命令字符串。在一个开放式命令字符串之内,命令字符串 %0 或 %1 被通过关联调用的文件名所代替。%* 得到所有的参数,%2 得到第一个参数,%3 得到第二个,等等。%~n 得到其余所有以 nth 参数打头的参数;n 可以是从 2 到 9 的数字。例如:

ASSOC .pl=PerlScript

FTYPE PerlScript=perl.exe %1 %*

允许您启用以下 Perl 脚本:

script.pl 1 2 3

如果不想键入扩展名,则键入以下字符串: set PATHEXT=.pl;%PATHEXT%

被启动的脚本如下:

script 1 2 3

教你怎样使用命令提示符

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]

[[/S] [/C | /K] string]

其中:CMD是不可缺少的!

/C 执行字符串指定的命令然后终断

/K 执行字符串指定的命令但保留

/S 在 /C 或 /K 后修改字符串处理(见下)

/Q 关闭回应

/D 从注册表中停用执行 AutoRun 命令(见下)

/A 使向内部管道或文件命令的输出成为 ANSI

/U 使向内部管道或文件命令的输出成为 Unicode

/T:fg 设置前景/背景颜色(详细信息,请见 COLOR /?)

/E:ON 启用命令扩展(见下)

/E:OFF 停用命令扩展(见下)

/F:ON 启用文件和目录名称完成字符 (见下)

/F:OFF 停用文件和目录名称完成字符(见下)

/V:ON 将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法在输入时扩展变量,这与在一个 FOR 循环内不同。

/V:OFF 停用延缓的环境扩展。

请注意,如果字符串有引号,可以接受用命令分隔符 '&&' 隔开的多个命令。并且,由于兼容原因,/X 与 /E:ON 相同,/Y 与/E:OFF 相同,并且 /R 与 /C 相同。忽略任何其他命令行开关。如果指定了 /C 或 /K,命令行开关后的命令行其余部分将作为命令行处理;在这种情况下,会使用下列逻辑处理引号字符("):

1.如果符合下列所有条件,那么在命令行上的引号字符将被

保留:

- 不带 /S 命令行开关

- 整整两个引号字符

- 在两个引号字符之间没有特殊字符,特殊字符为下列中的

一个: ()@^|

- 在两个引号字符之间有至少一个空白字符

- 在两个引号字符之间有至少一个可执行文件的名称。

2.否则,看第一个字符是否是一个引号字符,如果是,舍去开头的字符并删除命令行上 的最后一个引号字符,保留最后一个引号字符之后的文字。

如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或两个都存在,这两个变量会先被执行。

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorAutoRun

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun命令扩展是按默认值启用的。您也可以使用 /E:OFF,为某一特定调用而停用扩展。您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的扩展,这要通过设置使用REGEDT32.EXE 的注册表中的一个或两个 REG_DWORD 值:

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorEnableExtensions

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorEnableExtensions

到 0x1 或 0x0。用户特定设置比机器设置有优先权。命令行开关比注册表设置有优先权。以上是对于基本命令的介绍,下面包含的是命令行扩展部分。延迟变量环境扩展不按默认值启用。您可以用/V:ON 或 /V:OFF 命令行开关,为 CMD.EXE 的某个调用而启用或停用延迟环境变量扩充。

您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的完成,这要通过设置使用 REGEDT32.EXE 的注册表中的一个或两个 REG_DWORD 值:

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorDelayedEXPansion

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorDelayedEXPansion

到 0x1 或 0x0。用户特定设置比机器设置有优先权。命令行开关比注册表设置有优先权。

如果延迟环境变量扩充被启用,惊叹号字符可在执行时间,被用来代替一个环境变量的数值。文件和目录名完成不按默认值启用。您可以用 /F:ON 或 /F:OFF命令行开关,为 CMD.EXE 的某个调用而启用或停用文件名完成。 您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的完成,这要通过设置使用 REGEDT32.EXE 的注册表中的一个或两个REG_DWORD 值:

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorCompletionChar

HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorPathCompletionChar

和/或

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorCompletionChar

HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorPathCompletionChar

由一个控制字符的十六进制值作为一个特定参数(例如,0x4 是Ctrl-D,0x6 是 Ctrl-F)。 用户特定设置优先于机器设置。命令行开关优先于注册表设置。

如果完成是用 /F:ON 命令行开关启用的,两个要使用的控制符是: 目录名字完成用 Ctrl-D, 文件名完成用 Ctrl-F。 要停用注册表中的某个字符,请用空格(0x20)的数值,因为此字符不是控制字符。

如果键入两个控制字符中的一个,完成会被调用。完成功能将路径字符串带到光标的左边,如果没有通配符,将通配符附加到左边,并建立相符的路径列表。然后,显示第一个相符的路径。如果没有相符的路径,则发出嘟嘟声,不影响显示。之后,重复按同一个控制字符会循环显示相符路径的列表。将 Shift 键跟控制字符同时按下,会倒着显示列表。如果对该行进行了任何编辑,并再次按下控制字符,保存的相符路径的列表会被丢弃,新的会被生成。如果在文件和目录名完成之间切换,会发生同样现象。两个控制字符之间的唯一区别是文件完成字符符合文件和目录名,而目录完成字符只符合目录名。如果文件完成被用于内置式目录命令(CD、MD 或 RD),就会使用目录完成。

将引号将相符路径括起来,完成代码可以正确处理含有空格或其他特殊字符的文件名。同时,如果备份,然后从行内调用文件完成,完成被调用是位于光标右方的文字会被丢弃。

需要引号的特殊字符是:

&()[]{}^=;!'+,`~

下面是命令行扩展的详细应用方法介绍:熟悉dos的朋友会发现许多内容和dos相同。

1、DEL 或 ERASE

删除一个或数个文件。

DEL

[/F] [/S] [/Q] [/A[[:]attributes]] names

ERASE

[/F] [/S] [/Q] [/A[[:]attributes]] names

names 指定一个或数个文件或目录列表。通配符可被用来

删除多个文件。如果指定了一个目录,目录中的所

有文件都会被删除。

/P 删除每一个文件之前提示确认。

/F 强制删除只读文件。

/S 从所有子目录删除指定文件。

/Q 安静模式。删除全局通配符时,不要求确认。

/A 根据属性选择要删除的文件。

attributes R 只读文件 S 系统文件

H 隐藏文件 A 存档文件

- 表示“否”的前缀

如果命令扩展名被启用,DEL 和 ERASE 会如下改变:

/S 开关的显示句法会颠倒,即只显示已经删除的文件,而不显示找不到的文件。

2、COLOR

设置默认的控制台前景和背景颜色。

COLOR [attr]

attr 指定控制台输出的颜色属性

颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为

前景。每个数字可以为以下任何值之一:

0 = 黑色 8 = 灰色

1 = 蓝色 9 = 淡蓝色

2 = 绿色 A = 淡绿色

3 = 湖蓝色 B = 淡浅绿色

4 = 红色 C = 淡红色

5 = 紫色 D = 淡紫色

6 = 黄色 E = 淡黄色

7 = 白色 F = 亮白色

如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。这个值来自当前控制台窗口、/T 开关或DefaultColor 注册表值。

如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。

例如: "COLOR fc" 在亮白色上产生亮红色

3、CD 或 CHDIR

显示当前目录名或改变当前目录。

CHDIR [/D] [drive:][path]

CHDIR [..]

CD [/D] [drive:][path]

CD [..]

.. 指定要改成父目录。

键入 CD 驱动器: 显示指定驱动器中的当前目录。

不带参数只键入 CD,则显示当前驱动器和目录。

使用 /D 命令行开关,除了改变驱动器的当前目录之外,

还可改变当前驱动器。

如果扩展命令名被启用,CHDIR 会如下改变:

当前的目录字符串会被转换成使用磁盘名上的大小写。所以,如果磁盘上的大小写如此,CD C : TEMP 会将当前目录设为C:Temp。

CHDIR 命令不把空格当作分隔符,因此有可能将目录名改为一个带有空格但不带有引号的子目录名。例如: cd Winntprofilesusernameprogramsstart menu

与下列相同:

cd "Winntprofilesusernameprogramsstart menu"

在扩展功能停用的情况下,您必须键入以上命令。

4、MD 或 MKDIR

创建目录。

MKDIR [drive:]path

MD [drive:]path

如果命令扩展名被启用,MKDIR 会如下改变:

如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 a 不存在,那么:

mkdir abcd

与:

mkdir a

chdir a

mkdir b

chdir b

mkdir c

chdir c

mkdir d

相同。如果扩展名被停用,则需要键入 mkdir abcd。

5、PROMPT

更改 cmd.exe 命令提示符。

PROMPT [text]

text 指定新的命令提示符。

提示符可以由普通字符及下列特定代码组成:

$A & (短 and 符号)

$B | (管道)

$C ( (左括弧)

$D 当前日期

$E Escape code (ASCII 码 27)

$F ) (右括弧)

$G > (大于符号)

$H Backspace (擦除前一个字符)

$L

$N 当前驱动器

$P 当前驱动器及路径

$Q = (等号)

$S (空格)

$T 当前时间

$V Windows XP 版本号

$_ 换行

$ (货币符号) $ $

如果命令扩展名被启用,PROMPT 命令会支持下列格式化字符:

$+ 根据 PUSHD 目录堆栈的深度,零个或零个以上加号(+)字符;每个被推的层有一个字符。 $M 如果当前驱动器不是网络驱动器,显示跟当前驱动器号或空字符串有关联的远程名。

6、PUSHD

保存当前目录以供 POPD 命令使用,然后改到指定的目录。

PUSHD [path | ..]

path 指定要成为当前目录的目录。

如果命令扩展名被启用,除了一般驱动器号和路径,PUSHD命令还接受网络路径。如果指定了网络路径,PUSHD 将创建一个指向指定网络资源的临时驱动器号,然后再用刚定义的驱动器号改变当前的驱动器和目录。可以从 Z: 往下分配临时驱动器号,使用找到的第一个没有用过的驱动器号。

7、POPD

命令选项到保存在 PUSHD 命令里的目录。

POPD

如果命令扩展名被启用,从推目录堆栈 POPD 驱动器时,POPD命令会删除 PUSHD 创建的临时驱动器号。

8、SET

显示、设置或删除 cmd.exe 环境变量。

SET [variable=[string]]

variable 指定环境变量名。

string 指定要指派给变量的一系列字符串。

要显示当前环境变量,键入不带参数的 SET。

如果命令扩展名被启用,SET 会如下改变:

可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配SET命令已使用的名称的所有变量的值。例如:

SET P

会显示所有以字母 P 打头的变量如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL

设置成 1。

SET 命令不允许变量名含有等号。

在 SET 命令中添加了两个新命令行开关:

SET /A eXPression

SET /P variable=[promptString]

/A 命令行开关指定等号右边的字符串为被评估的数字表达式。该表达式评估器很简单并以递减的优先权顺序支持下列操作:

() - 分组

! ~ - - 一元运算符

* / % - 算数运算符

+ - - 算数运算符

> - 逻辑移位

- 按位“与”

^ - 按位“异”

| - 按位“或”

= *= /= %= += -= - 赋值

&= ^= |= >=

- 表达式分隔符

如果您使用任何逻辑或取余操作符, 您需要将表达式字符串用引号扩起来。在表达式中的任何非数字字符

串键作为环境变量名称,这些环境变量名称的值已在使用前转换成数字。如果指定了一个环境变量名称,但未在当前环境中定义,那么值将被定为零。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。如果 SET /A 在命令脚本外的命令行执行的,那么它显示该表达式的最后值。该分配的操作符在分配的操作符左边需要一个环境变量名称。除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此, 0x12 与 18 和 022相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数。

/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入行之前,显示指定的 promptString。promptString 可以是空的。

环境变量替换已如下增强:

%PATH:str1=str2%

会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1"。

要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。

"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的开始到 str1 剩余部分第一次出现的地方,都一直保持相配。

也可以为扩展名指定子字符串。

%PATH:~10,5%

会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏移量 10)字符开始的五个字符。如果没有指定长度,则采用默认值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,使用的数字则是环境变量数值长度加上指定的偏移量或长度。

%PATH:~-10%

会提取 PATH 变量的最后十个字符。

%PATH:~0,-2%

会提取 PATH 变量的所有字符,除了最后两个。

终于添加了延迟环境变量扩充的支持。该支持总是按默认值被停用,但也可以通过 CMD.EXE 的 /V 命令行开关而被启用/停用。

考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境变量扩充是很有用的,而不是执行的时候。以下例子说明直接变量扩充的问题:

set VAR=before

if "%VAR%" == "before" (

set VAR=after

if "%VAR%" == "after" @echo If you see this, it worked

)

不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和"after",这两者永远不会相等。同样,以下这个例子也不会达到预期效果:

set LIST=

for %i in (*) do set LIST=%LIST% %i

echo %LIST%

原因是它不会在目前的目录中建立一个文件列表,而只是将LIST 变量设成找到的最后一个文件。这也是因为 %LIST% 在FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量是空的。因此,我们真正执行的 FOR 循环是:

for %i in (*) do set LIST= %i

这个循环继续将 LIST 设成找到的最后一个文件。

延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行时间扩充环境变量。如果延迟的变量扩充被启用,可以将上面例子写成以下所示,以达到预期效果:

set VAR=before

if "%VAR%" == "before" (

set VAR=after

if "!VAR!" == "after" @echo If you see this, it worked

)

set LIST=

for %i in (*) do set LIST=!LIST! %i

echo %LIST%

如果命令扩展名被启用,有几个动态环境变量可以被扩展,但不会出现在 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 的值。

如果有两个有效参数中的一个,该值则为零。用下列技巧,您可以在批脚本中使用这个来决定扩展名是否可用:

VERIFY OTHER 2>nul

SETLOCAL ENABLEEXTENSIONS

IF ERRORLEVEL 1 echo Unable to enable extensions

这个方法之所以有效,是因为在 CMD.EXE 的旧版本上,SETLOCAL不设置 ERRORLEVEL 值。具有不正确参数的 VERIFY 命令将ERRORLEVEL 值初始化成非零值。

10、ENDLOCAL

结束批处理文件中环境改动的本地化操作。在执行ENDLOCAL 之后所做的环境改动不再仅限于批处理文件。批处理文件结束后,原先的设置无法还原。

ENDLOCAL

如果命令扩展名被启用,ENDLOCAL 会如下改变:

如果相应的 SETLOCAL 用新的 ENABLEEXTENSIONS 或DISABLEEXTENSIONS 选项启用或停用了命令扩展名,那么,在ENDLOCAL 之后,命令扩展名的启用/停用状态会还原到执行相应的 SETLOCAL 命令前的状态。

11、IF

执行批处理程序中的条件处理。

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

NOT 指定只有条件为 false 的情况下, Windows XP 才

应该执行该命令。

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

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

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

command 如果符合条件,指定要执行的命令。如果指定的

条件为 FALSE,命令后可跟一个执行 ELSE

关键字后的命令的 ELSE 命令。

ELSE 子句必须在 IF 之后出现在同一行上。例如:

IF EXIST filename. (

del filename.

) ELSE (

echo filename. missing.

)

因为 del 命令需要用一个新行终止,以下子句不会有效:

IF EXIST filename. del filename. ELSE echo filename. missing

由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也不会有效:

IF EXIST filename. del filename.

ELSE echo filename. missing

如果都放在同一行上,以下子句有效:

IF EXIST filename. (del filename.) ELSE echo filename. missing

如果命令扩展名被启用,IF 会如下改变:

IF string1 compare-op string2 command

IF CMDEXTVERSION number command

IF DEFINED variable command

其中,比较运算符可以是:

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

及 /I 开关;如果该开关被指定,则说明要进行的字符串比较不分大小写。/I 开关可以用于 IF 的 string1==string2 的形式上。这些比较都是通用的;原因是,如果 string1 和 string2 都是由数字组成的,字符串会被转换成数字,进行数字比较。

CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它是在跟与命令扩展名有关联的内部版本号比较。第一个版本是 1。每次对命令扩展名有相当大的增强时,版本号会增加一个。

命令扩展名被停用时,CMDEXTVERSION 条件不是真的。

如果已定义环境变量,DEFINED 条件的作用跟 EXISTS 的一样,除了它取得一个环境变量,返回的结果是 true。

如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,您会得到其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:

goto answer%ERRORLEVEL%

:answer0

echo Program had return code 0

:answer1

echo Program had return code 1

您也可以使用以上的数字比较:

IF %ERRORLEVEL% LEQ 1 goto okay

如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始命令行;否则,您会得到其数值。

如果没有名为 CMDEXTVERSION 的环境变量,%CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的 字串符表达式;否则,您会得到其数值。

12、FOR

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

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

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

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

command-parameters

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

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:

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

如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

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

因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。

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

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

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

或者,如果有 usebackq 选项:

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

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

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

filenameset 为一个或多个文件名。继续到 filenameset 中的下一个文件之前,每份文件都已被打开、读取并经过处理。

处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 "options"参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。这些关键字为:

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=, " %i in (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 分析逻辑;方法是,用单引号将括号之间的 filenameset 括起来。这样,该字符串会被当作一个文件中的一个单一输入行。

最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此,以下例子:

FOR /F "usebackq delims==" %i IN (`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 扩充到一个带有短名的完整路径名

$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。 %~dp %~ftzaI - 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。

13、CALL

从批处理程序调用另一个批处理程序。

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

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

如果命令扩展名被启用,CALL 会如下改变:

CALL 命令现在将卷标当作 CALL 的目标接受。语法是:

CALL:label arguments

一个新的批文件上下文由指定的参数所创建,控制在卷标被指定后传递到语句。您必须通过达到批脚本文件末两次来 "exit" 两次。

第一次读到文件末时,控制会回到 CALL 语句的紧后面。第二次会退出批脚本。键入 GOTO /?,参看 GOTO : EOF 扩展名的描述,此描述允许您从一个批脚本返回。

另外,批脚本文本参数参照(%0、%1、等等)已如下改变:

批脚本里的 %* 指出所有的参数(如 %1 %2 %3 %4 %5 ...)

批参数(%n)的替代已被增强。您可以使用以下语法:

%~1 - 删除引号("),扩充 %1

%~f1 - 将 %1 扩充到一个完全合格的路径名

%~d1 - 仅将 %1 扩充到一个驱动器号

%~p1 - 仅将 %1 扩充到一个路径

%~n1 - 仅将 %1 扩充到一个文件名

%~x1 - 仅将 %1 扩充到一个文件扩展名

%~s1 - 扩充的路径指含有短名

%~a1 - 将 %1 扩充到文件属性

%~t1 - 将 %1 扩充到文件的日期/时间

%~z1 - 将 %1 扩充到文件的大小

$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1扩充到找到的第一个完全合格的名称。如果环境 变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串可以组合修定符来取得多重结果: %~

%~dp1 - 只将 %1 扩展到驱动器号和路径

%~nx1 - 只将 %1 扩展到文件名和扩展名

$PATH:1- 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。 %~dp

%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。

在上面的例子中,%1 和 PATH 可以被其他有效数值替换。

%~ 语法被一个有效参数号码终止。%~ 修定符不能跟 %*

使用

14、SHIFT

更改批处理文件中可替换参数的位置。

SHIFT [/n]

如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉命令从第 n 个参数开始移位;n 介于零和八之间。例如:

SHIFT /2

会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。

15、GOTO

将 cmd.exe 导向到批处理程序中带标签的行。

GOTO label

label 指定批处理程序中用作标签的文字字符串。

标签必须单独一行,并且以冒号打头。

如果命令扩展名被启用,GOTO 会如下改变:

GOTO 命令现在接受目标标签 :EOF,这个标签将控制转移到当前批脚本文件的结尾。不定义就退出批脚本文件,这是一个容易的办法。有关能使该功能有用的 CALL 命令的扩展名描述,请参考CALL的介绍

16、START (同时包括对外部命令调用所做的更改)

启动另一个窗口运行指定的程序或命令。

START ["title"] [/Dpath] [/MIN] [/MAX] [/SEPARATE | /SHARED]

[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]

[/WAIT] [command/program]

[parameters]

"title" 在窗口标题栏中显示的标题。

path 起始目录

B 在不创建新窗口的情况下开始应用程序。 除非启动 ^C 处理,否则该应用程序会忽略 ^C 处理;^Break 是唯一可以中断该应用程序的方式

I 新环境是传递给 cmd.exe 的原始环境,而不是当前环境

MIN 开始时窗口最小化

MAX 开始时窗口最大化

SEPARATE 在分开的空间内开始 16 位 Windows 程序

SHARED 在分共享的空间内开始 16 位 Windows 程序

LOW 在 IDLE 优先级类别开始应用程序

NORMAL 在 NORMAL 优先级类别开始应用程序

HIGH 在 HIGH 优先级类别开始应用程序

REALTIME 在 REALTIME 优先级类别开始应用程序

ABOVENORMAL 在 ABOVENORMAL 优先级类别开始应用程序

BELOWNORMAL 在 BELOWNORMAL 优先级类别开始应用程序

WAIT 启动应用程序并等候它结束

command/program 如果是内部 cmd 命令或批文件,那么该命令处理器是用 /K 命令行开关运行 cmd.exe 的。这表示该窗口在命令运行后仍然存在。

如果不是内部 cmd 命令或批文件,则是一个程序,并作为窗口应用程序或控制台应用程序运行。

parameters 这些为传送到命令/程序的参数如果命令扩展名被启用,通过命令行或 START 命令的外部命令调用会如下改变:

将文件名作为命令键入,非可执行文件 可以通过文件关联调用。

(例如, WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。

关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和FTYPE 命令。

执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。

如果执行的命令行的第一个符号是不带扩展名或路径修饰符的字符串 "CMD","CMD" 会被COMSPEC 变量的数值所替换。这防止从当前目录抓出 CMD.EXE。

如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展名。PATHEXT 变量的默认值是:

.COM;.EXE;.BAT;.CMD

请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

查找可执行文件时,如果没有相配的扩展名,看一看该名称是否与目录名相配。如果确实如此,START 会在那个路径上调用EXPlorer。如果从命令行执行,则等同于对那个路径作 CD /D。

windows xp 中的cmd

2004-8-8 9:27:31 作者:Yesky 来源:天极Yesky 【字体:大 中 小】

17、ASSOC

显示或修改文件扩展名关联ASSOC [.ext[=[fileType>

.ext 指定跟文件类型关联的文件扩展名

fileType 指定跟文件扩展名关联的文件类型

键入 ASSOC 而不带参数,显示当前文件关联。如果只用文件扩展名调用 ASSOC,则显示那个文件扩展名的当前文件关联。如果不为文件类型指定任何参数,命令会删除文件扩展名的关联。

18、FTYPE

显示或修改用在文件扩展名关联中的文件类型FTYPE [fileType[=[openCommandString>

fileType 指定要检查或改变的文件类型

openCommandString 指定调用这类文件时要使用的开放式命令。

键入 FTYPE 而不带参数来显示当前有定义的开放式命令字符串的文件类型。 FTYPE 仅用一个文件类型启用时,它显示那个文件类型目前的开放式命令字符串。如果不为开放式命令字符串指定,FTYPE 命令将删除那个文件类型的开放式命令字符串。在一个开放式命令字符串之内,命令字符串 %0 或 %1 被通过关联调用的文件名所代替。%* 得到所有的参数,%2 得到第一个参数,%3 得到第二个,等等。%~n 得到其余所有以 nth 参数打头的参数;n 可以是从 2 到 9 的数字。例如:

ASSOC .pl=PerlScript

FTYPE PerlScript=perl.exe %1 %*

允许您启用以下 Perl 脚本:

script.pl 1 2 3

如果不想键入扩展名,则键入以下字符串: set PATHEXT=.pl;%PATHEXT%

被启动的脚本如下:

script 1 2 3


相关文章

  • 怎样用Ping命令轻松解决检测网络故障
  • 怎样用Ping 命令轻松解决检测网络故障+排除网络故障从Ping 命令开始 2009年11月25日 星期三 23:58 正常上网取决于三条:1.网卡及其驱动程序没有问题:2.系统网络连接设置没有问题:3.网络供应商"高速公路&qu ...查看


  • 电脑开机密码解除
  • 电脑开机密码解除-想学电脑的转哦! 教你怎样解除电脑开机密码!!!先记下来,以后总会有用到的!!!此方法仅供计算机教师交流,严禁作为非法手段使用! 玩电脑时,有时候忘记密码了怎么办? 到朋友家,他人又不在而电脑又设置了密码,怎么办? 工作中 ...查看


  • 技巧:几个简单测试网络的常用命令
  • 看下面的几个网络测试命令,了解和掌握它们将会有助于你更好地使用和维护网络. Ping命令 用来测试一帧数据从一台主机传输到另一台主机所需的时间,从而判断主响应时间.该命令主要是用来检查路由是否能够到达,由于该命令的包长非常小,所以在网上传递 ...查看


  • 怎样突破系统故障恢复控制台的限制
  • 怎样突破系统故障恢复控制台的限制.txt男人偷腥时的智商仅次于爱因斯坦.美丽让男人停下,智慧让男人留下.任何东西都不能以健康做交换.怎样突破系统故障恢复控制台的限制 默认情况下故障恢复控制台只能访问系统根目录.Windows安装目录.CMD ...查看


  • ping命令简单介绍+用ping简单测网速yc 1
  • ping命令简单介绍+用ping简单测网速 ping可以用来检查网络是否通畅或者网络连接速度,而作为网络管理员ping命令是第一个必须掌握的DOS命令.我们可以用ping来给网络上指定IP的计算机发送一个数据包,而对方就要返回一个同样大小的 ...查看


  • ansys学习-使用问答1_桥梁空间
  • ansys学习-使用问答1 2006年11月20日 星期一 08:30 Q为问A为回复 ---------------------------------------------------------------------------- ...查看


  • ping命令简单介绍+用ping简单测网速yc
  • ping可以用来检查网络是否通畅或者网络连接速度,而作为网络管理员ping命令是第一个必须掌握的DOS命令.我们可以用ping来给网络上指定IP的计算机发送一个数据包,而对方就要返回一个同样大小的数据包,根据返回的数据包就可以判定对方机器的 ...查看


  • 局域网内的两台电脑怎样共享打印机最佳答案
  • 局域网内的两台电脑怎样共享打印机最佳答案 第一步:将打印机连接至主机,打开打印机电源,通过主机的"控制面板"进入到"打印机和传真"文件夹,在空白处单击鼠标右键,选择"添加打印机"命 ...查看


  • 思科交换机的登录.密码恢复与应用
  • 思科交换机的登录.密码恢复与应用 一.登录交换机 首先找一根CONSOLE 线将计算机的串口与交换机的CONSOLE 口相连.(注:CONSOLE[控制台]线的一端为RJ45的水晶头,一端用DB9的串口,如果想要自己制作这根线,可以使用一根 ...查看


热门内容