无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3205|回复: 11
打印 上一主题 下一主题

批处理自动查找所有可移动磁盘的physical编号和对应的盘符

[复制链接]
跳转到指定楼层
1#
发表于 2023-6-28 17:19:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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。
留贴纪念,不喜勿喷。




2#
发表于 2023-6-28 18:07:20 | 只看该作者
感谢分享
回复

使用道具 举报

3#
发表于 2023-6-28 19:26:34 | 只看该作者
原来是 用 powershell 。
不错,不错。
不过,如果是 pe 环境,怕是不通用。我用 pecmd 也做过一个类似的,但是需要依赖 pecmd 或者集成到 pecmd.exe 中。

点评

PE环境用ps很有问题,不完整,各自报错。  详情 回复 发表于 2023-6-28 19:31
回复

使用道具 举报

4#
发表于 2023-6-28 19:28:32 | 只看该作者
感谢 分享 试一试
回复

使用道具 举报

5#
 楼主| 发表于 2023-6-28 19:31:58 | 只看该作者
dos时代菜鸟 发表于 2023-6-28 19:26
原来是 用 powershell 。
不错,不错。
不过,如果是 pe 环境,怕是不通用。我用 pecmd 也做过一个类似的 ...

PE环境用ps很有问题,不完整,各种报错。
回复

使用道具 举报

6#
发表于 2023-6-28 19:47:33 | 只看该作者
谢谢分享。
回复

使用道具 举报

7#
发表于 2023-6-29 06:28:57 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
发表于 2023-6-29 10:03:38 | 只看该作者

谢谢chatGPT
回复

使用道具 举报

9#
发表于 2023-6-30 15:10:24 | 只看该作者
收藏备用, 谢谢分享.
回复

使用道具 举报

10#
发表于 2023-6-30 17:47:17 | 只看该作者
使用万能的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

评分

参与人数 1无忧币 +5 收起 理由
pda8888 + 5

查看全部评分

回复

使用道具 举报

11#
发表于 2023-7-1 22:43:53 | 只看该作者
既然都用diskpart了,那么dpinfo修改下更简单,更强大,附件是调用方式,也可以直接修改。

demo.7z

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

评分

参与人数 1无忧币 +5 收起 理由
pda8888 + 5

查看全部评分

回复

使用道具 举报

12#
发表于 2023-9-7 10:45:25 | 只看该作者
#在这里快速回复# 感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-25 21:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表