Board logo

标题: [系统相关] 批处理命令diskpart怎样由卷标获取盘符? [打印本页]

作者: 回憶愛情    时间: 2012-6-6 15:05     标题: 批处理命令diskpart怎样由卷标获取盘符?

我在寻找这样一个答案

是否可利用 diskpart 指令

如 卷标=LENOVO  指定盘符 = I
  卷标=ACDBBB   指定盘符 = J

这样呢
也就是说 利用已知的 卷标 来获取盘符

或者 指定 盘符 C 改变为 H


另外 是否能做到 已知 盤符(而改變其類型呢:set id=12
也就是說 不知道是第幾個分區 僅利用盤符來做更改
作者: powerbat    时间: 2012-6-6 16:37

本帖最后由 powerbat 于 2012-6-6 18:07 编辑

list volume 可以得到很多信息,很好分析。
指派盘符可用命令 assign letter=x
什么叫更改“类型”、“id”?

也可以用wmic得到一些信息:
从卷标得到盘符
  1. wmic logicaldisk where (VolumeName='xx') get Name
复制代码
从盘符得到硬盘号、分区号
  1. wmic path Win32_LogicalDiskToPartition.Dependent='Win32_LogicalDisk.DeviceID="C:"' get Antecedent /value
复制代码
会得到类似于"Disk #0, Partition #1"的结果,wmic得到的Partition是主分区扩展分区那种性质的,diskpart是逻辑分区。
作者: 回憶愛情    时间: 2012-6-6 16:49

本帖最后由 回憶愛情 于 2012-6-6 16:53 编辑

設置EISA隱藏屬性 (set id=12 override)
a.bat
diskpart /s a.txt

a.txt
sele disk 0
sele part 2
set id=12


= = = = = = = = = = = = = = = = = = = = = = = = = = = =
卷標得到盤符 把 該盤符 當作 一個變數 以便後面的批次運用

從盤符得到硬盤號、分區號  也是要化做變數....

另外 一班做指令都是要指定 disk part   是否可直接透過 盤符來運行
作者: powerbat    时间: 2012-6-6 17:06

难怪,xp的diskpart没有setid命令。

如果想完全做到自动化,只用diskpart的脚本是不够的,还得靠bat帮忙。
示例
  1. @echo off
  2. echo list volume|diskpart|findstr /i LENOVO >~tmp
  3. for /f "tokens=2" %%a in (~tmp) do set part=%%a
  4. cmd /c "echo sele disk 0 & echo sele part %part% & echo set id=12" | diskpart
  5. del ~tmp
  6. pause
复制代码

作者: 回憶愛情    时间: 2012-6-6 17:11

难怪,xp的diskpart没有setid命令。

如果想完全做到自动化,只用diskpart的脚本是不够的,还得靠bat帮忙 ...
powerbat 发表于 2012-6-6 17:06


是的  我運用的系統是 Win 7 x64
以下是運行結果

Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在電腦: VISU_NAK-PC

DISKPART>
磁碟 0 是所選擇的磁碟。

DISKPART>
為此命令指定的引數無效。
如需命令的詳細資訊,請輸入: HELP SELECT PARTITION

沒有選擇磁碟分割。

DISKPART>
沒有選擇磁碟分割。
請選擇一個磁碟分割然後再試一次。

DISKPART> 請按任意鍵繼續 . . .

作者: powerbat    时间: 2012-6-6 17:21

那只是一个示例,将卷标为LENOVO的盘符的id设为12,不一定符合你的情况。
作者: 回憶愛情    时间: 2012-6-6 17:29

本帖最后由 回憶愛情 于 2012-6-6 17:57 编辑

回复 6# powerbat


    噗  我忘了 改 LENOVO  

測試後..發覺 由於我 (hd 0,2) (hd 0,3) 隱藏起來....
會變成 (hd 0,6)  在批次內 會當作 (hd 0,4)....

另外 第二顆 硬碟 他也會查找

就變成說 若是 第二顆有 "LENOVO" 在執行下一行指令 由於限定 硬盤 0  他會誤到
作者: 回憶愛情    时间: 2012-6-6 18:19

本帖最后由 回憶愛情 于 2012-6-6 18:38 编辑

謝謝 P兄

@echo off

echo list volume|diskpart|findstr /i LENOVO >~tmp

for /f "tokens=3" %%a in (~tmp) do set part=%%a

echo %part%

del ~tmp

pause

能得知 卷標的盤符了..繼續研究後續

該如何指定呢 (給他特定盤符....
作者: 回憶愛情    时间: 2012-6-6 18:30

本帖最后由 回憶愛情 于 2012-6-6 18:31 编辑

指定盘符 修改 也有着落了
批处理修改盘符
set old=T:
set new=F:
for /f %%i in ('mountvol %old% /l') do set "vol=%%i"
pushd %new% 2>nul && echo %new%盘已经存在! && pause && goto :eof
mountvol %old% /d
mountvol %new% %vol%
popd

剩下 set id=12
精准判断 并实行了..
作者: anson4    时间: 2022-11-21 20:00

回复 9# 回憶愛情


    Uniqueid disk id=0x12




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2