无忧启动论坛

标题: 批处理自动查找所有可移动磁盘的physical编号和对应的盘符 [打印本页]

作者: pda8888    时间: 2023-6-28 17:19
标题: 批处理自动查找所有可移动磁盘的physical编号和对应的盘符
本帖最后由 pda8888 于 2023-6-28 19:54 编辑

由本人与chatGPT联合创作,哈哈。
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set "SelectSequence=123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4. for /f %%i in ('echo prompt $E ^| cmd') do set "KeyESC=%%i"

  5. ::::::::::::::::::::: Powershell 代码
  6. set "psCommand=powershell -Command "^
  7. $disks = Get-CimInstance -ClassName Win32_DiskDrive -Filter \"MediaType^='Removable Media' OR MediaType^='External Hard Disk Media'\"; ^
  8. $outstr = ''; ^
  9. foreach ($disk in $disks) { ^
  10.     $diskModel = $disk.Model; ^
  11.     $diskNumber = $disk.DeviceID.Replace('\\.\PHYSICALDRIVE', ''); ^
  12.     $partitions = Get-Disk -Number $diskNumber ^| Get-Partition; ^
  13.     $driveLetter = ''; ^
  14.     foreach ($partition in $partitions) { ^
  15.         $driveLetter = $driveLetter + ' ' + (Get-Volume -Partition $partition).DriveLetter + ':'; ^
  16.     } ^
  17.     $driveLetter = $driveLetter.trim(); ^
  18.     $outstr = $outstr + \"$diskNumber^^^&型号:$diskModel^($driveLetter^)`n\"; ^
  19. } ^
  20. Write-Host $outstr.TrimEnd(\"`n\"); ^
  21. ""
  22. ::::::::::::::::::::: Powershell 代码

  23. set /a "c=0"
  24. for /f "usebackq tokens=1,2 delims=&" %%A in (`%psCommand%`) do (
  25.     set /a "c+=1"
  26.     set "udisk[!c!].num=%%A"
  27.     set "udisk[!c!].str=%%B"
  28. )
  29. if !c!==0 (echo 没有检测到U盘,请插入U盘再运行!按任意键退出。& pause >nul 2>nul & goto :eof)
  30. set "SelKey=!SelectSequence:~0,%c%!"
  31. :select_U
  32. for /l %%i in (1, 1, !c!) do echo %%i^) !udisk[%%i].str!
  33. choice /c %SelKey% /m 请选择U盘:
  34. set selection=%errorlevel%
  35. echo 已选择 %KeyESC%[48;5;196m%KeyESC%[4m%KeyESC%[1m!udisk[%selection%].str!%KeyESC%[0m
  36. choice /c YR /m 清除U盘数据并继续(Y/y)、重选(R/r)?
  37. if errorlevel 2 goto :select_U
  38. rem 此时已得到所选U盘的physical号码,即可以操作 \\.\PHYSICALDRIVE1 之类了
  39. echo !udisk[%selection%].num!

  40. REM (
  41. REM echo list disk
  42. REM echo sel disk 1
  43. REM echo list volume
  44. REM echo exit
  45. REM ) | diskpart > nul 2>nul
复制代码

本来是要自动把UDF格式的PE ISO写到U盘并使之能启动的,一定是脚本形式。
结果在如何获取physical编号及对应的盘符上停滞不前,多亏有chatGPT。
留贴纪念,不喜勿喷。





作者: yyz2191958    时间: 2023-6-28 18:07
感谢分享
作者: dos时代菜鸟    时间: 2023-6-28 19:26
原来是 用 powershell 。
不错,不错。
不过,如果是 pe 环境,怕是不通用。我用 pecmd 也做过一个类似的,但是需要依赖 pecmd 或者集成到 pecmd.exe 中。
作者: fengkissping    时间: 2023-6-28 19:28
感谢 分享 试一试
作者: pda8888    时间: 2023-6-28 19:31
dos时代菜鸟 发表于 2023-6-28 19:26
原来是 用 powershell 。
不错,不错。
不过,如果是 pe 环境,怕是不通用。我用 pecmd 也做过一个类似的 ...

PE环境用ps很有问题,不完整,各种报错。
作者: 旁观者清    时间: 2023-6-28 19:47
谢谢分享。
作者: KIM3298    时间: 2023-6-29 06:28
谢谢分享
作者: 2013abcdefg    时间: 2023-6-29 10:03

谢谢chatGPT
作者: lx5815    时间: 2023-6-30 15:10
收藏备用, 谢谢分享.
作者: conlin888    时间: 2023-6-30 17:47
使用万能的PECMD:

for /f "delims=" %%i in ('call pecmd.exe "Team/ fdrv v=*:/forx * %%v%%,v,team part list drv %%v%%,v1|ifex '%%v1%%'='',!team@ mstr * v1=<-1>v1@part list disk %%v1%%,v2@mstr * v2=<-3>v2@ifex $%%v2%%=7,set. &u=%%&u%%\n%%v%% %%v1%%/mstr * &u=-1,-2,&u/writ *fv -,,&u"') do @echo %%i
pause
作者: nttwqz    时间: 2023-7-1 22:43
既然都用diskpart了,那么dpinfo修改下更简单,更强大,附件是调用方式,也可以直接修改。

demo.7z

16.19 KB, 下载次数: 7, 下载积分: 无忧币 -2


作者: dayeye    时间: 2023-9-7 10:45
#在这里快速回复# 感谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3