Board logo

标题: 怎么用Bat实现更改驱动器盘符! [打印本页]

作者: newaifi     时间: 2006-11-4 14:15    标题: 怎么用Bat实现更改驱动器盘符!

今天听一群里的同志问此问题。想想WIN下面好像没有对驱动器直接操作的WIN命令。。

比如原本的盘符是D: 现在我想把这个D盘改成E盘。。请问大家用什么命令实现。
作者: skyearth     时间: 2006-11-4 23:14
试试PUSHD D:吧!
如果要返回原地,则用POPD即可!

例如:当前在C:
PUSHD D:
REM 显示D盘上的文件
DIR /w
POPD
仍会在C盘
作者: electronixtar     时间: 2006-11-4 23:27
drvmount,好像是这个命令。忘记了
作者: electronixtar     时间: 2006-11-5 00:08
原来是 mountvol.exe

  Quote:
C:\WINDOWS\system32>mountvol.exe /?
创建、删除或列出卷装载点。

MOUNTVOL [drive:]path VolumeName
MOUNTVOL [drive:]path /D
MOUNTVOL [drive:]path /L

    path        指定装入点将驻留的现有 NTFS 目录。
    VolumeName  指定装入点的目标的卷名称。
    /D          从指定的目录中删除卷装入点。
    /L          列出指定目录的已装入的卷名称。


作者: electronixtar     时间: 2006-11-5 00:22
好像2003的增强了

  Quote:
Mountvol
更新日期: 01/21/2005
  
相关链接
• Dir
• Net use
• 命令行参考 A-Z
• Command
  

Mountvol
创建、删除或列出卷装入点。Mountvol 是一种不需要驱动器号而链接卷的方式。

语法
mountvol [Drive:]Path VolumeName

mountvol [Drive:]Path/d

mountvol [Drive:]Path/l

mountvol [Drive:]Path/p

mountvol/r

mountvol/n

mountvol/e

mountvolDrive:/s

参数
[ Drive:]Path

指定装入点所在的现有 NTFS 目录文件夹。

VolumeName

指定装入点目标卷的卷名。卷名格式为 \\?\Volume{GUID}\,其中,{GUID} 是全局唯一标识符 (GUID)(例如,\\?\Volume\{2eca078d-5cbc-43d3-aff8-7e8511f60d0e}\)。

/d

从指定文件夹中删除卷装入点。

/l

列出指定文件夹的装入卷名。

/p

从指定的目录中删除卷装入点、卸载基本卷、使基本卷脱机,使其不可安装。如果其他过程使用的是该卷,则 mountvol 将在卸载该卷之前关闭所有打开的句柄。使用 /p 卸载的卷将在卷列表中作为 NOT MOUNTED UNTIL A VOLUME MOUNT POINT IS CREATED(创建卷装入点后才安装)列出。如果该卷的装入点不止一个,则使用 /p 之前请使用 /d 删除其他装入点。通过指派卷装入点,可以重新安装基本卷。

/r

删除系统中不再存在的卷装入点目录和注册表设置。这样,不但可以防止自动装入系统中以前的卷,而且可以防止其在添加回系统时被授予以前的卷装入点。

/n

禁止自动装入新的基本卷。新卷添加到系统时不会自动装入。

/e

重新启用新基本卷的自动装入。

/s

仅限于基于 Itanium 的计算机。在指定驱动器上装入 EFI 系统分区。

/?

在命令提示符下显示帮助。

注释
• 如果用完了可用的驱动器号,则装入无驱动器号的本地卷。

• 如果需要在不重新格式化或更换硬盘的情况下扩展卷空间,可向其他卷中添加装入路径。

• 如果使用一个具有多装入路径的卷,其好处在于可以使用单个驱动器号(如 C:)访问所有的本地卷。虽然可以装入本地卷并且为它们指派驱动器号,但是不需要记住哪个卷对应哪个驱动器号。

注册表里
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
作者: 3742668     时间: 2006-11-5 00:27

@echo off
    set old=d:
    set new=e:
    pushd %new% 2>nul && echo %new%盘已经存在! && pause && goto :eof
    for /f %%i in ('mountvol %old% /l') do set "vol=%%i"
    mountvol %old% /d
    mountvol %new% %vol%
    popd
本版已有过讨论,建议没事多翻翻老贴:[已结]如何用批处理隐藏磁盘  
作者: voiL     时间: 2006-11-5 00:34
好像有人误解了楼主的意思哦.
作者: newaifi     时间: 2006-11-5 06:10
感谢各位兄台的指导。

没想到WIN下还是有对磁盘卷直接操作的命令。看样子是本人忽略了。
作者: redtek     时间: 2006-11-8 08:01
我也来一个(权当玩笑啊),哈哈……
G:\>晕:
系统找不到指定的驱动器。

G:\>subst 晕: g:\

G:\>晕:

晕:\>md 晕:\再晕

晕:\>cd 晕:\再晕

作者: holee     时间: 2006-11-11 12:12
在Windows 下面用diskpart.
example:
用list volume 可以看到D盘的Volume 为Volume 2的话。
diskpart
select disk 0
select volume 2
assgin letter=E
exit 就可以了
作者: lxmxn     时间: 2006-11-11 14:20


  Quote:
Originally posted by holee at 2006-11-11 12:12:
在Windows 下面用diskpart.
example:
用list volume 可以看到D盘的Volume 为Volume 2的话。
diskpart
select disk 0
select volume 2
assgin letter=E
exit 就可以了


  这个方法好强啊~顶了~

作者: namejm     时间: 2006-11-11 21:05
  diskpart 是个功能强大的磁盘和分区管理程序,下面是系统自带的帮助文件ntcmds.chm里关于 diskpart 的介绍:
DiskPart.exe 是一种文本模式命令解释程序,它使您能够通过使用脚本或从命令提示符直接输入来管理对象(磁盘、分区或卷)。在磁盘、分区或卷上使用 DiskPart.exe 命令之前,必须首先列出然后选中要给予其焦点的对象。当某个对象具有焦点时,键入的任何 DiskPart.exe 命令都会作用到该对象。

利用 list disk、list volume 和 list partition 命令,可以列出可用对象并确定对象编号或驱动器号。list disk 和 list volume 命令显示计算机上的所有磁盘和卷。而 list partition 命令只显示具有焦点的磁盘上的分区。使用 list 命令时,具有焦点的对象旁边出现一个星号 (*)。可以按编号或按驱动器号选择对象,例如,磁盘 0、分区 1、卷 3 或卷 C。

选择对象时,焦点一直保留在那个对象上,直到选中不同的对象。例如,如果在磁盘 0 上设置了焦点,并且选择磁盘 2 上的卷 8,焦点就从磁盘 0 转移到磁盘 2 上的卷 8。有些命令会自动更改焦点。例如,如果创建了新分区,焦点就自动转移到新分区上。

只能在选定磁盘上的分区上设置焦点。某个分区具有焦点时,相关的卷(如果有的话)也具有焦点。某个卷具有焦点时,如果该卷映射到某个特定分区,则相关的磁盘和分区也具有了焦点。如果不是这样,则说明磁盘和卷上的焦点丢失。

作者: ccwan     时间: 2006-11-11 21:55
卧虎藏龙
作者: hxuan999     时间: 2006-11-13 07:44
藏龙卧虎
作者: honhaizh     时间: 2006-11-16 19:12
diskpart很实用
作者: newaifi     时间: 2007-2-22 09:46
实在是强。。
作者: anqing     时间: 2007-2-22 12:13
这个命令,真强,头一次知道还有它
作者: 6622186     时间: 2007-3-5 13:39
好像比系统的帮助多几个参数, 是不是 2003 当中的, 还是微软没公布.
作者: SCZXCHEN     时间: 2007-3-7 07:13
高.高人
作者: qinbuer     时间: 2007-7-10 18:53
有些变态点的优化工具会禁用了Logical Disk Manager服务,DISKPART便用不上了。
作者: 51dosa     时间: 2008-1-4 17:16    标题: 我该这么复原啊

我用你文件不小心掉了一个字母g,运行后就原来的g盘不见了。

我该这么复原啊

e.bat

@echo off
    set old=::lol:
    set new=e:
    pushd %new% 2>nul && echo %new%盘已经存在! && pause && goto :eof
    for /f %%i in ('mountvol %old% /l') do set "vol=%%i"
    mountvol %old% /d
    mountvol %new% %vol%
    popd