FreeDOS的ABC:我一直在使用的26个命令

661 阅读17分钟

FreeDOS fish logo and command prompt on computer

图片由 Jim Hall, CC BY-SA 4.0.

我家的第一台电脑运行的是一个名为DOS的命令行操作系统,即 "磁盘操作系统"。我是在DOS下长大的,并且学会了利用命令行来使我的工作更容易。很多人也是如此。我们非常喜欢DOS,所以在1994年,我们创建了FreeDOS项目。今天6月29日,我们庆祝FreeDOS诞生28周年。

如果你是FreeDOS的新手,你可能对如何使用它的不同命令行程序感到困惑。让我们从我最喜欢的26个FreeDOS命令开始吧。要了解更多的信息,可以在大多数命令后面加上/?

C:\>attrib /?
ATTRIB v2.1 - Displays or changes file attributes.
Copyright (c) 1998-2003, licensed under GPL2.

Syntax: ATTRIB { options | [path][file] | /@[list] }

Options:

  +H Sets the Hidden attribute.     -H  Clears the Hidden attribute.
  +S Sets the System attribute.     -S  Clears the System attribute.
  +R Sets the Read-only attribute.  -R  Clears the Read-only attribute.
  +A Sets the Archive attribute.    -A  Clears the Archive attribute.

  /S Process files in all directories in the specified path(es).
  /D Process directory names for arguments with wildcards.
  /@ Process files, listed in the specified file [or in stdin].

Examples:

  attrib file -rhs
  attrib +a -r dir1 dir2*.dat /s
  attrib -hs/sd /@list.txt *.*

A是指ATTRIB

ATTRIB 程序显示或改变一个文件的属性。一个属性可以是四个值中的一个。隐藏(H),系统(S),只读(R),和存档(A)。

标记为隐藏的文件不会显示在目录列表中。例如,假设你想 "隐藏 "一个叫做SECRET.TXT 的文件,这样就不会有人知道它的存在。首先,你可以显示该文件的属性,看看它的当前设置。

C:\FILES>attrib secret.txt 
[----A] SECRET.TXT

要隐藏这个文件,通过使用加号 (+) 操作符打开隐藏属性,像这样。

C:\FILES>attrib +h secret.txt 
[----A] -> [-H--A] SECRET.TXT
C:\FILES>dir
 Volume in drive C is FREEDOS2022
 Volume Serial Number is 333D-0B18

 Directory of C:\FILES

.                   <DIR>  05-27-2022  9:22p
..                  <DIR>  05-27-2022  9:22p
         0 file(s)              0 bytes
         2 dir(s)     279,560,192 bytes free

另一种使用ATTRIB 的常用方法是通过操纵只读属性,这样你就不会意外地覆盖一个重要的文件。假设你想保护SECRET.TXT 文件,这样你就不能删除或改变它。像这样打开只读属性,用+R 修改器。

C:\FILES>attrib +r secret.txt 
[----A] -> [---RA] SECRET.TXT
C:\FILES>del secret.txt
C:\FILES\SECRET.TXT: Permission denied
no file removed.

B是指BEEP

如果你需要给一个批处理文件增加一点活力,你可以使用BEEP 命令来引起用户的注意。BEEP 不会在屏幕上显示任何东西,而只是生成一个经典的 "哔 "声。

注意,BEEP 使用PC的内置扬声器来发出 "哔哔 "声。如果你使用虚拟机启动FreeDOS,请检查你的系统是否被设置为正确模拟PC的扬声器。否则,你将听不到任何声音。

C是指CD

像Linux一样,FreeDOS支持目录,它允许你以一种对你有意义的方式组织你的文件。例如,你可以把所有的文件放在一个叫做FILES 的目录中,你可以在FILES 中为某些类型的文件设置其他的目录,例如DOCS 为文字处理器文件,或者SPRDSHT 为电子表格文件。

你可以使用CD更改目录命令导航到一个目录。CHDIR 命令与CD 相同,如果你喜欢使用该语法。

要进入一个新的目录,请使用CD 命令,并注明目标目录。

C:\>cd files
C:\FILES>cd sprdsht
C:\FILES\SPRDSHT>dir
Volume in drive C is FREEDOS2022
Volume Serial Number is 333D-0B18
  
Directory of C:\FILES\SPRDSHT
  
. <DIR> 05-27-2022 9:59p
.. <DIR> 05-27-2022 9:59p
FIB WKS 2,093 05-27-2022 10:07p
LAB1 WKS 2,087 05-27-2022 10:10p
MIS100 WKS 2,232 05-27-2022 10:05p
3 file(s) 6,412 bytes
2 dir(s) 279,527,424 bytes free

你不需要每次都浏览一个目录。你可以用一条CD 命令提供你想改变的整个目录路径。

C:\>cd \files\sprdsht
C:\FILES\SPRDSHT>dir
Volume in drive C is FREEDOS2022
Volume Serial Number is 333D-0B18
  
Directory of C:\FILES\SPRDSHT
  
.  <DIR> 05-27-2022 9:59p
.. <DIR> 05-27-2022 9:59p
FIB WKS 2,093 05-27-2022 10:07p
LAB1 WKS 2,087 05-27-2022 10:10p
MIS100 WKS 2,232 05-27-2022 10:05p
3 file(s) 6,412 bytes
2 dir(s) 279,527,424 bytes free

D是指DELTREE

如果你需要删除一个文件,你可以使用DEL 命令。要删除一个空目录,可以使用RMDIRRD 命令。但是,如果你想删除一个里面有很多文件和子目录的目录,该怎么办?

一个里面有其他目录的目录被称为目录树。你可以用DELTREE 命令删除整个目录树。例如,要删除你的FILES 目录,包括它所包含的所有文件和目录,输入这个命令。

C:\>deltree files

    [DEFAULT-BUILD v1.02g] of DELTREE.  The "ROOT-SAFETY-CHECK" is enabled.

Delete directory "C:\FILES"
and all its subdirectories?

[Y] [N] [Q], [ENTER] ?  Y

==> Deleting "C:\FILES" ...

你可以用一条DELTREE 命令轻松而迅速地抹去大量的工作,所以FreeDOS的DELTREE 提示你是否真的想这样做。小心使用这个命令。

E是指EDIT

如果你需要在FreeDOS上编辑一个文本文件,EDIT 程序可以让你快速而轻松地完成。例如,要开始编辑一个名为HELLO.TXT 的文件,输入EDIT HELLO.TXT 。如果HELLO.TXT 文件已经存在,EDIT 打开该文件进行编辑。如果HELLO.TXT 还不存在,那么EDIT 为你启动一个新文件。

Image of edit

图片由:

(Jim Hall, CC BY-SA 40)

FreeDOSEDIT 使用一个友好的界面,对大多数人来说应该很容易使用。使用菜单来访问EDIT的各种功能,包括保存文件、打开新文件或退出编辑器。要访问菜单,请点击键盘上的Alt键,然后使用方向键进行操作,并使用Enter键选择一个动作。

Image of save menu

图片由:(Jim Hall, CC BY-SA 40)

F是指FIND

如果你需要在一个文件中查找文本,FIND 命令可以完成这项工作。类似于Linux上的fgrepFIND ,打印出包含一个字符串的行。例如,要检查FDCONFIG.SYS 文件中的 "Menu Default "条目,可以像这样使用FIND

C:\>find "MENUDEFAULT" fdconfig.sys

---------------- FDCONFIG.SYS
MENUDEFAULT=2,5

如果你不确定你想找的字符串是使用大写还是小写字母,可以添加/I 选项来忽略字母大小写。

C:\>find /i "menudefault" fdconfig.sys
---------------- FDCONFIG.SYS
MENUDEFAULT=2,5

[ 下载小抄:Linux查找命令]

G是指GRAPHICS

如果你想捕捉屏幕,你可以使用键盘上的PrtScr(Print Screen)键,将显示器上的文字直接打印到打印机上。然而,这只适用于纯文本。如果你想打印图形屏幕,你需要加载GRAPHICS 程序。

GRAPHICS 支持不同的打印机类型,包括惠普PCL打印机、爱普生点阵打印机和兼容PostScript的打印机。例如,如果你有一台HP激光打印机连接到你的计算机上,你可以通过输入这个命令来加载对该打印机的支持。

C:\>graphics hpdefault
Running in MS GRAPHICS compatibility mode...
Using HPPCL type for type hpdefault
  If you think this is not correct, mail me (see help text).
Printing black as white and white as black
which internally uses /I of this GRAPHICS.
You can use the following command directly instead of
GRAPHICS [your options] in the future:
LH GRAPH-HP /I
Note that GRAPH-HP allows extra options:
  /E economy mode, /1 use LPT1, /2 use LPT2, /3 use LPT3,
  /R for random instead of ordered dither
  /C for 300dpi instead of 600dpi
Driver to make 'shift PrtScr' key work
even in CGA, EGA, VGA, MCGA graphics
modes loaded, in HP PCL mode.

H是HELP的意思

如果你是FreeDOS的新手,你可以通过键入HELP ,获得如何使用不同命令的提示。这就会出现FreeDOS的帮助系统,其中有关于所有命令的文档。

Image of FreeDos help system

图片由:(Jim Hall, CC BY-SA 40)

I是指IF

你可以使用IF 语句在你的命令行或批处理文件中添加条件语句。IF ,做一个简单的测试,然后执行一条命令。例如,如果某个文件存在,要打印结果 "它在那里",你可以输入。

C:\>if exist kernel.sys echo It's there
It's there

如果你想测试相反的结果,在测试前使用NOT 关键字。例如,如果两个字符串的值不一样,要打印 "不相等",可以这样输入。

C:\>if not "a"=="b" echo Not equal
Not equal

J是指JOIN

早期的DOS版本相当简单;DOS的第一个版本甚至不支持目录。为了给那些老程序提供向后的兼容性,我们有JOIN 程序作为一个巧妙的解决方法。JOIN ,用一个盘符代替路径,所以你可以把一个老程序放在它自己的子目录里,但用一个盘符来访问它。

假设你有一个叫VC 的老程序,它不理解目录。为了继续使用VC ,你可以把它的路径 "连接 "到一个盘符。举例来说。

JOIN V: D:\VC

FreeDOS 将JOIN 实现为SWSUBST ,它也结合了类似SUBST 命令的功能。要把D:\VC 的路径连接到一个新的驱动器号,称为V: ,键入。

C:\>swsubst v: d:\vc
C:\>dir v:
Volume in drive V is DATA
Volume Serial Number is 212C-1DF8

Directory of V:\

. <DIR> 02-21-2022 10:35p
.. <DIR> 02-21-2022 10:35p
VC COM 27,520 07-14-2019 4:48p

1 file(s) 27,520 bytes
2 dir(s) 48,306,176 bytes free

K是KEYB的意思

DOS在默认情况下假定是美国的键盘布局。如果你的键盘不一样,你可以使用KEYB 命令来加载一个新的键盘语言布局。例如,要加载一个德语键盘布局,键入。

C:\>keyb gr
FreeDOS KEYB 2.01 - (c) Aitor Santamaría Merino - GNU GPL 2.0
Keyboard layout : C:\FREEDOS\BIN\KEYBOARD.SYS:GR [858] (3)

L是指LABEL

FreeDOS用一个标签来命名每个软驱和硬盘。这些标签提供了一个方便的方法来识别一个磁盘可能包含的内容。当你需要在许多不同的软盘上存储文件时,LABEL 命令是非常有用的,你可以把一张软盘标为 "数据",把另一张软盘标为 "游戏"。

要给一个驱动器指定一个新的标签,或者改变一个驱动器上现有的标签,可以像这样使用LABEL。

D:\>label d: data
D:\>dir /w
Volume in drive D is DATA
Volume Serial Number is 212C-1DF8

Directory of D:\

[123] [ABILITY] [ASEASY] [GAMES2] [QUATTRO]
[SRC] [TEMP] [THE] [VC] [WORD]
[WS400] EDLIN16.EXE EDLIN32.EXE MYENV.BAT
3 file(s) 113,910 bytes
11 dir(s) 48,306,176 bytes free

M是指MEM

运行程序和加载驱动程序需要内存。要想知道你的系统有多少内存,以及有多少内存可用于运行DOS程序,请使用MEM

C:\>mem

Memory Type Total Used Free
---------------- -------- -------- --------
Conventional 639K 11K 628K
Upper 104K 18K 86K
Reserved 281K 281K 0K
Extended (XMS) 15,224K 537K 14,687K
---------------- -------- -------- --------
Total memory 16,248K 847K 15,401K
  
Total under 1 MB 743K 29K 714K
  
Total Expanded (EMS) 8,576K (8,781,824 bytes)
Free Expanded (EMS) 8,192K (8,388,608 bytes)
  
Largest executable program size 628K (643,104 bytes)
Largest free upper memory block 84K ( 85,728 bytes)
FreeDOS is resident in the high memory area.

N代表NANSI

如果你想给FreeDOS的命令行添加一点色彩,你可以使用ANSI转义序列。这些序列之所以被命名,是因为每个序列都以代码33(ESC )和一个特殊的字符序列开始,由美国国家标准协会(ANSI)定义。

FreeDOS通过NANSI.SYS 驱动程序支持ANSI转义序列。在加载了NANSI ,你的FreeDOS控制台可以解释ANSI转义序列,例如设置文本颜色。

Image of Nansi

O是oZone的意思

FreeDOS是一个命令行操作系统,但有些人喜欢用图形用户界面来代替。这就是为什么FreeDOS 1.3包括几个图形化的桌面。我喜欢的一个桌面叫oZone,它提供了一个光滑的、现代的界面。

Image of Ozone GUI

请注意,oZone有一些恼人的错误,可能需要外面的开发者给予一些关爱。如果你有兴趣让oZone变得更好,请随时下载源代码。

P是指PROMPT

标准的FreeDOS命令行提示告诉你你在文件系统中的位置。当你第一次启动FreeDOS时,你的提示符看起来像C:\> ,这意味着 "C:"驱动器上的"\"(根)目录。">"字符表示你可以输入命令的位置。

如果你喜欢提示符上的不同信息,可以使用PROMPT 命令来改变它。你可以用一个特殊的代码来表示不同的信息,前面加上$ ,比如$D 表示日期,$T 表示时间。例如,你可以用$$ 指令使你的FreeDOS命令行看起来像Linux的提示符,以打印一个单一的美元符号。

C:\>prompt $$
$

输入PROMPT /? ,可以看到所有特殊代码的列表。

Q是指QBASIC

FreeDOS实际上并没有QBASIC。那是一个用于MS-DOS的专有BASIC编程环境。相反,我们提供了几个开放源代码的编译器,包括一些用于BASIC编程的编译器。

FreeBASIC编译器应该可以编译出大多数QBASIC程序。这里有一个简单的 "猜数字 "的例子。

dim number as integer
dim guess as integer
randomize timer
number = int( 10 * rnd() ) + 1
print "Guess the number from 1 to 10:"
do
input guess
if guess < number then print "Too low"
if guess > number then print "Too high"
loop while guess <> number
print "That's right!"

使用FBC 命令用FreeBASIC编译该程序。

C:\DEVEL\FBC>fbc guess.bas

下面是这个简单游戏的一个快速演示。

C:\DEVEL\FBC>guess
Guess the number from 1 to 10:
? 5
Too high
? 3
Too low
? 4
That's right!

R是指REM

在编写程序时,注释是很好的;注释帮助我们理解程序应该做什么。你可以在批处理文件中使用REM 命令做同样的事情。在批处理文件中,REM 之后的任何内容都会被忽略。

REM this is a comment

S是指SET

FreeDOS命令行使用一组被称为环境变量的变量,使你能够定制你的系统。你可以用SET 命令来设置这些变量。例如,使用DIRCMD 变量来控制DIR 如何安排目录列表。要设置DIRCMD 变量,请使用SET 命令。

SET DIRCMD=/O:GNE

这告诉DIR ,先将目录分组(G),然后按名称(N)和扩展名(E)对输出结果进行排序(O)。

T是指类型

TYPE 命令是最常用的DOS命令之一。TYPE 显示一个文件的内容,类似于Linux上的cat

C:\DEVEL>type hello.c
#include 

int
main()
{
puts("Hello world");
return 0;
}

U是指UNZIP

在Linux上,你可能熟悉标准的Unix存档命令。tar.在FreeDOS上也有一个tar的版本(还有其他一些流行的存档程序),但DOS上事实上的标准存档程序是ZIPUNZIP 。两者都是默认安装在FreeDOS 1.3中。

假设我有一个包含一些文件的Zip档案。如果我想提取整个Zip文件,我可以直接使用UNZIP ,并将Zip文件作为一个命令行选项。这样就可以从我当前的工作目录开始提取压缩文件。除非我正在恢复某个东西的先前版本,否则我通常不想覆盖我当前的文件。在这种情况下,我想把存档解压缩到一个新的目录。你可以用-d ("destination")命令行选项指定目标路径。

D:\SRC>unzip monkeys.zip -d monkeys.new
Warning: TZ environment variable not found, cannot use UTC times!!
Archive: monkeys.zip
creating: monkeys.new/monkeys/
inflating: monkeys.new/monkeys/banana.c
inflating: monkeys.new/monkeys/banana.obj
inflating: monkeys.new/monkeys/banana.exe
creating: monkeys.new/monkeys/putimg/
inflating: monkeys.new/monkeys/putimg/putimg.c
inflating: monkeys.new/monkeys/putimg/putimg.obj
inflating: monkeys.new/monkeys/putimg/putimg.exe

要了解更多关于ZIPUNZIP 命令的信息,请阅读如何在FreeDOS上归档文件

V是VER的意思

在过去的DOS时代,VER 命令报告了你正在运行的DOS发行版,例如 "MS-DOS 5.0.D"。在FreeDOS上,VER 命令给你更多的细节,例如FreeDOS Shell的版本。

C:\DEVEL>ver
FreeCom version 0.85a - WATCOMC - XMS_Swap [Jul 10 2021 19:28:06]

如果你还想看到FreeDOS的内核版本和DOS的兼容级别,请添加/R 选项。

C:\DEVEL>ver /r

FreeCom version 0.85a - WATCOMC - XMS_Swap [Jul 10 2021 19:28:06]

DOS version 7.10
FreeDOS kernel 2043 (build 2043 OEM:0xfd) [compiled May 14 2021]

W是指WHICH

FreeDOS命令行可以从不同的目录列表中运行程序,这些目录在PATH 变量中标识。你可以使用WHICH 命令来确定一个程序的确切位置。只需输入WHICH ,再加上你想找到的程序的名称。

C:\>which xcopy
xcopy C:\FREEDOS\BIN\XCOPY.EXE

X是指XCOPY

COPY 命令只将文件从一个地方复制到另一个地方。如果你想扩大复制范围以包括任何目录,请使用XCOPY 命令。我通常添加/E 选项来包括所有子目录,包括空目录,这样我就可以复制整个目录树。这可以为我正在进行的任何项目提供有效的备份。

D:\SRC>xcopy /e monkeys monkeys.bak
Does MONKEYS.BAK specify a file name
or directory name on the target (File/Directory)? d
Copying D:\SRC\MONKEYS\PUTIMG\PUTIMG.C
Copying D:\SRC\MONKEYS\PUTIMG\PUTIMG.OBJ
Copying D:\SRC\MONKEYS\PUTIMG\PUTIMG.EXE
Copying D:\SRC\MONKEYS\BANANA.C
Copying D:\SRC\MONKEYS\BANANA.OBJ
Copying D:\SRC\MONKEYS\BANANA.EXE
6 file(s) copied

Y代表黄色

这不是一个命令,而是关于DOS如何显示颜色的有趣小故事。如果你仔细观察过FreeDOS,你可能已经注意到,文本只有有限的颜色范围,即16种文本颜色和8种背景颜色。

IBM 5153彩色显示器通过在不同的亮度下点亮微小的红、绿、蓝荧光粉点来向用户展示颜色,从而形成16种文字颜色和8种背景颜色的调色板。早期的个人电脑只能在 "正常强度 "水平上显示背景色;只有文本颜色可以使用明亮的颜色。

如果你看一下文本颜色,你有黑色、蓝色、绿色、青色、红色、洋红色、橙色和白色。这些颜色的 "明亮 "版本是明亮的黑色(沉闷的灰色)、明亮的蓝色、明亮的绿色、明亮的青色、明亮的红色、明亮的品红色、黄色和明亮的白色。橙色的 "明亮 "版本实际上是黄色。不存在 "明亮的橙色"。

如果你想了解更多关于文本颜色的信息,请阅读我们的文章:为什么FreeDOS有16种颜色

Z是指ZIP

你可以在DOS命令行中使用ZIP 来创建文件和目录的档案。这是一个方便的方法,可以为你的工作做一个备份,或者发布一个 "包",用于未来的FreeDOS发行。例如,假设我想为我的项目源代码做一个备份,其中包含这些源文件。

D:\SRC>zip -9r monkeys.zip monkeys
zip warning: TZ environment variable not found, cannot use UTC times!!
adding: monkeys/ (stored 0%)
adding: monkeys/banana.c (deflated 66%)
adding: monkeys/banana.obj (deflated 26%)
adding: monkeys/banana.exe (deflated 34%)
adding: monkeys/putimg/ (stored 0%)
adding: monkeys/putimg/putimg.c (deflated 62%)
adding: monkeys/putimg/putimg.obj (deflated 29%)
adding: monkeys/putimg/putimg.exe (deflated 34%)

ZIP运动了大量的命令行选项来做不同的事情,但我最常用的命令行选项是-r ,以递归地处理目录和子目录,以及-9 ,以提供尽可能大的压缩。ZIPUNZIP 使用类似Unix的命令行,所以你可以结合破折号后面的选项:-9r 给予最大的压缩并在Zip文件中包括子目录。

关于如何使用ZIPUNZIP 命令的更多细节,请阅读如何在FreeDOS上归档文件