如何使用 'cd' 命令将驱动器从 C: 更改为 E: ?另外如何使用“cd”命令转到其他驱动器中存在的目录?我知道'cd ..'命令返回根目录。
2 回答
您需要使用该/D
选项同时更改驱动器和目录。
cd /d e:\somedir
如果你运行cd /?
它会显示它支持的所有选项
在键入时获得的用户和系统环境变量的组合然后按字母顺序排列的列表之前,set
实际上有一些隐藏变量,每次访问新卷时,每个隐藏变量都会创建并出现在进程 PEB 环境块中,在要求。
使用它们可以看到!peb
:cmd.exe
Environment: 0000000002a2b0a0
=::=::\
=C:=C:\Users
=D:=D:\Phone\mi mix post root
ALLUSERSPROFILE=C:\ProgramData
每次您通过键入C:
或进入驱动器D:
然后cd
进入目录时,此变量都会更新。您可以通过将变量括在百分号中来访问它。
“命令提示符”实际上是字符串C:\Users>
。请记住,您现在访问的任何目录或您访问的任何文件\
的开头都有一个隐含的。cd
当前目录中文件和目录之前的隐式反斜杠仅在您位于根目录时显示在命令提示符中。但是,当您在C:\Users
其中时,您可能会想到cd
to \All Users
,以提供反斜杠,但这实际上会All Users
在根目录中查找名为的目录。以这种方式安全地解释它是因为不能有一个C:\Users\\All Users
带有嵌套的 ie 空白目录名称All Users
在当前目录中作为空白文件和目录名是不允许的;或者,当前目录中不能有包含反斜杠的文件或目录,即\All Users
因为不允许文件和目录名称包含反斜杠分隔符。
D:
是卷,当你通过输入访问它时,如果你之前在实例中没有访问过卷D:
,它会自动把你放到根目录,就像卷cwd环境变量在创建时的默认值一样你先输入。是卷的根目录,使用 just将被解释为当前卷的根目录,即根据命令提示符当前正在查看的任何卷。将 cwd音量变量更改为,如果您正在查看D:\
cmd.exe
D:\
D:
D:\
D:
\
cd D:\directory
D:
D:\directory
D:
卷,然后命令提示符将明显更改为它,否则如果您正在查看不同的卷,下次访问该卷时,命令提示符将更改为反映新的 cwd。
FileName
任何文件或目录的(在其文件对象中)始终是不带卷名的完整字符串,即( )FileName
中的文件的; ( )中的目录是; 根目录的文件名为. 为了确认这一点,我做了,这导致打开根目录文件对象的句柄,可以在进程资源管理器中看到。通过将符号应用于内核空间中实际对象的虚拟地址(进程浏览器可能通过对其驱动程序的 IOCTL 调用显示,该驱动程序使用句柄中的索引从进程的句柄表中读取),您可以看到文件姓名:C:\
C:\file
\file
FileName
C:\
C:\Users
\Users
\
cd /d D:\
cmd.exe
_FILE_OBJECT
EPROCESS
lkd> dt _FILE_OBJECT 0xFFFFFA802F6B18C0
nt!_FILE_OBJECT
+0x000 Type : 0n5
+0x002 Size : 0n216
+0x008 DeviceObject : 0xfffffa80`1a6a3cd0 _DEVICE_OBJECT
+0x010 Vpb : 0xfffffa80`1a6a0d40 _VPB
+0x018 FsContext : 0xfffff8a0`00643bc0 Void
+0x020 FsContext2 : 0xfffff8a0`23bf5e10 Void
+0x028 SectionObjectPointer : (null)
+0x030 PrivateCacheMap : (null)
+0x038 FinalStatus : 0n0
+0x040 RelatedFileObject : (null)
+0x048 LockOperation : 0 ''
+0x049 DeletePending : 0 ''
+0x04a ReadAccess : 0x1 ''
+0x04b WriteAccess : 0 ''
+0x04c DeleteAccess : 0 ''
+0x04d SharedRead : 0x1 ''
+0x04e SharedWrite : 0x1 ''
+0x04f SharedDelete : 0 ''
+0x050 Flags : 0x40002
+0x058 FileName : _UNICODE_STRING "\"
+0x068 CurrentByteOffset : _LARGE_INTEGER 0x0
+0x070 Waiters : 0
+0x074 Busy : 0
+0x078 LastLock : (null)
+0x080 Lock : _KEVENT
+0x098 Event : _KEVENT
+0x0b0 CompletionContext : (null)
+0x0b8 IrpListLock : 0
+0x0c0 IrpList : _LIST_ENTRY [ 0xfffffa80`2f6b1980 - 0xfffffa80`2f6b1980 ]
+0x0d0 FileObjectExtension : (null)
Now we know why the root directory is the only exception in showing the backslash that is inserted before accessing files or cd
ing to directories in the current directory, because it is already in the name of the directory – it is the name of the directory, and no implicit insertion needs to take place. When you cd Users
from C:\
it doesn't insert the slash before Users
because it's already there as the name of the current directory, but when you cd All Users
from C:\Users
, it inserts a backslash between the path of the current directory and the string entered in cd
, i.e. All Users
. As it automatically inserts the backslash at the beginning of the string in cd
,如果您在字符串的开头提供反斜杠,它会将其解释为不插入反斜杠的时间,即根目录。