经常使用命令 echo、@、call、pause、rem(小技巧:用::取代rem)是批处理文件最经常使用的几个命令,我们就从他们開始学起。 首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 以下是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 经常使用的參数界定符 Tab(09) ; = 不经常使用的參数界定符 + COPY命令文件连接符 * ? 文件通配符 "" 字符串界定符 | 命令管道符 < > >> 文件重定向符 @ 命令行回显屏蔽符 / 參数开关引导符 : 批处理标签引导符 % 批处理变量引导符 其次, :: 确实能够起到rem 的凝视作用, 并且更简洁有效; 但有两点须要注意: 第一, 除了 :: 之外, 不论什么以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的全部内容, 仅仅是为了与正常的标号相差别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号. 第二, 与rem 不同的是, ::后的字符行在运行时不会回显, 不管是否用echo on打开命令行回显状态, 由于命令解释器不觉得他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 能够用于 config.sys 文件里. echo echo 表示显示此命令后的字符 echo off 表示在此语句后全部执行的命令都不显示命令行本身 @与echo off相象,但@是加在每一个命令行的最前面。表示执行时不显示这一行的命令行(仅仅能影响当前行)。 ECHO 当程序执行时,显示或隐藏批处理程序中的正文。
也可用于同意或禁止命令的回显。 在执行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。 使用ECHO命令可关闭此功能。 语法:
ECHO [ON|OFF] [message] 參数 ON|OFF 指定是否同意命令的回显。若要显示当前的ECHO的设置。可使用不带參数的ECHO 命令。 message 指定让MS-DOS在屏幕上显示的正文。
call call 调用还有一个批处理文件(假设不用call而直接调用别的批处理文件。那么运行完那个批处理文件后将无法返回当前文件并运行当前文件的兴许命令) CALL 从一个批处理程序中调用还有一个批处理程序,而不会引起第一个批处理的中止。语法:
CALL [drive:][path]filename [batch-parameters] 參数 [drive:][path]filename 指定要调用的批处理程序的名字及其存放处。文件名称必须用.BAT作扩展名。batch-parameters 指定批处理程序所需的命令行信息。
pause pause 运行此句会暂停批处理的运行并在屏幕上显示Press any key to continue...的提示,等待用户按随意键后继续 rem 表示此命令后的字符为解释行(凝视)。不运行。仅仅是给自己今后參考用的(相当于程序中的凝视)。 PAUSE 暂停批处理程序的运行并显示一条消息。提示用户按随意键继续运行。仅仅能在批处 理程序中使用该命令。 语法: PAUSE rem rem 在批处理文件或CONFIG.SYS中增加注解。也可用REM命令来屏蔽命令(在CONFIG.SYS 中也能够用分号 ; 取代REM命令。但在批处理文件里则不能替代)。 语法: REM [string] 參数 string 指定要屏蔽的命令或要包括的注解。 例1: 用edit编辑a.bat文件。输入下列内容后存盘为c:\a.bat,运行该批处理文件后可实现:将根文件夹中全部文件写入 a.txt中,启动UCDOS,进入WPS等功能。 批处理文件的内容为: 命令凝视: @echo off 不显示兴许命令行及当前命令行 dir c:\*.* >a.txt 将c盘文件列表写入a.txt call c:\ucdos\ucdos.bat 调用ucdos echo 你好 显示"你好" pause 暂停,等待按键继续 rem 准备执行wps 凝视:准备执行wps cd ucdos 进入ucdos文件夹 wps 执行wps 批处理文件的參数 批处理文件还能够像C语言的函数一样使用參数(相当于DOS命令的命令行參数),这须要用到一个參数表示符"%"。 %[1-9]表示參数,參数是指在执行批处理文件时在文件名称后加的以空格(或者Tab)分隔的字符串。变量能够从%0到%9,%0表示批处理命令本身。其他參数字符串用%1到%9顺序表示。例2: C:根文件夹下有一批处理文件名称为f.bat。内容为: @echo off format %1 假设运行C:\>f a: 那么在运行f.bat时。%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际运行的是format a: 例3: C:根文件夹下一批处理文件名称为t.bat。内容为: @echo off type %1 type %2 那么执行C:\>t a.txt b.txt %1 : 表示a.txt %2 : 表示b.txt 于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
==== 注 =============== 參数在批处理中也作为变量处理, 所以相同使用百分号作为引导符, 其后跟0-9中的一个数字构成參数引用符. 引用符和參数之间 (比如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或很多其它个參数时, 就必须移动DOS 的參数起始指针. shift 命令正充当了这个移动指针的角色, 它将參数的起始指针移动到下一个參数, 类似C 语言中的指针操作. 图演示样例如以下: 初始状态, 为命令名, 能够用 %0 引用 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 经过1次shift后, cmd 将无法被引用 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 ^ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | %0 %1 %2 %3 %4 %5 %6 %7 %8 遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 仅仅有在 nt 内核命令行环境下, shift 才支持 /n 參数, 能够以第一參数为基准返复移动起始指针. ======================= 特殊命令 if goto choice for是批处理文件里比較高级的命令,假设这几个你用得非常熟练。你就是批处理文件的专家啦。 一、if if 是条件语句。用来推断是否符合规定的条件,从而决定运行不同的命令。 有三种格式: 1、if [not] "參数" == "字符串" 待运行的命令 參数假设等于(not表示不等,下同)指定的字符串,则条件成立,执行命令。否则执行下一句。 如: if "%1"=="a" format a: ==== 注 ===================== if 的命令行帮助中关于此点的描写叙述为: IF [NOT] string1==string2 command 在此有下面几点须要注意: 1. 包括字符串的双引號不是语法所必须的, 而仅仅是习惯上使用的一种"防空"字符 2. string1 未必是參数, 它也能够是环境变量, 循环变量以及字符串常量或变量 3. command 不是语法所必须的, string2 后跟一个空格就能够构成一个有效的命令行 ============================= 2、if [not] exist [路径\]文件名称 待运行的命令 假设有指定的文件,则条件成立,执行命令,否则执行下一句。
如:
if exist c:\config.sys type c:\config.sys 表示假设存在c:\config.sys文件。则显示它的内容。 ==== 注 ===================== 也能够使用下面的使用方法: if exist command device 是指DOS系统中已载入的设备, 在win98下通常有: AUX, PRN, CON, NUL COM1, COM2, COM3, COM4 LPT1, LPT2, LPT3, LPT4 XMSXXXX0, EMMXXXX0 A: B: C: ..., CLOCK$, CONFIG$, DblBuff$, IFS$HLP$ 详细的内容会因硬环境的不同而略有差异, 使用这些设备名称时, 须要保证下面三点: 1. 该设备确实存在(由软件虚拟的设备除外) 2. 该设备驱动程序已载入(aux, prn等标准设备由系统缺省定义) 3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等) 可通过命令 mem/d | find "device" /i 来检阅你的系统中所载入的设备 另外, 在DOS系统中, 设备也被觉得是一种特殊的文件, 而文件也能够称作字符设备; 由于设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名称, 仅仅只是句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备载入也即指在内存中为其分配可引用的句柄. ================================ 3、if errorlevel <数字> 待运行的命令 非常多DOS程序在执行结束后会返回一个数字值用来表示程序执行的结果(或者状态)。通过if errorlevel命令能够推断程序的返回值,依据不同的返回值来决定执行不同的命令(返回值必须依照从大到小的顺序排列)。假设返回值等于指定的数字,则条件成立,执行命令,否则执行下一句。 如: if errorlevel 2 goto x2 ==== 注 ====================== 返回值从大到小的顺序排列不是必须的, 而仅仅是运行命令为 goto 时的习惯使用方法, 当使用 set 作为运行命令时, 一般会从小到大顺序排列, 比方需将返回码置入环境变量, 就需使用下面的顺序形式: if errorlevel 1 set el=1 if errorlevel 2 set el=2 if errorlevel 3 set el=3 if errorlevel 4 set el=4 if errorlevel 5 set el=5 ... 当然, 也能够使用下面循环来替代, 原理是一致的: for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e 更高效简洁的使用方法, 能够參考我写的还有一篇关于获取 errorlevel 的文章 出现此种现象的原因是, if errorlevel 比較返回码的推断条件并不是等于, 而是大于等于. 因为 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而因为 set命令的 "反复" 赋值特性, 由大到小排序会导致较小的返回码 "覆盖" 较大的返回码. 另外, 尽管 if errorlevel=<数字> command 也是有效的命令行, 但也仅仅是 command.com 解释命令行时将 = 作为命令行切分符而忽略掉罢了 ================================ 二、goto goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用。依据不同的条件来运行不同的命令组。如: goto end :end echo this is the end 标号用":字符串"来定义,标号所在行不被运行。
====== 注 ====================== label 常被译为 "标签" , 可是这并不具有广泛的约定性. goto 与 : 联用可实现运行中途的跳转, 再结合 if 可实现运行过程的条件分支, 多个 if 就可以实现命令的分组, 类似 C 中 switch case 结构或者 Basic 中的 select case 结构, 大规模且结构化的命令分组就可以实现高级语言中的函数功能. 下面是批处理和C/Basic在语法结构上的对比: Batch C / Basic goto&: goto&: goto&:&if if{}&else{} / if&elseif&endif goto&:&if... switch&case / select case goto&:&if&set&envar... function() / function(),sub() ================================ 三、choice choice 使用此命令能够让用户输入一个字符(用于选择),从而依据用户的选择返回不同的errorlevel,然后于if errorlevel配合,依据用户的选择执行不同的命令。 注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本号的choice命令语法会稍有不同,请用choice /?查看使用方法。
choice的命令语法(该语法为Windows 2003中choice命令的语法,其他版本号的choice的命令语法与此大同小异): CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text] 描写叙述: 该工具同意用户从选择列表选择一个项目并返回所选项目的索引。 參数列表: /C choices 指定要创建的选项列表。 默认列表是 "YN"。 /N 在提示符中隐藏选项列表。提示前面的消息得到显示。 选项依然处于启用状态。 /CS 同意选择分大写和小写的选项。在默认情况下,这个工具 是不分大写和小写的。/T timeout 做出默认选择之前,暂停的秒数。
可接受的值是从 0 到 9999。
假设指定了 0,就不会有暂停,默认选项 会得到选择。
/D choice 在 nnnn 秒之后指定默认选项。 字符必须在用 /C 选 项指定的一组选择中; 同一时候。必须用 /T 指定 nnnn。/M text 指定提示之前要显示的消息。假设没有指定。工具仅仅显示提示。 /?
显示帮助消息。
注意: ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选 择返回 1,第二个选择返回 2。等等。假设用户按的键不是有效的选择, 该工具会发出警告响声。假设该工具检測到错误状态,它会返回 255 的 ERRORLEVEL 值。
假设用户按 Ctrl+Break 或 Ctrl+C 键。该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 參数时。将參数降 序排列。
演示样例: CHOICE /? CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。" CHOICE /T 10 /C ync /CS /D y CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。" CHOICE /C ab /N /M "选项 1 请选择 a。选项 2 请选择 b。"
======= 注 ===================== 我列出win98下choice的使用方法帮助, 已资区分 Waits for the user to choose one of a set of choices. 等待用户选择一组待选字符中的一个 CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text] /C[:] choices Specifies allowable keys. Default is YN 指定同意的按键(待选字符), 默觉得YN /N Do not display choices and ?at end of prompt string. 不显示提示字符串中的问号和待选字符
/S Treat choice keys as case sensitive. 处理待选字符时大写和小写敏感 /T[:]c,nn Default choice to c after nn seconds 在 nn 秒后默认选择 c text Prompt string to display 要显示的提示字符串 ERRORLEVEL is set to offset of key user presses in choices. ERRORLEVEL 被设置为用户键入的字符在待选字符中的偏移值 假设我执行命令: CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"
屏幕上会显示: 确认请按 Y,否请按 N。或者取消请按 C。 [Y,N,C]? 例:test.bat的内容例如以下(注意。用if errorlevel推断返回值时,要按返回值从高到低排列): @echo off choice /C dme /M "defrag,mem,end" i f errorlevel 3 goto end if errorlevel 2 goto mem if errorlevel 1 goto defrag :defrag c:\dos\defrag goto end :mem mem goto end :end echo good bye 此批处理运行后。将显示"defrag,mem,end[D,M,E]?" 。用户可选择d m e ,然后if语句依据用户的选择作出推断,d表示运行标号为defrag的程序段,m表示运行标号为mem的程序段,e表示运行标号为end的程序段。每一个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。四、for 循环命令,仅仅要条件符合。它将多次运行同一命令。 语法: 对一组文件里的每个文件运行某个特定命令。 FOR %%variable IN (set) DO command [command-parameters] %%variable 指定一个单一字母可替换的參数。
(set) 指定一个或一组文件。能够使用通配符。 command 指定对每一个文件运行的命令。 command-parameters 为特定命令指定參数或命令行开关。
比如一个批处理文件里有一行:
for %%c in (*.bat *.txt) do type %%c 则该命令行会显示当前文件夹下全部以bat和txt为扩展名的文件的内容。须要指出的是, 当()中的字符串并不是单个或多个文件名称时, 它将单纯被当作字符串替换, 这个特性再加上()中能够嵌入多个字符串的特性, 非常明显 for 能够被看作一种遍历型循环. 当然, 在 nt/2000/xp/2003 系列的命令行环境中, for 被赋予了很多其它的特性, 使之能够分析命令输出或者文件里的字符串, 也有非常多开关被用于扩展了文件替换功能. 批处理演示样例 1. IF-EXIST 1) 首先用记事本在C:\建立一个test1.bat批处理文件。文件内容例如以下: @echo off IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist 然后执行它: C:\>TEST1.BAT 假设C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,假设不存在,批处理就会提示你该文件不存在。 2) 接着再建立一个test2.bat文件,内容例如以下: @ECHO OFF IF EXIST \%1 TYPE \%1 IF NOT EXIST \%1 ECHO \%1 does not exist 执行: C:\>TEST2 AUTOEXEC.BAT 该命令执行结果同上。 说明: (1) IF EXIST 是用来測试文件是否存在的,格式为 IF EXIST [路径+文件名称] 命令 (2) test2.bat文件里的%1是參数,DOS同意传递9个批參数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实參和形參的关系,%1是形參,AUTOEXEC.BAT是实參。
==== 注 ======================== DOS没有 "同意传递9个批參数信息" 的限制, 參数的个数仅仅会受到命令行长度和所调用命令处理能力的限制. 可是, 我们在批处理程序中, 在同一时刻仅仅能同一时候引用10个參数, 由于 D OS仅仅给出了 %0~%9这十个參数引用符. ================================= 3) 更进一步的,建立一个名为TEST3.BAT的文件,内容例如以下: @echo off IF "%1" == "A" ECHO XIAO IF "%2" == "B" ECHO TIAN IF "%3" == "C" ECHO XIN 假设执行: C:\>TEST3 A B C 屏幕上会显示: XIAO TIAN XIN 假设执行: C:\>TEST3 A B 屏幕上会显示 XIAO TIAN 在这个命令运行过程中。DOS会将一个空字符串指定给參数%3。
2、IF-ERRORLEVEL 建立TEST4.BAT,内容例如以下: @ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 1 ECHO 文件拷贝失败 IF ERRORLEVEL 0 ECHO 成功复制文件 然后运行文件: C:\>TEST4 假设文件拷贝成功。屏幕就会显示"成功复制文件",否则就会显示"文件拷贝失败"。 IF ERRORLEVEL 是用来測试它的上一个DOS命令的返回值的, 注意:仅仅是上一个命令的返回值,并且返回值必须按照从大到小次序顺序推断。 因此以下的批处理文件是错误的: @ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 0 ECHO 成功复制文件 IF ERRORLEVEL 1 ECHO 未找到复制文件 IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 不管拷贝是否成功,后面的: 未找到复制文件用户通过ctrl-c中止拷贝操作 预置错误阻止文件拷贝操作 拷贝过程中写盘错误 都将显示出来。 下面就是几个经常使用命令的返回值及其代表的意义: backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完毕 3 用户用ctrl-c中止备份 4 因为致命的错误使备份操作中止 diskcomp 0 盘比較同样 1 盘比較不同 2 用户通过ctrl-c中止比較操作 3 因为致命的错误使比較操作中止 4 预置错误中止比較 diskcopy 0 盘拷贝操作成功 1 非致命盘读/写错 2 用户通过ctrl-c结束拷贝操作 3 因致命的处理错误使盘拷贝中止 4 预置错误阻止拷贝操作 format 0 格式化成功 3 用户通过ctrl-c中止格式化处理 4 因致命的处理错误使格式化中止 5 在提示"proceed with format(y/n)?"下用户键入n结束 xcopy 0 成功复制文件 1 未找到复制文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误 chkdsk 0 未找到错误 255 找到一个或多个错误 choice 0 用户按下ctrl+c/break 1 用户按下第一个键 255 检測到命令行中的错误条件 其他 用户按下的有效字符在列表中的位置 defrag 0 碎片压缩成功 1 出现内部错误 2 磁盘上没有空簇。要执行DEFRAG。至少要有一个空簇 3 用户用Ctrl+C退出了DEFRAG 4 出现一般性错误 5 DEFRAG在读簇时遇到错误 6 DEFRAG在写簇时遇到错误 7 分配空间有错 8 内存错 9 没有足够空间来压缩磁盘碎片 deltree 0 成功地删除一个文件夹 diskcomp 0 两盘同样 1 发现不同 2 按CTRL+C 终止了比較 3 出现严重错误 4 出现初始化错误 find 0 查找成功且至少找到了一个匹配的字符串 1 查找成功但没找到匹配的字符串 2 查找中出现了错误 keyb 0 键盘定义文件装入成功 1 使用了非法的键盘代码。字符集或语法 2 键盘定义文件坏或未找到 4 键盘、监视器通讯时出错 5 要求的字符集未准备好 move 0 成功地移动了指定的文件 1 发生了错误 msav /N 86 检查到了病毒 replace 0 REPLACE成功地替换或增加了文件 1 MS-DOS版本号和REPLACE不兼容 2 REPLACE找不到源文件 3 REPLACE找不到源路径或目标路径 5 不能存取要替换的文件 8 内存不够无法运行REPLACE 11 命令行句法错误 restore 0 RESTORE成功地恢复了文件 1 RESTORE找不到要恢复的文件 3 用户按CTRL+C终止恢复过程 4 RESTORE因错误而终止 scandisk 0 ScanDisk在它检查的驱动器上未检測到不论什么错误 1 因为命令行的语法不正确,不能执行ScanDisk 2 因为内存用尽或发生内部错误。ScanDisk意外终止 3 用户让ScanDisk中途退出 4 进行盘面扫描时。用户决定提前退出 254 ScanDisk找到磁盘故障并已所有校正 255 ScanDisk找到磁盘故障,但未能所有校正 setver 0 SETVER成功地完毕了任务 1 用户指定了一个无效的命令开关 2 用户指定了一个非法的文件名称 3 没有足够的系统内存来执行命令 4 用户指定了一个非法的版本号号格式 5 SETVER在版本号表中未找到指定的项 6 SETVER未找到SETVER.EXE文件 7 用户指定了一个非法的驱动器 8 用户指定了太多的命令行參数 9 SETVER检測到丢失了命令行參数 10 在读SETVER.EXE文件时,SETVER检測到错误发生 11 SETVER.EXE文件损坏 12 指定的SETVER.EXE文件不支持版本号表 13 版本号表中没有足够的空间存放新的项 14 在写SETVER.EXE文件时SETVER检測到错误发生 3、IF STRING1 == STRING2 建立TEST5.BAT,文件内容例如以下: @echo off IF "%1" == "A" FORMAT A: 运行: C:\>TEST5 A 屏幕上就出现是否将A:盘格式化的内容。 注意:为了防止參数为空的情况,通常会将字符串用双引號(或者其他符号,注意不能使用保留符号)括起来。
如:
if [%1]==[A] 或者 if %1*==A* 5、 GOTO 建立TEST6.BAT,文件内容例如以下: @ECHO OFF IF EXIST C:\AUTOEXEC.BAT GOTO _COPY GOTO _DONE :_COPY COPY C:\AUTOEXEC.BAT D:\ :_DONE 注意: (1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。(2) 标号的命名规则与文件名称的命名规则同样。
(3) DOS支持最长八位字符的标号。当无法差别两个标号时,将跳转至近期的一个标号。 ====== 注 ====================== 1)标号也称作标签(label) 2)标签不能以大多数的非字母数字字符開始, 而文件名称中则能够使用非常多 3)当无法差别两个标签时, 将跳转至位置最靠前的标签 ================================ 4、FOR 建立C:\TEST7.BAT,文件内容例如以下: @ECHO OFF FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C 执行: C:\>TEST7 运行以后,屏幕上会将C:盘根文件夹下全部以BAT、TXT、SYS为扩展名的文件内容显示出来(不包含隐藏文件)。