cmd进入文件后如何退出(详解cmd运行文件的操作技巧)

什么是CMD?

cmd是大多数Windows操作系统中可用的命令行解释器应用程序。用于执行输入的命令。其中大多数命令通过脚本和批处理文件自动执行任务,执行高级管理功能,并排除或解决某些类型的Windows问题。cmd称为Windows命令处理器,但有时也被称为命令shell或cmd提示符,甚至其文件cmd.exe。
cmd进入文件后如何退出(详解cmd运行文件的操作技巧)

第一章 批处理基础

第一节 常用批处理内部命令简介

批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展 名为 BAT 或者 CMD。这些命令统称批处理命令。小知识:可以在键盘上按下 Ctrl C 组合键来强行终止一个批处理的执行过程。了解了大概意思后,我们正式开始学习.先看一个简单的例子!

@echo off

echo”欢迎来到非常 BAT!”pause把上面的 3 条命令保存为文件 test.bat 或者 test.cmd 然后执行, 他就会在屏幕上显示以下二行话:欢迎来到非常 BAT!

请按任意键继续. . .

这就是一个简单批处理文件了,这个批处理文件一共就用了 2 条命令 “echo” 和”pause” 还有一个特殊符号”@”

从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功 能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些 最常用的!

批处理的常见命令(未列举的命令还比较多)

1、REM 和 ::

2、ECHO 和 @

3、PAUSE

4、ERRORLEVEL

5、TITLE

6、COLOR

7、mode 配置系统设备

8、GOTO 和 :

9、FIND

10、START

11、assoc和 ftype

12、pushdpopd

13、CALL

14、shift

15、IF

16、setlocal 与 变量延迟

17、ATTRIB显示或更改文件属性介绍命令

1、REM 和 ::

REM 为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。其次, :: 也可以起到 rem 的注释作用, 而且更简洁有效; 但有两点需要注意:

第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。有效标号:冒号后紧跟一个以字母数字开头的字符串,goto 语句可以识别。

无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto 无法识别的标号,可以起到注释作用,所以 ::常被用作注释符号,其实 : 也可起注释作用。

第二, 与 rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用 echo on 打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于config.sys 文件中。

行内注释格式:%注释内容% (不常用,慎用)

2、ECHO 和 @

@字符放在命令前将关闭该命令回显,无论此时 echo 是否为打开状态。

echo 命令的作用列举如下:

(1)打开回显或关闭回显功能格式:echo[{ on|off}]

如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”。

(2)显示当前 ECHO设置状态格式:echo

(3)输出提示信息

格式:ECHO 信息内容

上述是 ECHO 命令常见的三种用法,也是大家熟悉和会用的,但作为 DOS 命令淘金者你还应该知道下面的技巧:

(4)关闭 DOS命令提示符

在 DOS 提示符状态下键入 ECHO OFF,能够关闭 DOS 提示符的显示使屏幕只留下光标,直至键入 ECHO ON,提示符才会重新出现。

(5)输出空行,即相当于输入一个回车格式:ECHO.

值得注意的是命令行中的“.”要紧跟在 ECHO 后面中间不能有空格,否则“.”将被当作提示信息输出到屏幕。另外“.”可以用,:;”/[\]+等任一符号替代。

命令 ECHO.输出的回车,经 DOS 管道转向可以作为其它命令的输入,比如 echo.|time 即相当于在 TIME

命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到 DOS 提示符状态

(6)答复命令中的提问

格式:ECHO 答复语|命令文件名

上述格式可以用于简化一些需要人机对话的命令(如:CHKDSK/F;FORMAT Drive:;del *.*)的操作,它是通过 DOS 管道命令把 ECHO 命令输出的预置答复语作为人机对话命令的输入。下面的例子就相当于在调用的命令出现人机对话时输入“Y”回车:

C:>ECHO Y|CHKDSK/F C:>ECHO Y|DEL A :*.*

(7)建立新文件或增加文件内容格式:ECHO文件内容>文件名

ECHO 文件内容>>文件名例如:

C:>ECHO @ECHO OFF>AUTOEXEC.BAT 建立自动批处理文件

C:>ECHO C:\CPAV\BOOTSAFE>>AUTOEXEC.BAT 向自动批处理文件中追加内容

C:>TYPE AUTOEXEC.BAT 显示该自动批处理文件

@ECHO OFF C:\CPAV\BOOTSAFE

(8)向打印机输出打印内容或打印控制码格式:ECHO打印机控制码>PRN

ECHO 打印内容>PRN

下面的例子是向 M-1724 打印机输入打印控制码。<Alt>156 是按住 Alt 键在小键盘键入 156,类似情况依此类推:

C:>ECHO 156 42 116>PRN(输入下划线命令 FS*t)

C:>ECHO [email= 155@] 155@>PRN[/email](输入初始化命令 ESC@) C:>ECHO.>PRN(换行)

(9)使喇叭鸣响

C:>ECHO ^G

“^G”是在 dos窗口中用 Ctrl+G或 Alt+007输入,输入多个^G可以产生多声鸣响。使用方法是直接将其加入批处理文件中或做成批处理文件调用。

这里的“^G”属于特殊符号的使用,请看本文后面的章节

3、PAUSEPAUSE,玩游戏的人都知道,暂停的意思,在这里就是停止系统命令的执行并显示下面的内容。例:

PAUSE

运行显示:

请按任意键继续. . .

要显示其他提示语,可以这样用:

Echo 其他提示语 & pause > nul

4、errorlevel

程序返回码

echo %errorlevel%

每个命令运行结束,可以用这个命令行格式查看返回码用于判断刚才的命令是否执行成功

默认值为 0,一般命令执行出错会设 errorlevel 为 1

5、title

设置 cmd 窗口的标题

title新标题#可以看到cmd窗口的标题栏变了

6、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” 在亮白色上产生亮红色

7、mode 配置系统设备

配置系统设备。

串行口:MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d][STOP=s]

[to=on|off] [xon=on|off] [odsr=on|off] [octs=on|off] [dtr=on|off|hs][rts=on|off|hs|tg] [idsr=on|off]

设备状态:MODE [device][/STATUS]

打印重定向:MODELPTn[:]=COMm[:]

选定代码页:MODE CON[:] CPSELECT=yyy

代码页状态:MODE CON[:] CP[/STATUS]

显示模式:MODE CON[:] [COLS=c][LINES=n]

击键率:MODE CON[:] [RATE=rDELAY=d]

例:

mode con cols=113 lines=15 & color 9f

此命令设置 DOS 窗口大小:15 行,113 列

8、GOTO 和 :

GOTO 会点编程的朋友就会知道这是跳转的意思。

在批处理中允许以“:XXX”来构建一个标号,然后用 GOTOXXX跳转到标号:XXX处,然后执行标号后的命令。

例:

if {%1}=={} goto noparms if “%2″==”” goto noparms

标签的名字可以随便起,但是最好是有意义的字符串啦,前加个冒号用来表示这个字符串是标签,goto命令就是根据这个冒号(:)来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。

例:

@echo off

:startset /a var =1echo %var%if %var% leq 3 GOTO start pause

运行显示:

1

2

3

4

9、find

在文件中搜索字符串。

FIND [/V] [/C] [/N] [/OFF[LINE]] “string” [[drive:][path]filename[ …]]

/V显示所有未包含指定字符串的行。

/C仅显示包含字符串的行数。

/N显示行号。

/I搜索字符串时忽略大小写。

/OFF[LINE] 不要跳过具有脱机属性集的文件。”string” 指 定 要 搜 索 的 文 字 串 ,[drive:][path]filename

指定要搜索的文件。

如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。

Find 常和 type 命令结合使用

Type[drive:][path]filename|find”string” [>tmpfile] #挑选包含 string的行Type[drive:][path]filename|find/v”string” #剔除文件中包含 string的行Type[drive:][path]filename|find/c#显示文件行数

以上用法将去除 find 命令自带的提示语(文件名提示)

例:

@echo off

echo 111 >test.txtecho 222 >>test.txtfind “111” test.txt del test.txt

pause

运行显示如下:

———-TEST.TXT111

请按任意键继续. . .

例:

@echo off

echo 111 >test.txtecho 222 >>test.txttype test.txt|find “111”del test.txt

pause

运行显示如下:

111

请按任意键继续. . .

10、start 命令

批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序 的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令例:start explorer d:\

调用图形界面打开 D 盘

11、assoc 和 ftype

文件关联

assoc 设置’文件扩展名’关联,关联到’文件类型’ ftype 设置’文件类型’关联,关联到’执行程序和参数’当你双击一个.txt 文件时,windows 并不是根据.txt 直接判断用 notepad.exe 打开而是先判断.txt 属于 txtfile ‘文件类型’再调用 txtfile 关联的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1可以在”文件夹选项”→”文件类型”里修改这 2 种关联assoc#显示所有’文件扩展名’关联assoc.txt#显示.txt代表的’文件类型’,结果显示 .txt=txtfileassoc.doc#显示.doc代表的’文件类型’,结果显示.doc=Word.Document.8 assoc.exe#显示.exe代表的’文件类型’,结果显示.exe=exefileftype#显示所有’文件类型’关联ftype exefile#显示 exefile 类型关联的命令行,结果显示 exefile=”%1″ %* assoc .txt=Word.Document.8设置.txt 为 word 类型的文档,可以看到.txt 文件的图标都变了assoc .txt=txtfile恢复.txt 的正确关联ftype exefile=”%1″ %*恢复 exefile 的正确关联

如果该关联已经被破坏,可以运行 command.com ,再输入这条命令

15、IFIF 条件判断语句,语法格式如下:

IF [NOT] ERRORLEVEL number command

IF [NOT] string1==string2 command

IF [NOT] EXIST filename command

下面逐一介绍,更详细的分析请看后面章节。

(1)IF [NOT] ERRORLEVEL numbercommand

IF ERRORLEVEL 这个句子必须放在某一个命令的后面,执行命令后由 IF ERRORLEVEL 来判断命令的返回值。Number 的数字取值范围 0~255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立

例 : @echo offdir c:

rem 退出代码为>=1 就跳至标题 1 处执行,>=0 就跳至标题 0 处执行

IFERRORLEVEL1goto1

IFERRORLEVEL0goto0

Rem 上面的两行不可交换位置,否则失败了也显示成功。

:0

echo 命令执行成功!

Rem 程序执行完毕跳至标题 exit 处退出

goto exit

:1

echo 命令执行失败!

Rem 程序执行完毕跳至标题 exit 处退出

goto exit

:exitpause

运行显示:命令执行成功!

(2)IF [NOT] string1==string2command

string1 和 string2 都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)

条件相等后即执行后面的 command

检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式

if [NOT] {string1}=={string2}command if [NOT] [string1]==[string2] commandif [NOT]”string1″==”string2″command

这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就 不行:

if {string1}==[string2] command

(3)IF [NOT] EXIST filename command EXISTfilename为文件或目录存在的意思 echooff

IF EXIST autoexec.bat echo 文件存在!

IF not EXIST autoexec.bat echo 文件不存在!

这个批处理大家可以放在 C 盘和 D 盘分别执行,看看效果

16、setlocal 与 变量延迟

本条内容引用[英雄出品]的批处理教程:

要想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。为了更好的说明问题,我们先引入一个例子。

例 1:@echo offset a=4set a=5 & echo %a%pause

结果:4

解说:为什么是 4 而不是 5 呢?在 echo 之前明明已经把变量 a 的值改成 5 了? 让我们先了解一下批处理运行命令的机制:

批处理读取命令时是按行读取的(另外例如 for命令等,其后用一对圆括号闭合的所有语句也当作一行), 在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例 1,批处理在运行到这句“seta=5&echo%a%”之前,先把这一句整句读取并做了预处理——对变量 a赋了值, 那么%a%当然就是 4了!(没有为什么,批处理就是这样做的。)

而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的 赋值。

那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下: 例 2:

@echo offsetlocal enabledelayedexpansion set a=4set a=5 & echo !a! pause

结果:5

解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。

分析一下例 2,首先“setlocalenabledelayedexpansion”开启变量延迟,然后“seta=4”先给变量 a赋值为4,“seta=5&echo!a!”这句是给变量 a赋值为 5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时 a的值就是 5了)。

再举一个例子巩固一下。例 3:@echo offset local enabledelayedexpansion for /l %%i in (1,1,5) do (set a=%%iecho !a!)pause 结果: 1

2

3

4

5

解说:本例开启了变量延迟并用“!!”将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现 什么结果呢?结果是这样的: ECHO 处于关闭状态。ECHO 处于关闭状态。ECHO 处于关闭状态。ECHO 处于关闭状态。ECHO 处于关闭状态。即没有感知到 for 语句中的动态变化。提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也 可以加以利用,看例子。例:交换两个变量的值,且不用中间变量

@echo off

::目的:交换两个变量的值,但是不使用临时变量

::Code by JM 2007-1-24 [email=CMD@XP]CMD@XP[/email]

:: 出 处 :[url=http://www.cn-dos.net/forum/viewthread.php?tid=27078]http://www.cn- dos.net/forum/viewthread.php?tid=27078[/url]

set var1=abc

set var2=123

echo 交换前: var1=%var1% var2=%var2% set var1=%var2%&

set var2=%var1%

echo 交换后: var1=%var1% var2=%var2%

pause

17、ATTRIB 显示或更改文件属性

ATTRIB [ R|-R] [ A|-A] [ S|-S] [ H|-H] [[drive:] [path] filename] [/S [/D]]

设置属性。- 清除属性。R 只读文件属性。A 存档文件属性。S 系统文件属性。H 隐藏文件属性。[drive:][path][filename]指定要处理的文件属性。

/S 处理当前文件夹及其子文件夹中的匹配文件。

/D 也处理文件夹。

例:

md autorun

attrib a s h autorun

上面的命令将建立文件夹 autorun,然后将其设为存档、系统、隐藏属性

发表评论

登录后才能评论