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

[系统相关] 求助批处理diskpart 结果 整理合并 卡壳几天了

正在写一个自动安装系统的批处理

主要思路:
1. list disk 获取磁盘总数
2. 遍历磁盘,通过 sel disk, list part, detail disk 生成磁盘信息
3. 使用for 遍历磁盘信息,提取数据

卡壳地方:list disk 与 detail disk 命令结果合并一起
解析内容,生成硬盘分区文件 [分区序号,磁盘号,分区号,大小,文件系统, 盘符,标签]

求指教或完善,,,谢谢


搬砖来的如下:
===================================================================
  1. @echo off
  2. ::自动请求以管理员权限运行
  3. if /i "%systemdrive%"=="C:" reg query HKU\S-1-5-20>nul 2>nul || echo;CreateObject^("Shell.Application"^).ShellExecute "%~f0", "%*", "", "runas", 1 > "%temp%\getadmin.vbs" && cscript //b "%temp%\getadmin.vbs" && exit /b & del "%temp%\getadmin.vbs" /f /q>nul
  4. SetLocal EnableDelayedExpansion
  5. ::设置批处理所在目录
  6. set DIR_CUR=%~dp0
  7. cd %DIR_CUR%
  8. color 02
  9. :: 磁盘总数,从0开始
  10. for /f "delims=" %%i in ('echo list disk^|diskpart^|findstr /i "联机"') do (set /a dn+=1)
  11. set /a DSK_NO=%dn%-1
  12. :: 生成磁盘信息
  13. if exist dp_dsk.txt del dp_dsk.txt
  14. for /l %%i in (0,1,!DSK_NO!) do (
  15.    (echo sel disk %%i & echo detail disk & echo list part)|diskpart>>dp_dsk.txt
  16. )
  17. ::解析内容,生成硬盘分区文件 [序号,磁盘号,分区号,大小,文件系统, 盘符,标签]
  18. SetLocal EnableDelayedExpansion
  19. if exist dp_ap.txt del dp_ap.txt
  20. for /f "delims=" %%j in (dp_dsk.txt) do (
  21.    set "oneline=%%j"
  22.    ::行号
  23.    set /a l+=1
  24.    if "!oneline:~0,5!"=="在计算机上" (set /a n=!l!+2 & set /a t=!l!+4 & set /a p=!l!+6)
  25.    if !l!==!n! (set nn=!oneline:~3,1!)
  26.    if !l!==!t! (set tt=!oneline!)
  27.    if !l!==!p! (set pp=!oneline:~7! & (echo !nn! !tt! !pp!))
  28.    if "!oneline:~0,7!"=="  分区   " (set /a b+=1 & (echo !b! !nn! !oneline:~10,1! !oneline:~15,3! !oneline:~30,10!))
  29. )
  30. pause
复制代码

TOP

本帖最后由 dong3626 于 2023-3-1 18:56 编辑
回复  dong3626
newswan 发表于 2023-3-1 16:45



   发帖前看过,,,无奈 刚入门,,,实在看不明白

另外,能接触到的基本都是新电脑或近2年的,不需要考虑这么复杂的环境,

只想代码简单,逻辑清晰,解决问题 就好

谢谢

TOP

回复 3# dong3626


    要么powershell 或者wmic

TOP

  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. REM 管理员权限
  4. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
  5. REM 获取磁盘总数
  6. set /a "DSK_NO=-1"
  7. for /f "delims=" %%i in ('echo list disk^|diskpart^|findstr /i "联机"') do (set /a DSK_NO+=1)
  8. REM 生成磁盘信息
  9. echo 序号,磁盘号,分区号,大小,文件系统,盘符,标签
  10. set /a "num=0"
  11. for /l %%z in (0,1,!DSK_NO!) do (
  12. for /f "skip=1 tokens=2-9" %%a in ('(echo sel disk %%z ^& echo detail disk^)^|diskpart^|findstr "卷"') do (
  13. if "%%h"=="" (
  14. echo !num!,%%z,%%a,%%d%%e,%%b,无,无
  15. ) else (
  16. echo !num!,%%z,%%a,%%f%%g,%%d,%%b,%%c
  17. )
  18. set /a "num+=1"
  19. )
  20. )
  21. pause&exit
复制代码

TOP

回复 5# went


测试结果:
  1. 序号,磁盘号,分区号,大小,文件系统,盘符,标签
  2. 0,0,1,MB正常,磁盘分区,系统保留,NTFS
  3. 1,0,2,GB正常,磁盘分区,C,NTFS
  4. 2,1,3,31GB,NTFS,E,Key
  5. 请按任意键继续. . .
复制代码
测试环境:
  1. 磁盘 0 现在是所选磁盘。
  2.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  3.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  4.   卷     1         系统保留         NTFS   磁盘分区         100 MB  正常         系统
  5.   卷     2     C                NTFS   磁盘分区          31 GB  正常         启动
  6. 磁盘 1 现在是所选磁盘。
  7.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  8.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  9.   卷     3     E   Key          NTFS   磁盘分区          31 GB  正常
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# went


    也许还有更加复杂的情况,标签可能为空、1个词、多个词。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# dong3626

使用目的是自动安装系统,那么就需要得到 详细情况,最好完备,磁盘分区格式、隐藏分区

如果pe,支持 powershell ,可以用下面的
http://www.bathome.net/thread-65340-1-1.html

TOP

回复 7# Batcher


    不通用,for是有点无能为力了

TOP

进度更新,卡到变量嵌套更新了
  1. @echo off
  2. ::自动请求以管理员权限运行
  3. if /i "%systemdrive%"=="C:" reg query HKU\S-1-5-20>nul 2>nul || echo;CreateObject^("Shell.Application"^).ShellExecute "%~f0", "%*", "", "runas", 1 > "%temp%\getadmin.vbs" && cscript //b "%temp%\getadmin.vbs" && exit /b & del "%temp%\getadmin.vbs" /f /q>nul
  4. ::SetLocal EnableDelayedExpansion
  5. ::设置批处理所在目录
  6. set DIR_CUR=%~dp0
  7. cd %DIR_CUR%
  8. color 02
  9. :: 磁盘总数,从0开始
  10. for /f "delims=" %%i in ('echo list disk^|diskpart^|findstr /i "联机"') do (set /a dn+=1)
  11. set /a DSK_NO=%dn%-1
  12. :: 生成磁盘信息
  13. if exist dp_t.txt del dp_t.txt
  14. for /l %%i in (0,1,!DSK_NO!) do (
  15.    (echo sel disk %%i & echo detail disk & echo list part)|diskpart>>dp_t.txt
  16. )
  17. ::解析内容,生成硬盘分区文件 [序号,磁盘号,分区号,大小,文件系统, 盘符,标签]
  18. for /f "delims=" %%j in (dp_t.txt) do (
  19.    set "ol=%%j"
  20.    ::行号
  21.    set /a l+=1
  22.    ::echo 第!l!行: !ol:~38,4!
  23.    if "!ol:~0,5!"=="在计算机上" (set /a n=!l!+2 & set /a t=!l!+4 & set /a p=!l!+6)
  24.    if !l!==!n! (set nn=!ol:~3,1!)
  25.    if !l!==!t! (set tt=!ol!)
  26.    if !l!==!p! (set pp=!ol:~7! & (echo ***** !nn! !tt! !pp! *****))
  27.    if "!ol:~38,4!"=="磁盘分区" (
  28.       set ttt=!ol:~50,7!
  29.       set "ttt=!ttt: =!"
  30.       (echo 盘符-文件系统-大小 !ol:~14,1!   !ol:~31,5!   !ol:~50,7!)
  31.       (set lb!ttt!=!ttt!)
  32.       (set PF!ttt!=!ol:~14,1!)
  33.       (set FS!ttt!=!ol:~31,5!)
  34.       (echo xxxxxxxxxxxxxxxxx:lb!ttt!)
  35.    )
  36.    SetLocal EnableDelayedExpansion
  37.    if "!ol:~0,7!"=="  分区   " (
  38.       set /a b+=1
  39.       set ppp=!ol:~33,7!
  40.       set "ppp=!ppp: =!"
  41.       (echo !b! !nn! 盘符 文件系统  标签 !ol:~10,1! !ol:~15,3! !ppp!)
  42.       echo PPPPPPPPPPPFFFFFFFFFF:lb!ppp!
  43.       if defined lb!ppp! (echo 卡到这里了 lb!ppp! %PF!ppp!% %FS!ppp!%) else (echo 不可更新 lb!ppp!)
  44.    )
  45. )
  46. echo.
  47. pause
复制代码

TOP

回复 10# dong3626


变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表