[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 5i365 于 2021-8-6 17:43 编辑

回复 8# went


    大侠牛B, 药到病除,非常感谢
想接着请教大侠,在当前的代码下, 能否顺便填加两个功能
1.如何获取卷标为Win的盘符和分区序号, 变量名分别为%winpf%  %winno%, 这样,我就得到卷标为win的分区, 它的盘符, 它的分区序号, 和它所在的硬盘序号
2.如果我想同时获取三个卷标所在分区的盘符,分区序号和硬盘号,复制同样的代码三份,应该可以实现, 但是能在当前代码稍改一下实现吗? 例如,同时查卷标为Win   soft    data 的分区的盘符,分区序号和各自所在的硬盘号

分区序号是下面的###下面的部分:

  卷 ###      LTR  标签         FS     类型        大小     状态       信息
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  卷     0     C   Win          NTFS   磁盘分区          80 GB  正常         启动
  卷     1     D   soft         NTFS   磁盘分区         92 GB  正常
  卷     2     E    data          NTFS   磁盘分区          29 GB  正常
  卷     3         EFI          FAT32  磁盘分区        1027 MB  正常         系统

TOP

TOP

第二句是为了提权,如果是PE环境下可以删掉
vol是查找的卷标
  1. @echo off & cd /d "%~dp0"
  2. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
  3. set "diskNo=-1"
  4. set "vol=Win10"
  5. for /l %%i in (0,1,10) do (
  6. (
  7. echo select disk %%i
  8. echo detail disk
  9. ) | diskpart | findstr /i /C:" %vol% " >nul 2>nul && (
  10. set "diskNo=%%i"
  11. goto :next
  12. )
  13. )
  14. :next
  15. echo %diskNo%
  16. pause&exit
复制代码

TOP

回复 6# newswan


     findstr 这个好像可以执行

TOP

回复 5# 5i365


那么,你的pe里有没有 findstr  ,或者 sed grep awk

TOP

本帖最后由 5i365 于 2021-8-6 08:14 编辑

回复 3# newswan


    对, 刚刚在WIN下试的,

在PE下测试,不行, 显示下面的错误

节点 - Winpe
错误:
描述 = 常规故障
ECHO 处于关闭状态。
没有可用实例。
ECHO 处于关闭状态。
请按任意键继续.

TOP

本帖最后由 5i365 于 2021-8-6 08:13 编辑

回复 2# newswan


    你好, 感谢支招,上面代码在win7下运行是OK的, 没有这一行,不行 setlocal ENABLEDELAYEDEXPANSION

TOP

pe下?支持wmic吗?

TOP

本帖最后由 newswan 于 2021-8-5 19:33 编辑

wmic 方便一些,用 diskpart 麻烦
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set _label_=New Volume
  4. for /f "usebackq tokens=2 delims==" %%a in (`
  5.     wmic logicaldisk where ^(VolumeName^='%_label_%'^) get name /value
  6. `) do (
  7.     if not defined _letter_ (set _letter_=%%a)
  8. )
  9. echo %_letter_%
  10. for /f "usebackq tokens=3 delims==" %%a in (`
  11.     wmic path Win32_LogicalDiskToPartition.Dependent^='Win32_LogicalDisk.DeviceID^="%_letter_%"' get Antecedent /value
  12. `) do (
  13.     set _dp_=%%a
  14.     set _dp_=!_dp_:""="%!
  15. )
  16. echo %_dp_%
复制代码
1

评分人数

TOP

返回列表