我在开发某个应用程序时想知道(虽然这不是一个开发问题)cd
Windows 中使用的命令是否是通配符或某种跨平台命令。我查看了 Unix/Linux 和 MAC OS X 的命令表,结果发现它似乎在那里。我不是多操作系统用户,所以我问是否有使用过不同操作系统的人可以告诉我:
- 如果此命令确实存在且有效
- 如果它具有相同的功能(更改目录)
- 如果使用过程中出现任何问题
- 如果在任何操作系统中,有另一个命令行命令以更好/更复杂/更常用的方式执行相同操作。
提前致谢!
(PSI 不能 100% 确定这个问题是否属于这个网站或其他 stackexchange 网站......)
(PPS 任何对此进行标记的帮助都将不胜感激!)
答案1
如果此命令确实存在且有效
嗯,是的,它存在并且有效。
如果它具有相同的功能(更改目录)
是的,确实如此。这并不是说有人不能简单地创建一个执行cd.exe
其他操作的程序(例如),但它通常是内置在 shell 中的命令,用于更改当前目录。
如果使用过程中出现任何问题
什么样的问题?除了 和 之外.
,..
它的语法非常简单。唯一的复杂之处是更改其他卷(驱动器号)上的当前目录。此外,Windows 中的命令扩展略微扩展了它的使用范围,但不会引起任何实际问题。
如果在任何操作系统中,有另一个命令行命令以更好/更复杂/更常用的方式执行相同操作。
不是。可以有其他命令,但这个cd
命令既好用又简短,而且很管用。除了更改目录之外(例如cd /d t:\blah
),更改当前驱动器,究竟还能如何改进当前目录?
这不太符合主题(尽管相关),但显然有些人似乎无法接受该CD
命令不有被嵌入到外壳中。事实上它确实不是; 它能是一个外部程序。有些操作系统让这变得容易,有些则让这变得困难,有些甚至可能让这变得不可能,但事实是它能是外部的,并且不必须始终内置正如有些人想让你相信的那样。例如,在 32 位版本的 Windows(包括 XP 和 7)上,你可以利用控制台子系统(这是 Windows 中支持和运行文本模式程序的方式)支持旧的“DOS”中断 0x21 的事实 — 是的,即使在 中也是如此cmd
,而不仅仅是 `command。(它不适用于 64 位版本的 Windows,因为它们放弃了大量向后兼容性。)
例如,您可以将下面的调试脚本另存为,并通过从命令行c.scr
运行来编译它。它将创建一个文件,您可以使用该文件来更改当前目录。debug < c.scr
.com
a
mov si,82
mov dl,[si]
or dl,20
sub dl,61
mov ah,e
int 21
mov dl,[si]
cmp dl,d
jz 119
inc si
jmp 10f
xor dl,dl
mov [si],dl
mov dx,82
mov ah,3b
int 21
mov ah,4c
int 21
n c.com
rcx
28
w
q
(请注意,它不支持长文件名,因此你需要使用8.3版本。它也会更改当前驱动器,因此您可以一次性将目录更改为另一个驱动器,但它以非常简单的方式执行此操作并且不进行任何错误检查,因此尝试更改为以驱动器所在的字母开头的目录将不起作用。也就是说,c c:\windows
将按 运行c \windows
,但c asd
如果您有一个驱动器,则不会运行A:
,除非它恰好包含名为 的目录。您可以根据需要扩展它并添加错误检查等,但这证明了我关于在 Windows 中外部化asd
可能性的观点。)cd
您还可以保存以下 Pascal 程序(例如,作为c.pas
)并使用 Turbo Pascal 或 FreePascal 编译器的 GO32 版本进行编译(32 位版本不起作用,因为它使用普通的 Windows API):
program cd;
begin
chdir(paramstr(1));
end.
再次,只需运行它来改变当前目录(例如,`c.exe“c:\program files” - 是的,长文件夹名称可以起作用,但在执行时会自动转换为 8.3 名称)。
答案2
更改目录命令的概念cd
是 1969 年作为 Unix 的一部分发明的。它很简洁,就像大多数其他 Unix 命令一样,例如、ls
等等。它还与作为 Unix 的一部分发明的树形文件系统相匹配,其中甚至设备也是文件。很容易忘记,在 Unix 之前,没有多少操作系统具有树形文件系统,普通用户可以轻松创建目录。通常,您只会在某个地方获得(最多)一堆文件和奇怪的 IBM 实用程序(例如 IEBGENER)来操作它。rm
sed
/dev
它cd
的作用是改变当前进程(在本例中为 shell)的当前目录,这会影响操作系统如何解释相对文件名,即那些不是/
文件系统根目录中完全限定的文件名。当前目录从父进程继承到子进程。
cd
Unix 或 Linux 系统与 Windows 系统在语义上存在一些重大差异。其一是,cd
没有操作数应该做什么?在 Unix 或 Linux 上,它会带您进入主目录。在 Windows 上,cmd.exe
只是cd
报告当前目录。此外,Windows 不是单根的,它有驱动器号,您可以在每个驱动器号上都有一个当前目录,尽管幕后的实现是 Microsoft 将其扔到应用程序空间中:每个进程都带有一些名称奇怪的隐藏环境变量,=C:
应用程序负责保持最新。
有些cd
命令比其他命令更好,但这可能是个人喜好问题。C 壳CDPATH
引入了类似于变量的思想,PATH
但查找的是目录而不是可执行文件。C shell 还引入了目录堆栈,允许您pushd
或popd
当前目录。在编写我自己的 C shell我复制了所有这些,添加了一个选项让用户决定cd
没有操作数应该做什么,以及一个客户建议的功能,即如果您输入超过 2 个点,它cd ....
应该上升 n-1 级。
答案3
是的,cd
这是一个可以在 Linux、OSX 和其他 *nix 操作系统上运行的 *nix 命令。
答案4
DOS 和 Windows 中的命令cd
与 Unix/Linux 中的命令非常相似,原因很简单:整个目录的概念都是从 Unix 复制而来的。
第一个运行 MS-DOS(品牌为 PC-DOS)的系统是 IBM PC。当时没有硬盘,存储位于软盘上,容量有 180K 和 360K。由于介质如此有限,您不需要复杂的文件命名方案。因此,完全合格的文件名只是一个驱动器指示符,后面跟着一个8.3 文件名例如a:autoexec.bat
或b:advent.exe
。
MS-DOS 2.0 尝试通过复制 Unix 的功能来解决许多此类问题。这包括目录和处理目录的命令。一个问题是 MS-DOS 已使用 / 字符来表示可选参数;这就是 Windows 和 Unix 使用不同路径分隔符的原因。
一个重要的区别是,Unix 具有统一的目录层次结构,没有驱动器指示符。在将命令改编cd
为 MS-DOS 时,Microsoft 必须为“当前目录”概念发明新的语义,将驱动器指示符考虑在内。为了最大限度地实现向后兼容性(以便像 这样的名称a:something
仍然具有合理的意义),他们发明了“当前驱动器”的概念,并规定每个驱动器都有自己的“当前目录”。因此,当您更改“当前目录”时,您实际上是在更改当前驱动器的当前目录。通常,您不必担心这种细节。但它确实解释了为什么当您打开c:\somedir
并且什么都没cd d:\otherdir
发生时。什么有发生的事情是,您更改了d:
驱动器的当前目录,但没有更改当前驱动器;您必须输入d:
命令才能实现这一点。